]> git.immae.eu Git - github/wallabag/wallabag.git/blame - inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php
remove autoload section in composer.json
[github/wallabag/wallabag.git] / inc / 3rdparty / htmlpurifier / HTMLPurifier / AttrDef / CSS / BackgroundPosition.php
CommitLineData
d4949327
NL
1<?php\r
2\r
3/* W3C says:\r
4 [ // adjective and number must be in correct order, even if\r
5 // you could switch them without introducing ambiguity.\r
6 // some browsers support that syntax\r
7 [\r
8 <percentage> | <length> | left | center | right\r
9 ]\r
10 [\r
11 <percentage> | <length> | top | center | bottom\r
12 ]?\r
13 ] |\r
14 [ // this signifies that the vertical and horizontal adjectives\r
15 // can be arbitrarily ordered, however, there can only be two,\r
16 // one of each, or none at all\r
17 [\r
18 left | center | right\r
19 ] ||\r
20 [\r
21 top | center | bottom\r
22 ]\r
23 ]\r
24 top, left = 0%\r
25 center, (none) = 50%\r
26 bottom, right = 100%\r
27*/\r
28\r
29/* QuirksMode says:\r
30 keyword + length/percentage must be ordered correctly, as per W3C\r
31\r
32 Internet Explorer and Opera, however, support arbitrary ordering. We\r
33 should fix it up.\r
34\r
35 Minor issue though, not strictly necessary.\r
36*/\r
37\r
38// control freaks may appreciate the ability to convert these to\r
39// percentages or something, but it's not necessary\r
40\r
41/**\r
42 * Validates the value of background-position.\r
43 */\r
44class HTMLPurifier_AttrDef_CSS_BackgroundPosition extends HTMLPurifier_AttrDef\r
45{\r
46\r
47 /**\r
48 * @type HTMLPurifier_AttrDef_CSS_Length\r
49 */\r
50 protected $length;\r
51\r
52 /**\r
53 * @type HTMLPurifier_AttrDef_CSS_Percentage\r
54 */\r
55 protected $percentage;\r
56\r
57 public function __construct()\r
58 {\r
59 $this->length = new HTMLPurifier_AttrDef_CSS_Length();\r
60 $this->percentage = new HTMLPurifier_AttrDef_CSS_Percentage();\r
61 }\r
62\r
63 /**\r
64 * @param string $string\r
65 * @param HTMLPurifier_Config $config\r
66 * @param HTMLPurifier_Context $context\r
67 * @return bool|string\r
68 */\r
69 public function validate($string, $config, $context)\r
70 {\r
71 $string = $this->parseCDATA($string);\r
72 $bits = explode(' ', $string);\r
73\r
74 $keywords = array();\r
75 $keywords['h'] = false; // left, right\r
76 $keywords['v'] = false; // top, bottom\r
77 $keywords['ch'] = false; // center (first word)\r
78 $keywords['cv'] = false; // center (second word)\r
79 $measures = array();\r
80\r
81 $i = 0;\r
82\r
83 $lookup = array(\r
84 'top' => 'v',\r
85 'bottom' => 'v',\r
86 'left' => 'h',\r
87 'right' => 'h',\r
88 'center' => 'c'\r
89 );\r
90\r
91 foreach ($bits as $bit) {\r
92 if ($bit === '') {\r
93 continue;\r
94 }\r
95\r
96 // test for keyword\r
97 $lbit = ctype_lower($bit) ? $bit : strtolower($bit);\r
98 if (isset($lookup[$lbit])) {\r
99 $status = $lookup[$lbit];\r
100 if ($status == 'c') {\r
101 if ($i == 0) {\r
102 $status = 'ch';\r
103 } else {\r
104 $status = 'cv';\r
105 }\r
106 }\r
107 $keywords[$status] = $lbit;\r
108 $i++;\r
109 }\r
110\r
111 // test for length\r
112 $r = $this->length->validate($bit, $config, $context);\r
113 if ($r !== false) {\r
114 $measures[] = $r;\r
115 $i++;\r
116 }\r
117\r
118 // test for percentage\r
119 $r = $this->percentage->validate($bit, $config, $context);\r
120 if ($r !== false) {\r
121 $measures[] = $r;\r
122 $i++;\r
123 }\r
124 }\r
125\r
126 if (!$i) {\r
127 return false;\r
128 } // no valid values were caught\r
129\r
130 $ret = array();\r
131\r
132 // first keyword\r
133 if ($keywords['h']) {\r
134 $ret[] = $keywords['h'];\r
135 } elseif ($keywords['ch']) {\r
136 $ret[] = $keywords['ch'];\r
137 $keywords['cv'] = false; // prevent re-use: center = center center\r
138 } elseif (count($measures)) {\r
139 $ret[] = array_shift($measures);\r
140 }\r
141\r
142 if ($keywords['v']) {\r
143 $ret[] = $keywords['v'];\r
144 } elseif ($keywords['cv']) {\r
145 $ret[] = $keywords['cv'];\r
146 } elseif (count($measures)) {\r
147 $ret[] = array_shift($measures);\r
148 }\r
149\r
150 if (empty($ret)) {\r
151 return false;\r
152 }\r
153 return implode(' ', $ret);\r
154 }\r
155}\r
156\r
157// vim: et sw=4 sts=4\r