Added the Search API Synonym module to deal specifically with licence and license...
[yaffs-website] / vendor / ezyang / htmlpurifier / library / HTMLPurifier / AttrDef / HTML / Nmtokens.php
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