<?php if (!defined('PmWiki')) exit(); /* A slight modification of the file "trails.php", which is Copyright 2002-2004 Patrick R. Michaud (pmichaud@pobox.com) and which forms part of PmWiki; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. See pmwiki.php for full details. This script enables markup of the form <<|TrailPage|>> to be used to build "trails" through wiki documents. The modification enables the markup <<(:pagelist ... :)>>, to build a trail from a pagelist directive, or to expand and include any pagelist directive found on an index page for a normal WikiTrail. This version should be downloaded to the cookbook folder. The original "trails.php" should be disabled, and this new one included by putting $EnableWikiTrails=0; include_once("cookbook/pagelisttrails.php"); in the config.php file. Once enabled, the <<|TrailPage|>> markup is replaced with << PrevPage | TrailPage | NextPage >> on output. TrailPage should contain either a bullet or number list defining the sequence of pages in the "trail". The ^|TrailPage|^ markup uses the depth of the bullets to display the ancestry of the TrailPage to the current one. The <|TrailPage|> markup is like <<|TrailPage|>> except that "< PrevPage |" and "| NextPage >" are omitted if at the beginning or end of the trail respectively. Thanks to John Rankin for contributing these markups and the original suggestion for WikiTrails. */ $HTMLStylesFmt['extend'] = " .trailRight { float:right; } "; Markup('<<|','<links','/<<\\|([^|]+)\\|>>/e', "MakeTrailStop(\$pagename,'$1')"); Markup('<|','><<|','/<\\|([^|]+)\\|>/e', "MakeTrailStopB(\$pagename,'$1')"); Markup('^|','<links','/\\^\\|([^|]+)\\|\\^/e', "MakeTrailPath(\$pagename,'$1')"); Markup('<<(:','>(:','/<<(\(:[^|]+:\))>>/e', "MakeTrailStopC(\$pagename,'$1')"); SDVA($FPLFunctions,array('bygroup'=>'FPLByGroup','simple'=>'FPLSimple', 'group'=>'FPLGroup', 'markup'=>'FPLMarkup')); function FPLMarkup($pagename,&$pagelist,$opt) { global $FPLMarkupFmt; SDV($FPLMarkupFmt,"\n* [[\$FullName]]"); foreach($pagelist as $item) $out[] = FmtPageName($FPLMarkupFmt,$item['pagename']); return implode('',$out); } function ExpandPageList($trailname,$options) { $options = preg_replace('/fmt=\w+/i','',$options)." fmt=markup "; $opt = array('o'=>$options); return FmtPageList('$MatchList',$trailname,$opt); } function ReadTrail($pagename,$trailname) { global $SuffixPattern,$GroupPattern,$WikiWordPattern,$LinkWikiWords; if (substr($trailname,0,10) != '(:pagelist') { $trailname = MakePageName($pagename,$trailname); $trailpage = ReadPage($trailname); if (!$trailpage) return false; } else $trailpage['text'] = $trailname; $trailpage['text'] = preg_replace("/\\(:pagelist\\s*(.*):\\)/e","ExpandPageList('$trailname','\\1')",$trailpage['text']); $t = array(); $n = 0; foreach(explode("\n",@$trailpage['text']) as $x) { $x = preg_replace("/\\[\\[([^\\]]*)->([^\\]]*)\\]\\]/",'[[$2|$1]]',$x); if (!preg_match("/^([#*]+) \\s* (\\[\\[([^|]*?)(\\|.*?)?\\]\\]($SuffixPattern) | (($GroupPattern([\\/.]))?$WikiWordPattern))/x",$x,$match)) continue; if (@$match[6]) { if (!$LinkWikiWords) continue; $tgt = MakePageName($trailname,$match[6]); } else $tgt = MakePageName($trailname,$match[3]); $t[$n]['depth'] = $depth = strlen($match[1]); $t[$n]['pagename'] = $tgt; $t[$n]['markup'] = $match[2]; for($i=$depth;$i<10;$i++) $d[$i]=$n; if ($depth>1) $t[$n]['parent']=@$d[$depth-1]; $n++; } return $t; } function MakeTrailStop($pagename,$trailname) { $t = ReadTrail($pagename,$trailname); $prev=''; $next=''; for($i=0;$i<count($t);$i++) { if ($t[$i]['pagename']==$pagename) { if ($i>0) $prev = $t[$i-1]['markup']; if ($i+1<count($t)) $next = $t[$i+1]['markup']; } } return "<span class='wikitrail'><< $prev | $trailname | $next >></span>"; } function MakeTrailStopB($pagename,$trailname) { $t = ReadTrail($pagename,$trailname); $prev = ''; $next = ''; for($i=0;$i<count($t);$i++) { if ($t[$i]['pagename']==$pagename) { if ($i>0) $prev = '< '.$t[$i-1]['markup'].' | '; if ($i+1<count($t)) $next = ' | '.$t[$i+1]['markup'].' >'; } } return "<span class='wikitrail'>$prev$trailname$next</span>"; } function MakeTrailStopC($pagename,$trailname) { $t = ReadTrail($pagename,$trailname); $prev=''; $next=''; for($i=0;$i<count($t);$i++) { if ($t[$i]['pagename']==$pagename) { if ($i>0) $prev = "<span class='trailLeft'><< ".$t[$i-1]['markup']."</span>"; if ($i+1<count($t)) $next = "<span class='trailRight'>".$t[$i+1]['markup']." >></span>"; } } return "<span class='wikitrail'>$next$prev</span>"; } function MakeTrailPath($pagename,$trailname) { global $TrailPathSep; SDV($TrailPathSep,' | '); $t = ReadTrail($pagename,$trailname); $crumbs = ''; for($i=0;$i<count($t);$i++) { if ($t[$i]['pagename']==$pagename) { while (@$t[$i]['depth']>0) { $crumbs = $TrailPathSep.$t[$i]['markup'].$crumbs; $i = @$t[$i]['parent']; } return "<span class='wikitrail'>$trailname$crumbs</span>"; } } return $trailname; }