]> git.immae.eu Git - github/wallabag/wallabag.git/blame - inc/3rdparty/htmlpurifier/HTMLPurifier/Printer.php
remove autoload section in composer.json
[github/wallabag/wallabag.git] / inc / 3rdparty / htmlpurifier / HTMLPurifier / Printer.php
CommitLineData
d4949327
NL
1<?php\r
2\r
3// OUT OF DATE, NEEDS UPDATING!\r
4// USE XMLWRITER!\r
5\r
6class HTMLPurifier_Printer\r
7{\r
8\r
9 /**\r
10 * For HTML generation convenience funcs.\r
11 * @type HTMLPurifier_Generator\r
12 */\r
13 protected $generator;\r
14\r
15 /**\r
16 * For easy access.\r
17 * @type HTMLPurifier_Config\r
18 */\r
19 protected $config;\r
20\r
21 /**\r
22 * Initialize $generator.\r
23 */\r
24 public function __construct()\r
25 {\r
26 }\r
27\r
28 /**\r
29 * Give generator necessary configuration if possible\r
30 * @param HTMLPurifier_Config $config\r
31 */\r
32 public function prepareGenerator($config)\r
33 {\r
34 $all = $config->getAll();\r
35 $context = new HTMLPurifier_Context();\r
36 $this->generator = new HTMLPurifier_Generator($config, $context);\r
37 }\r
38\r
39 /**\r
40 * Main function that renders object or aspect of that object\r
41 * @note Parameters vary depending on printer\r
42 */\r
43 // function render() {}\r
44\r
45 /**\r
46 * Returns a start tag\r
47 * @param string $tag Tag name\r
48 * @param array $attr Attribute array\r
49 * @return string\r
50 */\r
51 protected function start($tag, $attr = array())\r
52 {\r
53 return $this->generator->generateFromToken(\r
54 new HTMLPurifier_Token_Start($tag, $attr ? $attr : array())\r
55 );\r
56 }\r
57\r
58 /**\r
59 * Returns an end tag\r
60 * @param string $tag Tag name\r
61 * @return string\r
62 */\r
63 protected function end($tag)\r
64 {\r
65 return $this->generator->generateFromToken(\r
66 new HTMLPurifier_Token_End($tag)\r
67 );\r
68 }\r
69\r
70 /**\r
71 * Prints a complete element with content inside\r
72 * @param string $tag Tag name\r
73 * @param string $contents Element contents\r
74 * @param array $attr Tag attributes\r
75 * @param bool $escape whether or not to escape contents\r
76 * @return string\r
77 */\r
78 protected function element($tag, $contents, $attr = array(), $escape = true)\r
79 {\r
80 return $this->start($tag, $attr) .\r
81 ($escape ? $this->escape($contents) : $contents) .\r
82 $this->end($tag);\r
83 }\r
84\r
85 /**\r
86 * @param string $tag\r
87 * @param array $attr\r
88 * @return string\r
89 */\r
90 protected function elementEmpty($tag, $attr = array())\r
91 {\r
92 return $this->generator->generateFromToken(\r
93 new HTMLPurifier_Token_Empty($tag, $attr)\r
94 );\r
95 }\r
96\r
97 /**\r
98 * @param string $text\r
99 * @return string\r
100 */\r
101 protected function text($text)\r
102 {\r
103 return $this->generator->generateFromToken(\r
104 new HTMLPurifier_Token_Text($text)\r
105 );\r
106 }\r
107\r
108 /**\r
109 * Prints a simple key/value row in a table.\r
110 * @param string $name Key\r
111 * @param mixed $value Value\r
112 * @return string\r
113 */\r
114 protected function row($name, $value)\r
115 {\r
116 if (is_bool($value)) {\r
117 $value = $value ? 'On' : 'Off';\r
118 }\r
119 return\r
120 $this->start('tr') . "\n" .\r
121 $this->element('th', $name) . "\n" .\r
122 $this->element('td', $value) . "\n" .\r
123 $this->end('tr');\r
124 }\r
125\r
126 /**\r
127 * Escapes a string for HTML output.\r
128 * @param string $string String to escape\r
129 * @return string\r
130 */\r
131 protected function escape($string)\r
132 {\r
133 $string = HTMLPurifier_Encoder::cleanUTF8($string);\r
134 $string = htmlspecialchars($string, ENT_COMPAT, 'UTF-8');\r
135 return $string;\r
136 }\r
137\r
138 /**\r
139 * Takes a list of strings and turns them into a single list\r
140 * @param string[] $array List of strings\r
141 * @param bool $polite Bool whether or not to add an end before the last\r
142 * @return string\r
143 */\r
144 protected function listify($array, $polite = false)\r
145 {\r
146 if (empty($array)) {\r
147 return 'None';\r
148 }\r
149 $ret = '';\r
150 $i = count($array);\r
151 foreach ($array as $value) {\r
152 $i--;\r
153 $ret .= $value;\r
154 if ($i > 0 && !($polite && $i == 1)) {\r
155 $ret .= ', ';\r
156 }\r
157 if ($polite && $i == 1) {\r
158 $ret .= 'and ';\r
159 }\r
160 }\r
161 return $ret;\r
162 }\r
163\r
164 /**\r
165 * Retrieves the class of an object without prefixes, as well as metadata\r
166 * @param object $obj Object to determine class of\r
167 * @param string $sec_prefix Further prefix to remove\r
168 * @return string\r
169 */\r
170 protected function getClass($obj, $sec_prefix = '')\r
171 {\r
172 static $five = null;\r
173 if ($five === null) {\r
174 $five = version_compare(PHP_VERSION, '5', '>=');\r
175 }\r
176 $prefix = 'HTMLPurifier_' . $sec_prefix;\r
177 if (!$five) {\r
178 $prefix = strtolower($prefix);\r
179 }\r
180 $class = str_replace($prefix, '', get_class($obj));\r
181 $lclass = strtolower($class);\r
182 $class .= '(';\r
183 switch ($lclass) {\r
184 case 'enum':\r
185 $values = array();\r
186 foreach ($obj->valid_values as $value => $bool) {\r
187 $values[] = $value;\r
188 }\r
189 $class .= implode(', ', $values);\r
190 break;\r
191 case 'css_composite':\r
192 $values = array();\r
193 foreach ($obj->defs as $def) {\r
194 $values[] = $this->getClass($def, $sec_prefix);\r
195 }\r
196 $class .= implode(', ', $values);\r
197 break;\r
198 case 'css_multiple':\r
199 $class .= $this->getClass($obj->single, $sec_prefix) . ', ';\r
200 $class .= $obj->max;\r
201 break;\r
202 case 'css_denyelementdecorator':\r
203 $class .= $this->getClass($obj->def, $sec_prefix) . ', ';\r
204 $class .= $obj->element;\r
205 break;\r
206 case 'css_importantdecorator':\r
207 $class .= $this->getClass($obj->def, $sec_prefix);\r
208 if ($obj->allow) {\r
209 $class .= ', !important';\r
210 }\r
211 break;\r
212 }\r
213 $class .= ')';\r
214 return $class;\r
215 }\r
216}\r
217\r
218// vim: et sw=4 sts=4\r