Initial Commit
This commit is contained in:
264
database/php/pear/Text/Wiki/Parse.php
Normal file
264
database/php/pear/Text/Wiki/Parse.php
Normal file
@@ -0,0 +1,264 @@
|
||||
<?php
|
||||
// vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
|
||||
/**
|
||||
* Baseline rule class for extension into a "real" parser component.
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* @category Text
|
||||
* @package Text_Wiki
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
||||
* @version CVS: $Id: Parse.php 191781 2005-07-29 08:57:29Z toggg $
|
||||
* @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 <pmjones@php.net>
|
||||
* @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;
|
||||
|
||||
}
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user