diff -r f0431eb8161e -r 98c052fc3337 includes/wikiengine/Parse.php --- a/includes/wikiengine/Parse.php Sun Jun 21 00:16:21 2009 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,264 +0,0 @@ - - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id: Parse.php,v 1.5 2005/07/29 08:57:29 toggg Exp $ - * @link http://pear.php.net/package/Text_Wiki - */ - -/** - * Baseline rule class for extension into a "real" parser component. - * - * Text_Wiki_Rule classes do not stand on their own; they are called by a - * Text_Wiki object, typcially in the transform() method. Each rule class - * performs three main activities: parse, process, and render. - * - * The parse() method takes a regex and applies it to the whole block of - * source text at one time. Each match is sent as $matches to the - * process() method. - * - * The process() method acts on the matched text from the source, and - * then processes the source text is some way. This may mean the - * creation of a delimited token using addToken(). In every case, the - * process() method returns the text that should replace the matched text - * from parse(). - * - * @category Text - * @package Text_Wiki - * @author Paul M. Jones - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version Release: @package_version@ - * @link http://pear.php.net/package/Text_Wiki - */ -class Text_Wiki_Parse { - - - /** - * - * Configuration options for this parser rule. - * - * @access public - * - * @var string - * - */ - - var $conf = array(); - - - /** - * - * Regular expression to find matching text for this rule. - * - * @access public - * - * @var string - * - * @see parse() - * - */ - - var $regex = null; - - - /** - * - * The name of this rule for new token array elements. - * - * @access public - * - * @var string - * - */ - - var $rule = null; - - - /** - * - * A reference to the calling Text_Wiki object. - * - * This is needed so that each rule has access to the same source - * text, token set, URLs, interwiki maps, page names, etc. - * - * @access public - * - * @var object - */ - - var $wiki = null; - - - /** - * - * Constructor for this parser rule. - * - * @access public - * - * @param object &$obj The calling "parent" Text_Wiki object. - * - */ - - function Text_Wiki_Parse(&$obj) - { - // set the reference to the calling Text_Wiki object; - // this allows us access to the shared source text, token - // array, etc. - $this->wiki =& $obj; - - // set the name of this rule; generally used when adding - // to the tokens array. strip off the Text_Wiki_Parse_ portion. - // text_wiki_parse_ - // 0123456789012345 - $tmp = substr(get_class($this), 16); - $this->rule = ucwords(strtolower($tmp)); - - // override config options for the rule if specified - if (isset($this->wiki->parseConf[$this->rule]) && - is_array($this->wiki->parseConf[$this->rule])) { - - $this->conf = array_merge( - $this->conf, - $this->wiki->parseConf[$this->rule] - ); - - } - } - - - /** - * - * Abstrct method to parse source text for matches. - * - * Applies the rule's regular expression to the source text, passes - * every match to the process() method, and replaces the matched text - * with the results of the processing. - * - * @access public - * - * @see Text_Wiki_Parse::process() - * - */ - - function parse() - { - $this->wiki->source = preg_replace_callback( - $this->regex, - array(&$this, 'process'), - $this->wiki->source - ); - } - - - /** - * - * Abstract method to generate replacements for matched text. - * - * @access public - * - * @param array $matches An array of matches from the parse() method - * as generated by preg_replace_callback. $matches[0] is the full - * matched string, $matches[1] is the first matched pattern, - * $matches[2] is the second matched pattern, and so on. - * - * @return string The processed text replacement; defaults to the - * full matched string (i.e., no changes to the text). - * - * @see Text_Wiki_Parse::parse() - * - */ - - function process(&$matches) - { - return $matches[0]; - } - - - /** - * - * Simple method to safely get configuration key values. - * - * @access public - * - * @param string $key The configuration key. - * - * @param mixed $default If the key does not exist, return this value - * instead. - * - * @return mixed The configuration key value (if it exists) or the - * default value (if not). - * - */ - - function getConf($key, $default = null) - { - if (isset($this->conf[$key])) { - return $this->conf[$key]; - } else { - return $default; - } - } - - - /** - * - * Extract 'attribute="value"' portions of wiki markup. - * - * This kind of markup is typically used only in macros, but is useful - * anywhere. - * - * The syntax is pretty strict; there can be no spaces between the - * option name, the equals, and the first double-quote; the value - * must be surrounded by double-quotes. You can escape characters in - * the value with a backslash, and the backslash will be stripped for - * you. - * - * @access public - * - * @param string $text The "attributes" portion of markup. - * - * @return array An associative array of key-value pairs where the - * key is the option name and the value is the option value. - * - */ - - function getAttrs($text) - { - // find the =" sections; - $tmp = explode('="', trim($text)); - - // basic setup - $k = count($tmp) - 1; - $attrs = array(); - $key = null; - - // loop through the sections - foreach ($tmp as $i => $val) { - - // first element is always the first key - if ($i == 0) { - $key = trim($val); - continue; - } - - // find the last double-quote in the value. - // the part to the left is the value for the last key, - // the part to the right is the next key name - $pos = strrpos($val, '"'); - $attrs[$key] = stripslashes(substr($val, 0, $pos)); - $key = trim(substr($val, $pos+1)); - - } - - return $attrs; - - } -} -?>