--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/wikiengine/Parse/Default/Revise.php Wed Jun 13 16:07:17 2007 -0400
@@ -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,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 <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