diff options
Diffstat (limited to 'includes/pear/Text/Wiki/Parse/Default/Revise.php')
| -rw-r--r-- | includes/pear/Text/Wiki/Parse/Default/Revise.php | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/includes/pear/Text/Wiki/Parse/Default/Revise.php b/includes/pear/Text/Wiki/Parse/Default/Revise.php new file mode 100644 index 0000000..28bf9fd --- /dev/null +++ b/includes/pear/Text/Wiki/Parse/Default/Revise.php @@ -0,0 +1,145 @@ +<?php + +/** +* +* Parses for text marked as revised (insert/delete). +* +* @category Text +* +* @package Text_Wiki +* +* @author Paul M. Jones <pmjones@php.net> +* +* @license LGPL +* +* @version $Id: Revise.php 180591 2005-02-23 17:38:29Z pmjones $ +* +*/ + +/** +* +* Parses for text marked as revised (insert/delete). +* +* @category Text +* +* @package Text_Wiki +* +* @author Paul M. Jones <pmjones@php.net> +* +*/ + +class Text_Wiki_Parse_Revise extends Text_Wiki_Parse { + + + /** + * + * The regular expression used to parse the source text and find + * matches conforming to this rule. Used by the parse() method. + * + * @access public + * + * @var string + * + * @see parse() + * + */ + + var $regex = "/\@\@({*?.*}*?)\@\@/U"; + + + /** + * + * Config options. + * + * @access public + * + * @var array + * + */ + + var $conf = array( + 'delmark' => '---', + 'insmark' => '+++' + ); + + + /** + * + * Generates a replacement for the matched text. Token options are: + * + * 'type' => ['start'|'end'] The starting or ending point of the + * inserted text. The text itself is left in the source. + * + * @access public + * + * @param array &$matches The array of matches from parse(). + * + * @return string A pair of delimited tokens to be used as a + * placeholder in the source text surrounding the teletype text. + * + */ + + function process(&$matches) + { + $output = ''; + $src = $matches[1]; + $delmark = $this->getConf('delmark'); // --- + $insmark = $this->getConf('insmark'); // +++ + + // '---' must be before '+++' (if they both appear) + $del = strpos($src, $delmark); + $ins = strpos($src, $insmark); + + // if neither is found, return right away + if ($del === false && $ins === false) { + return $matches[0]; + } + + // handle text to be deleted + if ($del !== false) { + + // move forward to the end of the deletion mark + $del += strlen($delmark); + + if ($ins === false) { + // there is no insertion text following + $text = substr($src, $del); + } else { + // there is insertion text following, + // mitigate the length + $text = substr($src, $del, $ins - $del); + } + + $output .= $this->wiki->addToken( + $this->rule, array('type' => 'del_start') + ); + + $output .= $text; + + $output .= $this->wiki->addToken( + $this->rule, array('type' => 'del_end') + ); + } + + // handle text to be inserted + if ($ins !== false) { + + // move forward to the end of the insert mark + $ins += strlen($insmark); + $text = substr($src, $ins); + + $output .= $this->wiki->addToken( + $this->rule, array('type' => 'ins_start') + ); + + $output .= $text; + + $output .= $this->wiki->addToken( + $this->rule, array('type' => 'ins_end') + ); + } + + return $output; + } +} +?>
\ No newline at end of file |
