includes/wikiengine/Render/Xhtml/List.php
changeset 1 fe660c52c48f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/wikiengine/Render/Xhtml/List.php	Wed Jun 13 16:07:17 2007 -0400
@@ -0,0 +1,172 @@
+<?php
+// vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
+/**
+ * List rule end renderer for Xhtml
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   Text
+ * @package    Text_Wiki
+ * @author     Paul M. Jones <pmjones@php.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
+ * @version    CVS: $Id: List.php,v 1.9 2005/11/06 10:38:22 toggg Exp $
+ * @link       http://pear.php.net/package/Text_Wiki
+ */
+
+/**
+ * This class renders bullet and ordered lists in XHTML.
+ *
+ * @category   Text
+ * @package    Text_Wiki
+ * @author     Paul M. Jones <pmjones@php.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/package/Text_Wiki
+ */
+class Text_Wiki_Render_Xhtml_List extends Text_Wiki_Render {
+
+    var $conf = array(
+        'css_ol' => null,
+        'css_ol_li' => null,
+        'css_ul' => null,
+        'css_ul_li' => null
+    );
+
+    /**
+    *
+    * Renders a token into text matching the requested format.
+    *
+    * This rendering method is syntactically and semantically compliant
+    * with XHTML 1.1 in that sub-lists are part of the previous list item.
+    *
+    * @access public
+    *
+    * @param array $options The "options" portion of the token (second
+    * element).
+    *
+    * @return string The text rendered from the token options.
+    *
+    */
+
+    function token($options)
+    {
+        // make nice variables (type, level, count)
+        extract($options);
+
+        // set up indenting so that the results look nice; we do this
+        // in two steps to avoid str_pad mathematics.  ;-)
+        $pad = str_pad('', $level, "\t");
+        $pad = str_replace("\t", '    ', $pad);
+
+        switch ($type) {
+
+        case 'bullet_list_start':
+
+            // build the base HTML
+            $css = $this->formatConf(' class="%s"', 'css_ul');
+            $html = "<ul$css>";
+
+            /*
+            // if this is the opening block for the list,
+            // put an extra newline in front of it so the
+            // output looks nice.
+            if ($level == 0) {
+                $html = "\n$html";
+            }
+            */
+
+            // done!
+            return $html;
+            break;
+
+        case 'bullet_list_end':
+
+            // build the base HTML
+            $html = "</li>\n$pad</ul>";
+
+            // if this is the closing block for the list,
+            // put extra newlines after it so the output
+            // looks nice.
+            if ($level == 0) {
+                $html .= "\n\n";
+            }
+
+            // done!
+            return $html;
+            break;
+
+        case 'number_list_start':
+            if (isset($format)) {
+                $format = ' type="' . $format . '"';
+            } else  {
+                $format = '';
+            }
+            // build the base HTML
+            $css = $this->formatConf(' class="%s"', 'css_ol');
+            $html = "<ol{$format}{$css}>";
+
+            /*
+            // if this is the opening block for the list,
+            // put an extra newline in front of it so the
+            // output looks nice.
+            if ($level == 0) {
+                $html = "\n$html";
+            }
+            */
+
+            // done!
+            return $html;
+            break;
+
+        case 'number_list_end':
+
+            // build the base HTML
+            $html = "</li>\n$pad</ol>";
+
+            // if this is the closing block for the list,
+            // put extra newlines after it so the output
+            // looks nice.
+            if ($level == 0) {
+                $html .= "\n\n";
+            }
+
+            // done!
+            return $html;
+            break;
+
+        case 'bullet_item_start':
+        case 'number_item_start':
+
+            // pick the proper CSS class
+            if ($type == 'bullet_item_start') {
+                $css = $this->formatConf(' class="%s"', 'css_ul_li');
+            } else {
+                $css = $this->formatConf(' class="%s"', 'css_ol_li');
+            }
+
+            // build the base HTML
+            $html = "\n$pad<li$css>";
+
+            // for the very first item in the list, do nothing.
+            // but for additional items, be sure to close the
+            // previous item.
+            if ($count > 0) {
+                $html = "</li>$html";
+            }
+
+            // done!
+            return $html;
+            break;
+
+        case 'bullet_item_end':
+        case 'number_item_end':
+        default:
+            // ignore item endings and all other types.
+            // item endings are taken care of by the other types
+            // depending on their place in the list.
+            return '';
+            break;
+        }
+    }
+}
+?>