1 <?php |
|
2 |
|
3 /** |
|
4 * |
|
5 * Parses for interwiki links. |
|
6 * |
|
7 * @category Text |
|
8 * |
|
9 * @package Text_Wiki |
|
10 * |
|
11 * @author Paul M. Jones <pmjones@php.net> |
|
12 * |
|
13 * @license LGPL |
|
14 * |
|
15 * @version $Id: Interwiki.php,v 1.4 2005/02/23 17:38:29 pmjones Exp $ |
|
16 * |
|
17 */ |
|
18 |
|
19 /** |
|
20 * |
|
21 * Parses for interwiki links. |
|
22 * |
|
23 * This class implements a Text_Wiki_Parse to find source text marked as |
|
24 * an Interwiki link. See the regex for a detailed explanation of the |
|
25 * text matching procedure; e.g., "InterWikiName:PageName". |
|
26 * |
|
27 * @category Text |
|
28 * |
|
29 * @package Text_Wiki |
|
30 * |
|
31 * @author Paul M. Jones <pmjones@php.net> |
|
32 * |
|
33 */ |
|
34 |
|
35 class Text_Wiki_Parse_Interwiki extends Text_Wiki_Parse { |
|
36 |
|
37 // double-colons wont trip up now |
|
38 var $regex = '([A-Za-z0-9_]+):((?!:)[A-Za-z0-9_\/=&~#.:;-]+)'; |
|
39 |
|
40 |
|
41 /** |
|
42 * |
|
43 * Parser. We override the standard parser so we can |
|
44 * find both described interwiki links and standalone links. |
|
45 * |
|
46 * @access public |
|
47 * |
|
48 * @return void |
|
49 * |
|
50 */ |
|
51 |
|
52 function parse() |
|
53 { |
|
54 // described interwiki links |
|
55 $tmp_regex = '/\[' . $this->regex . ' (.+?)\]/'; |
|
56 $this->wiki->source = preg_replace_callback( |
|
57 $tmp_regex, |
|
58 array(&$this, 'processDescr'), |
|
59 $this->wiki->source |
|
60 ); |
|
61 |
|
62 // standalone interwiki links |
|
63 $tmp_regex = '/' . $this->regex . '/'; |
|
64 $this->wiki->source = preg_replace_callback( |
|
65 $tmp_regex, |
|
66 array(&$this, 'process'), |
|
67 $this->wiki->source |
|
68 ); |
|
69 |
|
70 } |
|
71 |
|
72 |
|
73 /** |
|
74 * |
|
75 * Generates a replacement for the matched standalone interwiki text. |
|
76 * Token options are: |
|
77 * |
|
78 * 'site' => The key name for the Text_Wiki interwiki array map, |
|
79 * usually the name of the interwiki site. |
|
80 * |
|
81 * 'page' => The page on the target interwiki to link to. |
|
82 * |
|
83 * 'text' => The text to display as the link. |
|
84 * |
|
85 * @access public |
|
86 * |
|
87 * @param array &$matches The array of matches from parse(). |
|
88 * |
|
89 * @return A delimited token to be used as a placeholder in |
|
90 * the source text, plus any text priot to the match. |
|
91 * |
|
92 */ |
|
93 |
|
94 function process(&$matches) |
|
95 { |
|
96 $options = array( |
|
97 'site' => $matches[1], |
|
98 'page' => $matches[2], |
|
99 'text' => $matches[0] |
|
100 ); |
|
101 |
|
102 return $this->wiki->addToken($this->rule, $options); |
|
103 } |
|
104 |
|
105 |
|
106 /** |
|
107 * |
|
108 * Generates a replacement for described interwiki links. Token |
|
109 * options are: |
|
110 * |
|
111 * 'site' => The key name for the Text_Wiki interwiki array map, |
|
112 * usually the name of the interwiki site. |
|
113 * |
|
114 * 'page' => The page on the target interwiki to link to. |
|
115 * |
|
116 * 'text' => The text to display as the link. |
|
117 * |
|
118 * @access public |
|
119 * |
|
120 * @param array &$matches The array of matches from parse(). |
|
121 * |
|
122 * @return A delimited token to be used as a placeholder in |
|
123 * the source text, plus any text priot to the match. |
|
124 * |
|
125 */ |
|
126 |
|
127 function processDescr(&$matches) |
|
128 { |
|
129 $options = array( |
|
130 'site' => $matches[1], |
|
131 'page' => $matches[2], |
|
132 'text' => $matches[3] |
|
133 ); |
|
134 |
|
135 return $this->wiki->addToken($this->rule, $options); |
|
136 } |
|
137 } |
|
138 ?> |
|