a:8:{s:4:"name";s:13:"jcb_columnize";s:6:"author";s:10:"Jim Benton";s:10:"author_uri";s:26:"http://infiniteexpanse.net";s:7:"version";s:3:"0.2";s:11:"description";s:51:"Creates HTML to allow for CSS multi-column layouts.";s:4:"help";s:589:"
	<p>The plugin will divide the HTML that it receives into a user-set number of divs. This is accomplished by setting the attribute "columns" equal to the value you desire. Please note that this feature is somewhat experiemental, and depending on the code being processing may generate some visually uneven divs.</p><p>The divs output by this plugin are assigned the class "columnized" by default. If you would like to be able to define styles for the divs individually, set the attribute classes="uniform". This will cause them to be be assigned a class of "column1", "column2", etc.</p>
";s:4:"code";s:2314:"
function jcb_columnize($atts, $thing) {    // check for passed attributes    if(isset($atts)) extract($atts);        // assign defaults for variables if not set by user    if(!isset($columns)) $columns = 2;    if(!isset($classes)) $classes = "unique";        // retrieve html to be processed     $body = parse($thing);        // find length of article and each column        $totalLength = strlen($body);    $columnLength = floor($totalLength/$columns);        // debug stuff    //echo $totalLength . "\n";        // $startPoint is where this column's search for a closing paragrah tag will begin    $lastSplit = 0;    $usedLength = 0;    $columnized = '';        $maches = array();        // figure out total number of paragraphs    $totalP = preg_match_all("|</p>|", $body, $matches);    if ($totalP <= $columns) {        $limit = $totalP;    } else {        $limit = $columns;    }    for ($i=1; $i<=$limit; $i++) {                // find length of body remaining        $remaining = $totalLength - $usedLength;                // find next paragraph tag starting after split point        // adding 3 compensates for the length of the string we are looking for: "</p>"        if ($i != $limit)  {            $thisSplit = strpos($body, "</p>", $lastSplit + ($remaining/$limit-$i)) + 3;        }                // build column        if ($classes == "unique") {                $thisColumn = '<div class="column' . $i . '">';        } else {                $thisColumn = '<div class="columnized">';        }                if ($i == $limit) {            $thisColumn .= substr($body, $lastSplit);        } else {            $thisLength = $thisSplit - $lastSplit +1;            $usedLength += $thisLength;            $thisColumn .= substr($body, $lastSplit, $thisLength);        }                $thisColumn .= "\n" . '</div>' . "\n";                // more debug stuff        //echo $i . "    " . $limit . "    " . $lastSplit . "    " . $thisSplit . "    " . $columnLength . "    " . $thisLength . "    " . $usedLength . "    " . $totalLength . "\n";                // setup variables for next loop        $lastSplit = $thisSplit + 1;        $columnized .= $thisColumn;    }                // return assembled html    return $columnized;}
";s:3:"md5";s:32:"6574d6381e483169fbbab844f11ac445";}