123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- <?php if (!defined('PmWiki')) exit();
- /* Copyright 2002-2004 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.
- */
- $TrailLinkPattern =
- "(?:($GroupNamePattern)([\\/.]))?(($WikiWordPattern)|($FreeLinkPattern))";
- $DoubleBrackets["/<<\\|($TrailLinkPattern)\\|>>/e"]
- = 'MakeTrailStop("$1");';
- $DoubleBrackets["/<\\|($TrailLinkPattern)\\|>/e"]
- = 'MakeTrailStopB("$1");';
- $DoubleBrackets["/\\^\\|($TrailLinkPattern)\\|\\^/e"]
- = 'MakeTrailPath("$1");';
- SDV($TrailPathSep,' | ');
- function MakeTrailStop($link) {
- global $pagename;
- $t = ReadTrail($link);
- $prev = ''; $next = '';
- for($i=0;$i<count($t);$i++) {
- if ($t[$i]['name']==$pagename) {
- if ($i>0) $prev = $t[$i-1]['link'];
- if ($i+1<count($t)) $next = $t[$i+1]['link'];
- }
- }
- return
- "<span class='wikitrail'><< $prev | $link | $next >></span>";
- }
- function MakeTrailStopB($link) {
- global $pagename;
- $t = ReadTrail($link);
- $prev = ''; $next = '';
- for($i=0;$i<count($t);$i++) {
- if ($t[$i]['name']==$pagename) {
- if ($i>0) $prev = '< '.$t[$i-1]['link'].' | ';
- if ($i+1<count($t)) $next = ' | '.$t[$i+1]['link'].' >';
- }
- }
- return "<span class='wikitrail'>$prev$link$next</span>";
- }
- function MakeTrailPath($link) {
- global $pagename,$TrailPathSep;
- $t = ReadTrail($link);
- for($i=0;$i<count($t);$i++) {
- if ($t[$i]['name']==$pagename) {
- while ($t[$i]['depth']>0) {
- $crumbs = $TrailPathSep.$t[$i]['link'].$crumbs;
- $i = $t[$i]['parent'];
- }
- return "<span class='wikitrail'>$link$crumbs</span>";
- }
- }
- return $link;
- }
- function ReadTrail($link) {
- global $pagename,$TrailLinkPattern;
- $trailname = FmtWikiLink('',$link,NULL,'PageName');
- $trailpage = ReadPage($trailname);
- if ($trailpage) {
- $trailgroup = FmtPageName('$Group',$trailname);
- $n = 0;
- foreach(explode("\n",$trailpage['text']) as $x) {
- if (preg_match("/([#*]+)\\s*(\\[\\[)?($TrailLinkPattern)/",$x,$match)) {
- $t[$n]['depth'] = $depth = strlen($match[1]);
- $link = $match[3];
- if (!preg_match('![./]!',$link)) $link="$trailgroup/$link";
- $t[$n]['link'] = $link;
- $t[$n]['name'] = FmtWikiLink('',$link,NULL,'PageName',$trailname);
- if ($match[2]>'' &&
- preg_match("/^[#*]+\\s*\\[\\[($TrailLinkPattern)((?:\\s.*?)?\\]\\])/",$x,$dbm))
- $t[$n]['link'] = "[[$link".array_pop($dbm);
- for($i=$depth;$i<10;$i++) $d[$i] = $n;
- if ($depth>1) $t[$n]['parent']=@$d[$depth-1];
- $n++;
- }
- }
- }
- return $t;
- }
- ?>
|