| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | <?php if (!defined('PmWiki')) exit();/*  Copyright 2002-2006 Patrick R. Michaud (pmichaud@pobox.com)    This file is 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.    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('<<|','<links','/<<\\|([^|]+|\\[\\[(.+?)\\]\\])\\|>>/e',  "MakeTrailStop(\$pagename,'$1')");Markup('<|','><<|','/<\\|([^|]+|\\[\\[(.+?)\\]\\])\\|>/e',  "MakeTrailStopB(\$pagename,'$1')");Markup('^|','<links','/\\^\\|([^|]+|\\[\\[(.+?)\\]\\])\\|\\^/e',  "MakeTrailPath(\$pagename,'$1')");SDVA($SaveAttrPatterns, array(   '/<<\\|([^|]+|\\[\\[(.+?)\\]\\])\\|>>/' => '$1',   '/<\\|([^|]+|\\[\\[(.+?)\\]\\])\\|>/' => '$1',   '/\\^\\|([^|]+|\\[\\[(.+?)\\]\\])\\|\\^/' => '$1'));function ReadTrail($pagename,$trailname) {  global $SuffixPattern,$GroupPattern,$WikiWordPattern,$LinkWikiWords;  if (preg_match('/^\\[\\[(.+?)(->|\\|)(.+?)\\]\\]$/', $trailname, $m))     $trailname = ($m[2] == '|') ? $m[1] : $m[3];  $trailname = MakePageName($pagename,$trailname);  $trailpage = ReadPage($trailname, READPAGE_CURRENT);  if (!$trailpage) return false;  $t = array();  $n = 0;  foreach(explode("\n", htmlspecialchars(@$trailpage['text'], 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;$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 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;}
 |