summaryrefslogtreecommitdiff
path: root/includes/pear/Text/Wiki/Parse/Default/Toc.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/pear/Text/Wiki/Parse/Default/Toc.php')
-rw-r--r--includes/pear/Text/Wiki/Parse/Default/Toc.php130
1 files changed, 130 insertions, 0 deletions
diff --git a/includes/pear/Text/Wiki/Parse/Default/Toc.php b/includes/pear/Text/Wiki/Parse/Default/Toc.php
new file mode 100644
index 0000000..dd29a57
--- /dev/null
+++ b/includes/pear/Text/Wiki/Parse/Default/Toc.php
@@ -0,0 +1,130 @@
+<?php
+
+/**
+*
+* Looks through parsed text and builds a table of contents.
+*
+* @category Text
+*
+* @package Text_Wiki
+*
+* @author Paul M. Jones <pmjones@php.net>
+*
+* @license LGPL
+*
+* @version $Id: Toc.php 187179 2005-05-28 21:33:02Z pmjones $
+*
+*/
+
+/**
+*
+* Looks through parsed text and builds a table of contents.
+*
+* This class implements a Text_Wiki_Parse to find all heading tokens and
+* build a table of contents. The [[toc]] tag gets replaced with a list
+* of all the level-2 through level-6 headings.
+*
+* @category Text
+*
+* @package Text_Wiki
+*
+* @author Paul M. Jones <pmjones@php.net>
+*
+*/
+
+
+class Text_Wiki_Parse_Toc 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 = "/\n\[\[toc( .*)?\]\]\n/m";
+
+
+ /**
+ *
+ * Generates a replacement for the matched text.
+ *
+ * Token options are:
+ *
+ * 'type' => ['list_start'|'list_end'|'item_start'|'item_end'|'target']
+ *
+ * 'level' => The heading level (1-6).
+ *
+ * 'count' => Which entry number this is in the list.
+ *
+ * @access public
+ *
+ * @param array &$matches The array of matches from parse().
+ *
+ * @return string A token indicating the TOC collection point.
+ *
+ */
+
+ function process(&$matches)
+ {
+ $count = 0;
+
+ if (isset($matches[1])) {
+ $attr = $this->getAttrs(trim($matches[1]));
+ } else {
+ $attr = array();
+ }
+
+ $output = $this->wiki->addToken(
+ $this->rule,
+ array(
+ 'type' => 'list_start',
+ 'level' => 0,
+ 'attr' => $attr
+ )
+ );
+
+ foreach ($this->wiki->getTokens('Heading') as $key => $val) {
+
+ if ($val[1]['type'] != 'start') {
+ continue;
+ }
+
+ $options = array(
+ 'type' => 'item_start',
+ 'id' => $val[1]['id'],
+ 'level' => $val[1]['level'],
+ 'count' => $count ++
+ );
+
+ $output .= $this->wiki->addToken($this->rule, $options);
+
+ $output .= $val[1]['text'];
+
+ $output .= $this->wiki->addToken(
+ $this->rule,
+ array(
+ 'type' => 'item_end',
+ 'level' => $val[1]['level']
+ )
+ );
+ }
+
+ $output .= $this->wiki->addToken(
+ $this->rule, array(
+ 'type' => 'list_end',
+ 'level' => 0
+ )
+ );
+
+ return "\n$output\n";
+ }
+}
+?> \ No newline at end of file