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