import of Diogenes 0.9.18
[diogenes.git] / include / Text / Wiki / Render / Xhtml / List.php
1 <?php
2
3
4 class Text_Wiki_Render_Xhtml_List extends Text_Wiki_Render {
5
6 var $conf = array(
7 'css_ol' => null,
8 'css_ol_li' => null,
9 'css_ul' => null,
10 'css_ul_li' => null
11 );
12
13 /**
14 *
15 * Renders a token into text matching the requested format.
16 *
17 * This rendering method is syntactically and semantically compliant
18 * with XHTML 1.1 in that sub-lists are part of the previous list item.
19 *
20 * @access public
21 *
22 * @param array $options The "options" portion of the token (second
23 * element).
24 *
25 * @return string The text rendered from the token options.
26 *
27 */
28
29 function token($options)
30 {
31 // make nice variables (type, level, count)
32 extract($options);
33
34 // set up indenting so that the results look nice; we do this
35 // in two steps to avoid str_pad mathematics. ;-)
36 $pad = str_pad('', $level, "\t");
37 $pad = str_replace("\t", ' ', $pad);
38
39 switch ($type) {
40
41 case 'bullet_list_start':
42
43 // build the base HTML
44 $css = $this->formatConf(' class="%s"', 'css_ul');
45 $html = "<ul$css>";
46
47 // if this is the opening block for the list,
48 // put an extra newline in front of it so the
49 // output looks nice.
50 if ($level == 0) {
51 $html = "\n$html";
52 }
53
54 // done!
55 return $html;
56 break;
57
58 case 'bullet_list_end':
59
60 // build the base HTML
61 $html = "</li>\n$pad</ul>";
62
63 // if this is the closing block for the list,
64 // put extra newlines after it so the output
65 // looks nice.
66 if ($level == 0) {
67 $html .= "\n\n";
68 }
69
70 // done!
71 return $html;
72 break;
73
74 case 'number_list_start':
75
76 // build the base HTML
77 $css = $this->formatConf(' class="%s"', 'css_ol');
78 $html = "<ol$css>";
79
80 // if this is the opening block for the list,
81 // put an extra newline in front of it so the
82 // output looks nice.
83 if ($level == 0) {
84 $html = "\n$html";
85 }
86
87 // done!
88 return $html;
89 break;
90
91 case 'number_list_end':
92
93 // build the base HTML
94 $html = "</li>\n$pad</ol>";
95
96 // if this is the closing block for the list,
97 // put extra newlines after it so the output
98 // looks nice.
99 if ($level == 0) {
100 $html .= "\n\n";
101 }
102
103 // done!
104 return $html;
105 break;
106
107 case 'bullet_item_start':
108 case 'number_item_start':
109
110 // pick the proper CSS class
111 if ($type == 'bullet_item_start') {
112 $css = $this->formatConf(' class="%s"', 'css_ul_li');
113 } else {
114 $css = $this->formatConf(' class="%s"', 'css_ol_li');
115 }
116
117 // build the base HTML
118 $html = "\n$pad<li$css>";
119
120 // for the very first item in the list, do nothing.
121 // but for additional items, be sure to close the
122 // previous item.
123 if ($count > 0) {
124 $html = "</li>$html";
125 }
126
127 // done!
128 return $html;
129 break;
130
131 case 'bullet_item_end':
132 case 'number_item_end':
133 default:
134 // ignore item endings and all other types.
135 // item endings are taken care of by the other types
136 // depending on their place in the list.
137 return '';
138 break;
139 }
140 }
141 }
142 ?>