--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/wikiengine/Parse/Mediawiki/Paragraph.php Wed Jun 13 16:07:17 2007 -0400
@@ -0,0 +1,146 @@
+<?php
+
+/**
+*
+* Parses for paragraph blocks.
+*
+* @category Text
+*
+* @package Text_Wiki
+*
+* @author Paul M. Jones <pmjones@php.net>
+*
+* @license LGPL
+*
+* @version $Id: Paragraph.php,v 1.3 2005/02/23 17:38:29 pmjones Exp $
+*
+*/
+
+/**
+*
+* Parses for paragraph blocks.
+*
+* This class implements a Text_Wiki rule to find sections of the source
+* text that are paragraphs. A para is any line not starting with a token
+* delimiter, followed by two newlines.
+*
+* @category Text
+*
+* @package Text_Wiki
+*
+* @author Paul M. Jones <pmjones@php.net>
+*
+*/
+
+class Text_Wiki_Parse_Paragraph extends Text_Wiki_Parse {
+
+ /**
+ *
+ * The regular expression used to find source text matching this
+ * rule.
+ *
+ * @access public
+ *
+ * @var string
+ *
+ */
+
+ var $regex = "/^.*?\n\n/m";
+
+ var $conf = array(
+ 'skip' => array(
+ 'blockquote', // are we sure about this one?
+ 'code',
+ 'heading',
+ 'horiz',
+ 'deflist',
+ 'table',
+ 'list',
+ 'toc'
+ )
+ );
+
+
+ /**
+ *
+ * Generates a token entry for the matched text. Token options are:
+ *
+ * 'start' => The starting point of the paragraph.
+ *
+ * 'end' => The ending point of the paragraph.
+ *
+ * @access public
+ *
+ * @param array &$matches The array of matches from parse().
+ *
+ * @return A delimited token number to be used as a placeholder in
+ * the source text.
+ *
+ */
+
+ function process(&$matches)
+ {
+ $delim = $this->wiki->delim;
+
+ // was anything there?
+ if (trim($matches[0]) == '') {
+ return '';
+ }
+
+ // does the match start with a delimiter?
+ if (substr($matches[0], 0, 1) != $delim) {
+ // no.
+
+ $start = $this->wiki->addToken(
+ $this->rule, array('type' => 'start')
+ );
+
+ $end = $this->wiki->addToken(
+ $this->rule, array('type' => 'end')
+ );
+
+ return $start . trim($matches[0]) . $end;
+ }
+
+ // the line starts with a delimiter. read in the delimited
+ // token number, check the token, and see if we should
+ // skip it.
+
+ // loop starting at the second character (we already know
+ // the first is a delimiter) until we find another
+ // delimiter; the text between them is a token key number.
+ $key = '';
+ $len = strlen($matches[0]);
+ for ($i = 1; $i < $len; $i++) {
+ $char = $matches[0]{$i};
+ if ($char == $delim) {
+ break;
+ } else {
+ $key .= $char;
+ }
+ }
+
+ // look at the token and see if it's skippable (if we skip,
+ // it will not be marked as a paragraph)
+ $token_type = strtolower($this->wiki->tokens[$key][0]);
+ $skip = $this->getConf('skip', array());
+
+ if (in_array($token_type, $skip)) {
+ // this type of token should not have paragraphs applied to it.
+ // return the entire matched text.
+ return $matches[0];
+ } else {
+
+ $start = $this->wiki->addToken(
+ $this->rule, array('type' => 'start')
+ );
+
+ $end = $this->wiki->addToken(
+ $this->rule, array('type' => 'end')
+ );
+
+ return $start . trim($matches[0]) . $end;
+ }
+ }
+}
+?>
\ No newline at end of file