diff -r 902822492a68 -r fe660c52c48f includes/wikiengine/Parse/Mediawiki/Revise.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/includes/wikiengine/Parse/Mediawiki/Revise.php Wed Jun 13 16:07:17 2007 -0400 @@ -0,0 +1,145 @@ + +* +* @license LGPL +* +* @version $Id: Revise.php,v 1.3 2005/02/23 17:38:29 pmjones Exp $ +* +*/ + +/** +* +* Parses for text marked as revised (insert/delete). +* +* @category Text +* +* @package Text_Wiki +* +* @author Paul M. Jones +* +*/ + +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