|
1 <?php |
|
2 |
|
3 /** |
|
4 * |
|
5 * Parses for image placement. |
|
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: Image.php,v 1.5 2005/09/12 11:34:44 toggg Exp $ |
|
16 * |
|
17 */ |
|
18 |
|
19 /** |
|
20 * |
|
21 * Parses for image placement. |
|
22 * |
|
23 * @category Text |
|
24 * |
|
25 * @package Text_Wiki |
|
26 * |
|
27 * @author Paul M. Jones <pmjones@php.net> |
|
28 * |
|
29 */ |
|
30 |
|
31 class Text_Wiki_Parse_Image extends Text_Wiki_Parse { |
|
32 |
|
33 /** |
|
34 * URL schemes recognized by this rule. |
|
35 * |
|
36 * @access public |
|
37 * @var array |
|
38 */ |
|
39 var $conf = array( |
|
40 'schemes' => 'http|https|ftp|gopher|news', |
|
41 'host_regexp' => '(?:[^.\s/"\'<\\\#delim#\ca-\cz]+\.)*[a-z](?:[-a-z0-9]*[a-z0-9])?\.?', |
|
42 'path_regexp' => '(?:/[^\s"<\\\#delim#\ca-\cz]*)?' |
|
43 ); |
|
44 |
|
45 /** |
|
46 * |
|
47 * The regular expression used to find source text matching this |
|
48 * rule. |
|
49 * |
|
50 * @access public |
|
51 * |
|
52 * @var string |
|
53 * |
|
54 */ |
|
55 |
|
56 var $regex = '/(\[\[image\s+)(.+?)(\]\])/i'; |
|
57 |
|
58 |
|
59 /** |
|
60 * The regular expressions used to check ecternal urls |
|
61 * |
|
62 * @access public |
|
63 * @var string |
|
64 * @see parse() |
|
65 */ |
|
66 var $url = ''; |
|
67 |
|
68 /** |
|
69 * Constructor. |
|
70 * We override the constructor to build up the url regex from config |
|
71 * |
|
72 * @param object &$obj the base conversion handler |
|
73 * @return The parser object |
|
74 * @access public |
|
75 */ |
|
76 function Text_Wiki_Parse_Image(&$obj) |
|
77 { |
|
78 $default = $this->conf; |
|
79 parent::Text_Wiki_Parse($obj); |
|
80 |
|
81 // convert the list of recognized schemes to a regex OR, |
|
82 $schemes = $this->getConf('schemes', $default['schemes']); |
|
83 $this->url = str_replace( '#delim#', $this->wiki->delim, |
|
84 '#(?:' . (is_array($schemes) ? implode('|', $schemes) : $schemes) . ')://' |
|
85 . $this->getConf('host_regexp', $default['host_regexp']) |
|
86 . $this->getConf('path_regexp', $default['path_regexp']) .'#'); |
|
87 } |
|
88 |
|
89 /** |
|
90 * |
|
91 * Generates a token entry for the matched text. Token options are: |
|
92 * |
|
93 * 'src' => The image source, typically a relative path name. |
|
94 * |
|
95 * 'opts' => Any macro options following the source. |
|
96 * |
|
97 * @access public |
|
98 * |
|
99 * @param array &$matches The array of matches from parse(). |
|
100 * |
|
101 * @return A delimited token number to be used as a placeholder in |
|
102 * the source text. |
|
103 * |
|
104 */ |
|
105 |
|
106 function process(&$matches) |
|
107 { |
|
108 $pos = strpos($matches[2], ' '); |
|
109 |
|
110 if ($pos === false) { |
|
111 $options = array( |
|
112 'src' => $matches[2], |
|
113 'attr' => array()); |
|
114 } else { |
|
115 // everything after the space is attribute arguments |
|
116 $options = array( |
|
117 'src' => substr($matches[2], 0, $pos), |
|
118 'attr' => $this->getAttrs(substr($matches[2], $pos+1)) |
|
119 ); |
|
120 // check the scheme case of external link |
|
121 if (array_key_exists('link', $options['attr'])) { |
|
122 // external url ? |
|
123 if (($pos = strpos($options['attr']['link'], '://')) !== false) { |
|
124 if (!preg_match($this->url, $options['attr']['link'])) { |
|
125 return $matches[0]; |
|
126 } |
|
127 } elseif (in_array('Wikilink', $this->wiki->disable)) { |
|
128 return $matches[0]; // Wikilink disabled |
|
129 } |
|
130 } |
|
131 } |
|
132 |
|
133 return $this->wiki->addToken($this->rule, $options); |
|
134 } |
|
135 } |
|
136 ?> |