diff options
Diffstat (limited to 'inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/HTML/Nmtokens.php')
-rw-r--r-- | inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/HTML/Nmtokens.php | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/HTML/Nmtokens.php b/inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/HTML/Nmtokens.php new file mode 100644 index 00000000..ecb070c3 --- /dev/null +++ b/inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/HTML/Nmtokens.php | |||
@@ -0,0 +1,70 @@ | |||
1 | <?php | ||
2 | |||
3 | /** | ||
4 | * Validates contents based on NMTOKENS attribute type. | ||
5 | */ | ||
6 | class HTMLPurifier_AttrDef_HTML_Nmtokens extends HTMLPurifier_AttrDef | ||
7 | { | ||
8 | |||
9 | /** | ||
10 | * @param string $string | ||
11 | * @param HTMLPurifier_Config $config | ||
12 | * @param HTMLPurifier_Context $context | ||
13 | * @return bool|string | ||
14 | */ | ||
15 | public function validate($string, $config, $context) | ||
16 | { | ||
17 | $string = trim($string); | ||
18 | |||
19 | // early abort: '' and '0' (strings that convert to false) are invalid | ||
20 | if (!$string) { | ||
21 | return false; | ||
22 | } | ||
23 | |||
24 | $tokens = $this->split($string, $config, $context); | ||
25 | $tokens = $this->filter($tokens, $config, $context); | ||
26 | if (empty($tokens)) { | ||
27 | return false; | ||
28 | } | ||
29 | return implode(' ', $tokens); | ||
30 | } | ||
31 | |||
32 | /** | ||
33 | * Splits a space separated list of tokens into its constituent parts. | ||
34 | * @param string $string | ||
35 | * @param HTMLPurifier_Config $config | ||
36 | * @param HTMLPurifier_Context $context | ||
37 | * @return array | ||
38 | */ | ||
39 | protected function split($string, $config, $context) | ||
40 | { | ||
41 | // OPTIMIZABLE! | ||
42 | // do the preg_match, capture all subpatterns for reformulation | ||
43 | |||
44 | // we don't support U+00A1 and up codepoints or | ||
45 | // escaping because I don't know how to do that with regexps | ||
46 | // and plus it would complicate optimization efforts (you never | ||
47 | // see that anyway). | ||
48 | $pattern = '/(?:(?<=\s)|\A)' . // look behind for space or string start | ||
49 | '((?:--|-?[A-Za-z_])[A-Za-z_\-0-9]*)' . | ||
50 | '(?:(?=\s)|\z)/'; // look ahead for space or string end | ||
51 | preg_match_all($pattern, $string, $matches); | ||
52 | return $matches[1]; | ||
53 | } | ||
54 | |||
55 | /** | ||
56 | * Template method for removing certain tokens based on arbitrary criteria. | ||
57 | * @note If we wanted to be really functional, we'd do an array_filter | ||
58 | * with a callback. But... we're not. | ||
59 | * @param array $tokens | ||
60 | * @param HTMLPurifier_Config $config | ||
61 | * @param HTMLPurifier_Context $context | ||
62 | * @return array | ||
63 | */ | ||
64 | protected function filter($tokens, $config, $context) | ||
65 | { | ||
66 | return $tokens; | ||
67 | } | ||
68 | } | ||
69 | |||
70 | // vim: et sw=4 sts=4 | ||