Blame


1 5127fd58 2021-12-17 jrmu <?php if (!defined('PmWiki')) exit();
2 fc91d0f1 2023-03-07 jrmu /* Copyright 2002-2022 Patrick R. Michaud (pmichaud@pobox.com)
3 5127fd58 2021-12-17 jrmu This file is part of PmWiki; you can redistribute it and/or modify
4 5127fd58 2021-12-17 jrmu it under the terms of the GNU General Public License as published
5 5127fd58 2021-12-17 jrmu by the Free Software Foundation; either version 2 of the License, or
6 5127fd58 2021-12-17 jrmu (at your option) any later version. See pmwiki.php for full details.
7 5127fd58 2021-12-17 jrmu
8 5127fd58 2021-12-17 jrmu This script enables markup of the form <<|TrailPage|>> to be
9 5127fd58 2021-12-17 jrmu used to build "trails" through wiki documents.
10 5127fd58 2021-12-17 jrmu
11 5127fd58 2021-12-17 jrmu This feature is automatically included from stdconfig.php unless
12 5127fd58 2021-12-17 jrmu disabled by $EnableWikiTrails = 0; . To explicitly include this feature,
13 5127fd58 2021-12-17 jrmu execute
14 5127fd58 2021-12-17 jrmu include_once("scripts/trails.php");
15 5127fd58 2021-12-17 jrmu from config.php somewhere.
16 5127fd58 2021-12-17 jrmu
17 5127fd58 2021-12-17 jrmu Once enabled, the <<|TrailPage|>> markup is replaced with
18 5127fd58 2021-12-17 jrmu << PrevPage | TrailPage | NextPage >> on output. TrailPage should
19 5127fd58 2021-12-17 jrmu contain either a bullet or number list defining the sequence of pages
20 5127fd58 2021-12-17 jrmu in the "trail".
21 5127fd58 2021-12-17 jrmu
22 5127fd58 2021-12-17 jrmu The ^|TrailPage|^ markup uses the depth of the bullets to display
23 5127fd58 2021-12-17 jrmu the ancestry of the TrailPage to the current one. The <|TrailPage|>
24 5127fd58 2021-12-17 jrmu markup is like <<|TrailPage|>> except that "< PrevPage |" and
25 5127fd58 2021-12-17 jrmu "| NextPage >" are omitted if at the beginning or end of the
26 5127fd58 2021-12-17 jrmu trail respectively. Thanks to John Rankin for contributing these
27 5127fd58 2021-12-17 jrmu markups and the original suggestion for WikiTrails.
28 5127fd58 2021-12-17 jrmu
29 5127fd58 2021-12-17 jrmu Script maintained by Petko YOTOV www.pmwiki.org/petko
30 5127fd58 2021-12-17 jrmu */
31 5127fd58 2021-12-17 jrmu
32 5127fd58 2021-12-17 jrmu Markup('<<|','<links','/&lt;&lt;\\|([^|]+|\\[\\[(.+?)\\]\\])\\|&gt;&gt;/',
33 5127fd58 2021-12-17 jrmu "MarkupMakeTrail");
34 5127fd58 2021-12-17 jrmu Markup('<|','><<|','/&lt;\\|([^|]+|\\[\\[(.+?)\\]\\])\\|&gt;/',
35 5127fd58 2021-12-17 jrmu "MarkupMakeTrail");
36 5127fd58 2021-12-17 jrmu Markup('^|','<links','/\\^\\|([^|]+|\\[\\[(.+?)\\]\\])\\|\\^/',
37 5127fd58 2021-12-17 jrmu "MarkupMakeTrail");
38 5127fd58 2021-12-17 jrmu
39 5127fd58 2021-12-17 jrmu function MarkupMakeTrail($m) {
40 5127fd58 2021-12-17 jrmu extract($GLOBALS["MarkupToHTML"]); # get $pagename, $markupid
41 5127fd58 2021-12-17 jrmu switch ($markupid) {
42 5127fd58 2021-12-17 jrmu case '<<|':
43 5127fd58 2021-12-17 jrmu return PRR(MakeTrailStop($pagename,$m[1]));
44 5127fd58 2021-12-17 jrmu case '<|':
45 5127fd58 2021-12-17 jrmu return PRR(MakeTrailStopB($pagename,$m[1]));
46 5127fd58 2021-12-17 jrmu case '^|':
47 5127fd58 2021-12-17 jrmu return PRR(MakeTrailPath($pagename,$m[1]));
48 5127fd58 2021-12-17 jrmu }
49 5127fd58 2021-12-17 jrmu }
50 5127fd58 2021-12-17 jrmu
51 5127fd58 2021-12-17 jrmu SDVA($SaveAttrPatterns, array(
52 5127fd58 2021-12-17 jrmu '/<<\\|([^|]+|\\[\\[(.+?)\\]\\])\\|>>/' => '$1',
53 5127fd58 2021-12-17 jrmu '/<\\|([^|]+|\\[\\[(.+?)\\]\\])\\|>/' => '$1',
54 5127fd58 2021-12-17 jrmu '/\\^\\|([^|]+|\\[\\[(.+?)\\]\\])\\|\\^/' => '$1'));
55 5127fd58 2021-12-17 jrmu
56 5127fd58 2021-12-17 jrmu $Conditions['ontrail'] = 'CondOnTrail($pagename, $condparm)';
57 5127fd58 2021-12-17 jrmu
58 5127fd58 2021-12-17 jrmu function CondOnTrail($pagename, $condparm) {
59 5127fd58 2021-12-17 jrmu @list($trailname, $pn) = preg_split('/\\s+/', $condparm, 2);
60 5127fd58 2021-12-17 jrmu $trail = ReadTrail($pagename, $trailname);
61 5127fd58 2021-12-17 jrmu if (!$trail) return false;
62 5127fd58 2021-12-17 jrmu $pn = ($pn > '') ? MakePageName($pagename, $pn) : $pagename;
63 5127fd58 2021-12-17 jrmu foreach($trail as $t)
64 5127fd58 2021-12-17 jrmu if ($t['pagename'] == $pn) return true;
65 5127fd58 2021-12-17 jrmu return false;
66 5127fd58 2021-12-17 jrmu }
67 5127fd58 2021-12-17 jrmu
68 5127fd58 2021-12-17 jrmu function ReadTrail($pagename, $trailname) {
69 5127fd58 2021-12-17 jrmu global $RASPageName, $SuffixPattern, $GroupPattern, $WikiWordPattern,
70 5127fd58 2021-12-17 jrmu $LinkWikiWords;
71 5127fd58 2021-12-17 jrmu if (preg_match('/^\\[\\[(.+?)(-&gt;|\\|)(.+?)\\]\\]$/', $trailname, $m))
72 5127fd58 2021-12-17 jrmu $trailname = ($m[2] == '|') ? $m[1] : $m[3];
73 5127fd58 2021-12-17 jrmu $trailtext = RetrieveAuthSection($pagename, $trailname);
74 5127fd58 2021-12-17 jrmu $trailname = $RASPageName;
75 5127fd58 2021-12-17 jrmu $trailtext = Qualify($trailname, $trailtext);
76 5127fd58 2021-12-17 jrmu $t = array();
77 5127fd58 2021-12-17 jrmu $n = 0;
78 5127fd58 2021-12-17 jrmu foreach(explode("\n", PHSC(@$trailtext, ENT_NOQUOTES))
79 5127fd58 2021-12-17 jrmu as $x) {
80 5127fd58 2021-12-17 jrmu $x = preg_replace("/\\[\\[([^\\]]*)-&gt;([^\\]]*)\\]\\]/",'[[$2|$1]]',$x);
81 5127fd58 2021-12-17 jrmu if (!preg_match("/^([#*:]+) \\s*
82 5127fd58 2021-12-17 jrmu (\\[\\[([^:#!|][^|:]*?)(?:\".*?\")?(\\|.*?)?\\]\\]($SuffixPattern)
83 5127fd58 2021-12-17 jrmu | (($GroupPattern([\\/.]))?$WikiWordPattern)) (.*)/x",$x,$match))
84 5127fd58 2021-12-17 jrmu continue;
85 5127fd58 2021-12-17 jrmu if (@$match[6]) {
86 5127fd58 2021-12-17 jrmu if (!$LinkWikiWords) continue;
87 5127fd58 2021-12-17 jrmu $tgt = MakePageName($trailname, $match[6]);
88 5127fd58 2021-12-17 jrmu } else $tgt = MakePageName($trailname, $match[3]);
89 5127fd58 2021-12-17 jrmu $t[$n]['depth'] = $depth = strlen($match[1]);
90 5127fd58 2021-12-17 jrmu $t[$n]['pagename'] = $tgt;
91 5127fd58 2021-12-17 jrmu $t[$n]['markup'] = $match[2];
92 5127fd58 2021-12-17 jrmu $t[$n]['detail'] = $match[9];
93 5127fd58 2021-12-17 jrmu for($i=$depth;$i<10;$i++) $d[$i]=$n;
94 5127fd58 2021-12-17 jrmu if ($depth>1) $t[$n]['parent']=@$d[$depth-1];
95 5127fd58 2021-12-17 jrmu $n++;
96 5127fd58 2021-12-17 jrmu }
97 5127fd58 2021-12-17 jrmu return $t;
98 5127fd58 2021-12-17 jrmu }
99 5127fd58 2021-12-17 jrmu
100 5127fd58 2021-12-17 jrmu function MakeTrailStop($pagename,$trailname) {
101 5127fd58 2021-12-17 jrmu $t = ReadTrail($pagename,$trailname);
102 5127fd58 2021-12-17 jrmu $prev=''; $next='';
103 5127fd58 2021-12-17 jrmu for($i=0;$i<count($t);$i++) {
104 5127fd58 2021-12-17 jrmu if ($t[$i]['pagename']==$pagename) {
105 5127fd58 2021-12-17 jrmu if ($i>0) $prev = $t[$i-1]['markup'];
106 5127fd58 2021-12-17 jrmu if ($i+1<count($t)) $next = $t[$i+1]['markup'];
107 5127fd58 2021-12-17 jrmu }
108 5127fd58 2021-12-17 jrmu }
109 5127fd58 2021-12-17 jrmu return "<span class='wikitrail'>&lt;&lt; $prev | $trailname | $next &gt;&gt;</span>";
110 5127fd58 2021-12-17 jrmu }
111 5127fd58 2021-12-17 jrmu
112 5127fd58 2021-12-17 jrmu function MakeTrailStopB($pagename,$trailname) {
113 5127fd58 2021-12-17 jrmu $t = ReadTrail($pagename,$trailname);
114 5127fd58 2021-12-17 jrmu $prev = ''; $next = '';
115 5127fd58 2021-12-17 jrmu for($i=0;$i<count($t);$i++) {
116 5127fd58 2021-12-17 jrmu if ($t[$i]['pagename']==$pagename) {
117 5127fd58 2021-12-17 jrmu if ($i>0) $prev = '&lt; '.$t[$i-1]['markup'].' | ';
118 5127fd58 2021-12-17 jrmu if ($i+1<count($t)) $next = ' | '.$t[$i+1]['markup'].' &gt;';
119 5127fd58 2021-12-17 jrmu }
120 5127fd58 2021-12-17 jrmu }
121 5127fd58 2021-12-17 jrmu return "<span class='wikitrail'>$prev$trailname$next</span>";
122 5127fd58 2021-12-17 jrmu }
123 5127fd58 2021-12-17 jrmu
124 5127fd58 2021-12-17 jrmu function MakeTrailPath($pagename,$trailname) {
125 5127fd58 2021-12-17 jrmu global $TrailPathSep;
126 5127fd58 2021-12-17 jrmu SDV($TrailPathSep,' | ');
127 5127fd58 2021-12-17 jrmu $t = ReadTrail($pagename,$trailname);
128 5127fd58 2021-12-17 jrmu $crumbs = '';
129 5127fd58 2021-12-17 jrmu for($i=0;$i<count($t);$i++) {
130 5127fd58 2021-12-17 jrmu if ($t[$i]['pagename']==$pagename) {
131 5127fd58 2021-12-17 jrmu while (@$t[$i]['depth']>0) {
132 5127fd58 2021-12-17 jrmu $crumbs = $TrailPathSep.$t[$i]['markup'].$crumbs;
133 5127fd58 2021-12-17 jrmu $i = @$t[$i]['parent'];
134 5127fd58 2021-12-17 jrmu }
135 5127fd58 2021-12-17 jrmu return "<span class='wikitrail'>$trailname$crumbs</span>";
136 5127fd58 2021-12-17 jrmu }
137 5127fd58 2021-12-17 jrmu }
138 5127fd58 2021-12-17 jrmu return "<span class='wikitrail'>$trailname</span>";
139 5127fd58 2021-12-17 jrmu }
140 5127fd58 2021-12-17 jrmu