00007: WikiWord counts available yet (v2)
Description: The code for rendering links based on counts of WikiWords has not been implemented yet.
In addition, it would be nice if there were pattern-based mechanisms for enabling WikiWords or converting words to specific page locations.
Note that it's possible to disable WikiWords entirely (if that's what you want) by setting $LinkWikiWords
=0; in config.php. Also, you can prevent a word from being treated as a WikiWord by placing a ` in front of it, as in WikiWord. --Pm
- According to me the earlier method of listing words that should not show-up as wiki words is a better approach - it's a one time edit, located at one place. Please offer this feature as a plugin script, if not as a default one.
Zev Goldberg wrote on 2007-04-17: I hacked together this script from the FmtPageList
function in the PageLists script to count all the words in the listed pages. I'm pretty sure this can be cleaned up a little, but I know this works for me. I'm using PmWiki version 2.1.27.
Add the following to your config file:
Markup('wordcount', 'directives', '/\\(:wordcount(\\s+.*?)?:\\)/ei', "FmtPageListWordCount('\$MatchList', \$pagename, array('o' => PSS('$1 ')))"); function FmtPageListWordCount($outfmt, $pagename, $opt) { global $GroupPattern, $FmtV, $FPLFormatOpt, $FPLFunctions; # get any form or url-submitted request $rq = htmlspecialchars(stripmagic(@$_REQUEST['q']), ENT_NOQUOTES); # build the search string $FmtV['$Needle'] = $opt['o'] . ' ' . $rq; # Handle "group/" at the beginning of the form-submitted request if (preg_match("!^($GroupPattern(\\|$GroupPattern)*)?/!i", $rq, $match)) { $opt['group'] = @$match[1]; $rq = substr($rq, strlen(@$match[1])+1); } # merge markup options with form and url $opt = array_merge($opt, ParseArgs($opt['o'] . ' ' . $rq), @$_REQUEST); # non-posted blank search requests return nothing if (@($opt['req'] && !$opt['-'] && !$opt[''] && !$opt['+'] && !$opt['q'])) return ''; # terms and group to be included and excluded $GLOBALS['SearchIncl'] = array_merge((array)@$opt[''], (array)@$opt['+']); $GLOBALS['SearchExcl'] = (array)@$opt['-']; $GLOBALS['SearchGroup'] = @$opt['group']; $fmt = @$opt['fmt']; if (!$fmt) $fmt = 'default'; $fmtopt = @$FPLFormatOpt[$fmt]; if (!is_array($fmtopt)) { if ($fmtopt) $fmtopt = array('fn' => $fmtopt); elseif (@$FPLFunctions[$fmt]) $fmtopt = array('fn' => $FPLFunctions[$fmt]); else $fmtopt = $FPLFormatOpt['default']; } $fmtfn = @$fmtopt['fn']; if (!is_callable($fmtfn)) $fmtfn = $FPLFormatOpt['default']['fn']; $matches = array(); $opt = array_merge($fmtopt, $opt); $out = $fmtfn($pagename, $matches, $opt); $FmtV['$MatchCount'] = count($matches); if ($outfmt != '$MatchList') { $FmtV['$MatchList'] = $out; $out = FmtPageName($outfmt, $pagename); } //start word count code : Zev Goldberg $string = $out; //place custom $string definitions here. $string = ereg_replace("(<[^>]+>)","\\1 ",$string); $string = strip_tags($string); $string = eregi_replace(" +", " ", $string); $string = explode(" ", $string); $word_count = 0; while (list(, $word) = each ($string)) { //add or remove characters in the following eregi function to customize if (eregi("[0-9A-Za-zÀ-ÖØ-öø-ÿ]", $word)) { $word_count++; } } return $word_count; }
To call up the word count, place (:wordcount:)
in your wiki entry and use the PmWiki.PageLists syntax for everything you want to count. I've only tested this with what I needed so far, using the group and fmt parameters.
You can tweak the $string
definition statements to include/exclude additional strings and characters. Replace any strings you want, the only thing displayed is the final word count.