# HG changeset patch # User Dan # Date 1243621967 14400 # Node ID 88265c8715d07fb8d246b8378306ff80fc781aa9 # Parent 616d046e3bd9329b13818e9abfc42b0b381ebadc Improvements to parsing for TOC diff -r 616d046e3bd9 -r 88265c8715d0 Wikulator.php --- a/Wikulator.php Wed Dec 24 11:04:18 2008 -0500 +++ b/Wikulator.php Fri May 29 14:32:47 2009 -0400 @@ -16,7 +16,7 @@ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. */ -$plugins->attachHook('render_wikiformat_pre', 'mediafier_draw_toc($text);'); +$plugins->attachHook('render_wikiformat_posttemplates', 'mediafier_draw_toc($text);'); $plugins->attachHook('render_wikiformat_post', 'mediafy($result);'); $plugins->attachHook('compile_template', 'mediafier_add_headers();'); $plugins->attachHook('html_attribute_whitelist', '$whitelist["ref"] = array(); $whitelist["references"] = array("/");'); @@ -66,7 +66,8 @@ unset($treenum[count($treenum)-1]); } } - $treenum[count($treenum)-1]++; + if ( isset($treenum[count($treenum)-1]) ) + $treenum[count($treenum)-1]++; if ( $i > 0 ) $toc .= ''; $toc .= '
' . implode('.', $treenum) . ' ' . htmlspecialchars($matches[2][$i]) . ''; @@ -81,11 +82,20 @@
Contents [hide]
$toc
"; - + if ( strstr($text, '__TOC__') ) + { $text = str_replace_once('__TOC__', $toc_body, $text); - else if ( ($text = preg_replace('/^=/', "$toc_body\n\n=", $text)) === $text ) + } + else if ( $text === ($rtext = preg_replace('/^=/', "$toc_body\n\n=", $text)) ) + { $text = str_replace_once("\n=", "\n$toc_body\n=", $text); + } + else + { + $text = $rtext; + unset($rtext); + } } function mediafier_add_headers() @@ -202,7 +212,7 @@ // highlight matches foreach ( $words as $word ) { - $result = preg_replace('/([\W]|^)(' . preg_quote($word) . ')([\W])/i', "\\1\\2\\3", $result); + $result = preg_replace('/([\W]|^)(' . str_replace('/', '\/', preg_quote($word)) . ')([\W])/i', "\\1\\2\\3", $result); } // restore HTML @@ -256,6 +266,7 @@ foreach ( $refs as $i => $ref ) { $reflink = '^ '; + $ref = trim($ref); $refsdiv .= "
$reflink $i. $ref
"; if ( $i == $count ) $refsdiv .= '';