> to be used to build "trails" through wiki documents. This feature is automatically included from stdconfig.php unless disabled by $EnableWikiTrails = 0; . To explicitly include this feature, execute include_once("scripts/trails.php"); from config.php somewhere. 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. */ Markup('<<|','<<|','/<\\|([^|]+|\\[\\[(.+?)\\]\\])\\|>/e', "MakeTrailStopB(\$pagename,'$1')"); Markup('^|','>/' => '$1', '/<\\|([^|]+|\\[\\[(.+?)\\]\\])\\|>/' => '$1', '/\\^\\|([^|]+|\\[\\[(.+?)\\]\\])\\|\\^/' => '$1')); $Conditions['ontrail'] = 'CondOnTrail($pagename, $condparm)'; function CondOnTrail($pagename, $condparm) { @list($trailname, $pn) = preg_split('/\\s+/', $condparm, 2); $trail = ReadTrail($pagename, $trailname); if (!$trail) return false; $pn = ($pn > '') ? MakePageName($pagename, $pn) : $pagename; foreach($trail as $t) if ($t['pagename'] == $pn) return true; return false; } function ReadTrail($pagename, $trailname) { global $RASPageName, $SuffixPattern, $GroupPattern, $WikiWordPattern, $LinkWikiWords; if (preg_match('/^\\[\\[(.+?)(->|\\|)(.+?)\\]\\]$/', $trailname, $m)) $trailname = ($m[2] == '|') ? $m[1] : $m[3]; $trailtext = RetrieveAuthSection($pagename, $trailname); $trailname = $RASPageName; $t = array(); $n = 0; foreach(explode("\n", htmlspecialchars(@$trailtext, ENT_NOQUOTES)) 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, preg_replace('/[#?].+/', '', $match[3])); $t[$n]['depth'] = $depth = strlen($match[1]); $t[$n]['pagename'] = $tgt; $t[$n]['markup'] = $match[2]; $t[$n]['detail'] = $match[9]; 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;$i0) $prev = $t[$i-1]['markup']; if ($i+1<< $prev | $trailname | $next >>"; } function MakeTrailStopB($pagename,$trailname) { $t = ReadTrail($pagename,$trailname); $prev = ''; $next = ''; for($i=0;$i0) $prev = '< '.$t[$i-1]['markup'].' | '; if ($i+1$prev$trailname$next"; } function MakeTrailPath($pagename,$trailname) { global $TrailPathSep; SDV($TrailPathSep,' | '); $t = ReadTrail($pagename,$trailname); $crumbs = ''; for($i=0;$i0) { $crumbs = $TrailPathSep.$t[$i]['markup'].$crumbs; $i = @$t[$i]['parent']; } return "$trailname$crumbs"; } } return $trailname; }