[ Index ] |
|
Code source de Serendipity 1.2 |
1 <?php 2 3 /** 4 * 5 * Baseline rule class for extension into a "real" parser component. 6 * 7 * Text_Wiki_Rule classes do not stand on their own; they are called by a 8 * Text_Wiki object, typcially in the transform()method. Each rule class 9 * performs three main activities: parse, process, and render. 10 * 11 * The parse() method takes a regex and applies it to the whole block of 12 * source text at one time. Each match is sent as $matches to the 13 * process() method. 14 * 15 * The process() method acts on the matched text from the source, and 16 * then processes the source text is some way. This may mean the 17 * creation of a delimited token using addToken(). In every case, the 18 * process() method returns the text that should replace the matched text 19 * from parse(). 20 * 21 * @author Paul M. Jones <pmjones@ciaweb.net> 22 * 23 * @package Text_Wiki 24 * 25 * $Id: Parse.php,v 1.2 2004/09/25 19:05:13 pmjones Exp $ 26 * 27 */ 28 29 class Text_Wiki_Parse { 30 31 32 /** 33 * 34 * Configuration options for this parser rule. 35 * 36 * @access public 37 * 38 * @var string 39 * 40 */ 41 42 var $conf = array(); 43 44 45 /** 46 * 47 * Regular expression to find matching text for this rule. 48 * 49 * @access public 50 * 51 * @var string 52 * 53 * @see parse() 54 * 55 */ 56 57 var $regex = null; 58 59 60 /** 61 * 62 * The name of this rule for new token array elements. 63 * 64 * @access public 65 * 66 * @var string 67 * 68 */ 69 70 var $rule = null; 71 72 73 /** 74 * 75 * A reference to the calling Text_Wiki object. 76 * 77 * This is needed so that each rule has access to the same source 78 * text, token set, URLs, interwiki maps, page names, etc. 79 * 80 * @access public 81 * 82 * @var object 83 */ 84 85 var $wiki = null; 86 87 88 /** 89 * 90 * Constructor for this parser rule. 91 * 92 * @access public 93 * 94 * @param object &$obj The calling "parent" Text_Wiki object. 95 * 96 */ 97 98 function Text_Wiki_Parse(&$obj) 99 { 100 // set the reference to the calling Text_Wiki object; 101 // this allows us access to the shared source text, token 102 // array, etc. 103 $this->wiki =& $obj; 104 105 // set the name of this rule; generally used when adding 106 // to the tokens array. strip off the Text_Wiki_Parse_ portion. 107 // text_wiki_parse_ 108 // 0123456789012345 109 $tmp = substr(get_class($this), 16); 110 $this->rule = ucwords(strtolower($tmp)); 111 112 // override config options for the rule if specified 113 if (isset($this->wiki->parseConf[$this->rule]) && 114 is_array($this->wiki->parseConf[$this->rule])) { 115 116 $this->conf = array_merge( 117 $this->conf, 118 $this->wiki->parseConf[$this->rule] 119 ); 120 121 } 122 } 123 124 125 /** 126 * 127 * Abstrct method to parse source text for matches. 128 * 129 * Applies the rule's regular expression to the source text, passes 130 * every match to the process() method, and replaces the matched text 131 * with the results of the processing. 132 * 133 * @access public 134 * 135 * @see Text_Wiki_Parse::process() 136 * 137 */ 138 139 function parse() 140 { 141 $this->wiki->source = preg_replace_callback( 142 $this->regex, 143 array(&$this, 'process'), 144 $this->wiki->source 145 ); 146 } 147 148 149 /** 150 * 151 * Abstract method to generate replacements for matched text. 152 * 153 * @access public 154 * 155 * @param array $matches An array of matches from the parse() method 156 * as generated by preg_replace_callback. $matches[0] is the full 157 * matched string, $matches[1] is the first matched pattern, 158 * $matches[2] is the second matched pattern, and so on. 159 * 160 * @return string The processed text replacement; defaults to the 161 * full matched string (i.e., no changes to the text). 162 * 163 * @see Text_Wiki_Parse::parse() 164 * 165 */ 166 167 function process(&$matches) 168 { 169 return $matches[0]; 170 } 171 172 173 /** 174 * 175 * Simple method to safely get configuration key values. 176 * 177 * @access public 178 * 179 * @param string $key The configuration key. 180 * 181 * @param mixed $default If the key does not exist, return this value 182 * instead. 183 * 184 * @return mixed The configuration key value (if it exists) or the 185 * default value (if not). 186 * 187 */ 188 189 function getConf($key, $default = null) 190 { 191 if (isset($this->conf[$key])) { 192 return $this->conf[$key]; 193 } else { 194 return $default; 195 } 196 } 197 198 199 /** 200 * 201 * Extract 'attribute="value"' portions of wiki markup. 202 * 203 * This kind of markup is typically used only in macros, but is useful 204 * anywhere. 205 * 206 * The syntax is pretty strict; there can be no spaces between the 207 * option name, the equals, and the first double-quote; the value 208 * must be surrounded by double-quotes. You can escape characters in 209 * the value with a backslash, and the backslash will be stripped for 210 * you. 211 * 212 * @access public 213 * 214 * @param string $text The "attributes" portion of markup. 215 * 216 * @return array An associative array of key-value pairs where the 217 * key is the option name and the value is the option value. 218 * 219 */ 220 221 function getAttrs($text) 222 { 223 // find the =" sections; 224 $tmp = explode('="', trim($text)); 225 226 // basic setup 227 $k = count($tmp) - 1; 228 $attrs = array(); 229 $key = null; 230 231 // loop through the sections 232 foreach ($tmp as $i => $val) { 233 234 // first element is always the first key 235 if ($i == 0) { 236 $key = trim($val); 237 continue; 238 } 239 240 // find the last double-quote in the value. 241 // the part to the left is the value for the last key, 242 // the part to the right is the next key name 243 $pos = strrpos($val, '"'); 244 $attrs[$key] = stripslashes(substr($val, 0, $pos)); 245 $key = trim(substr($val, $pos+1)); 246 247 } 248 249 return $attrs; 250 251 } 252 } 253 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sat Nov 24 09:00:37 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |