summaryrefslogtreecommitdiff
path: root/includes/pear/Text/Wiki/Parse/BBCode/Blockquote.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/pear/Text/Wiki/Parse/BBCode/Blockquote.php')
-rwxr-xr-xincludes/pear/Text/Wiki/Parse/BBCode/Blockquote.php91
1 files changed, 91 insertions, 0 deletions
diff --git a/includes/pear/Text/Wiki/Parse/BBCode/Blockquote.php b/includes/pear/Text/Wiki/Parse/BBCode/Blockquote.php
new file mode 100755
index 0000000..3030e97
--- /dev/null
+++ b/includes/pear/Text/Wiki/Parse/BBCode/Blockquote.php
@@ -0,0 +1,91 @@
+<?php
+// vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
+/**
+ * BBCode: Parses for block-quoted text.
+ *
+ * This class implements a Text_Wiki_Rule to find source text block-quoted
+ * as defined by text surrounded by [quote="author"] ... [/quote] (author optional)
+ * On parsing, the text itself is left in place, but the starting and ending
+ * tags are replaced with tokens.
+ *
+ * PHP versions 4 and 5
+ *
+ * @category Text
+ * @package Text_Wiki
+ * @author Bertrand Gugger <bertrand@toggg.com>
+ * @copyright 2005 bertrand Gugger
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version CVS: $Id: Blockquote.php,v 1.4 2006/02/21 22:47:53 toggg Exp $
+ * @link http://pear.php.net/package/Text_Wiki
+ */
+
+/**
+ * Block-quoted text rule parser class (with nesting) for BBCode.
+ *
+ * @category Text
+ * @package Text_Wiki
+ * @author Bertrand Gugger <bertrand@toggg.com>
+ * @copyright 2005 bertrand Gugger
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Wiki
+ * @see Text_Wiki_Parse::Text_Wiki_Parse()
+ */
+class Text_Wiki_Parse_Blockquote 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.
+ * We match [quote=..] ... [/quote] with nesting
+ *
+ * @access public
+ * @var string
+ * @see Text_Wiki_Parse::parse()
+ */
+ var $regex = '#\[quote(?:=\s*"(.*?)")?\s*]((?:((?R))|.)*?)\[/quote]#msi';
+
+ /**
+ * The current quote nesting depth, starts by zero
+ *
+ * @access private
+ * @var int
+ */
+ var $_level = 0;
+
+ /**
+ * Generates a replacement for the matched text. Token options are:
+ * - 'type' => ['start'|'end'] The starting or ending point of the block-quoted text.
+ * The text itself is left in the source but may content bested blocks
+ * - 'level' => the level of nesting (starting 0)
+ * - 'name' => the author indicator (optional)
+ *
+ * @param array &$matches The array of matches from parse().
+ * @return string Delimited by start/end tokens to be used as
+ * placeholder in the source text surrounding the text to be quoted.
+ * @access public
+ */
+ function process(&$matches)
+ {
+ // nested block ?
+ if (array_key_exists(3, $matches)) {
+ $this->_level++;
+ $expsub = preg_replace_callback(
+ $this->regex,
+ array(&$this, "process"),
+ $matches[2]
+ );
+ $this->_level--;
+ } else {
+ $expsub = $matches[2];
+ }
+
+ // builds the option array
+ $options = array("type" => "start", "level"=>$this->_level);
+ if (isset($matches[1])) {
+ $options["name"] = $matches[1];
+ }
+ $statok = $this->wiki->addToken($this->rule, $options);
+ $options["type"] = "end";
+ return $statok . $expsub . $this->wiki->addToken($this->rule, $options);
+ }
+}