Commit | Line | Data |
---|---|---|
6855525e JL |
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 | ?> |