crass 1.0.4 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +8 -5
  3. data/HISTORY.md +15 -0
  4. data/LICENSE +1 -1
  5. data/README.md +0 -22
  6. data/crass.gemspec +8 -2
  7. data/lib/crass/tokenizer.rb +32 -13
  8. data/lib/crass/version.rb +1 -1
  9. metadata +9 -66
  10. data/test/css-parsing-tests/An+B.json +0 -156
  11. data/test/css-parsing-tests/LICENSE +0 -8
  12. data/test/css-parsing-tests/README.rst +0 -301
  13. data/test/css-parsing-tests/color3.json +0 -142
  14. data/test/css-parsing-tests/color3_hsl.json +0 -3890
  15. data/test/css-parsing-tests/color3_keywords.json +0 -803
  16. data/test/css-parsing-tests/component_value_list.json +0 -432
  17. data/test/css-parsing-tests/declaration_list.json +0 -44
  18. data/test/css-parsing-tests/make_color3_hsl.py +0 -17
  19. data/test/css-parsing-tests/make_color3_keywords.py +0 -191
  20. data/test/css-parsing-tests/one_component_value.json +0 -27
  21. data/test/css-parsing-tests/one_declaration.json +0 -46
  22. data/test/css-parsing-tests/one_rule.json +0 -36
  23. data/test/css-parsing-tests/rule_list.json +0 -48
  24. data/test/css-parsing-tests/stylesheet.json +0 -44
  25. data/test/css-parsing-tests/stylesheet_bytes.json +0 -146
  26. data/test/shared/parse_rules.rb +0 -463
  27. data/test/support/common.rb +0 -170
  28. data/test/support/serialization/animate.css +0 -3158
  29. data/test/support/serialization/bootstrap-theme.css +0 -384
  30. data/test/support/serialization/bootstrap.css +0 -6805
  31. data/test/support/serialization/html5-boilerplate.css +0 -268
  32. data/test/support/serialization/misc.css +0 -9
  33. data/test/support/serialization/pure.css +0 -1662
  34. data/test/test_crass.rb +0 -31
  35. data/test/test_css_parsing_tests.rb +0 -150
  36. data/test/test_parse_properties.rb +0 -310
  37. data/test/test_parse_rules.rb +0 -17
  38. data/test/test_parse_stylesheet.rb +0 -17
  39. data/test/test_serialization.rb +0 -71
@@ -1,8 +0,0 @@
1
- Written in 2013 by Simon Sapin.
2
-
3
- To the extent possible under law, the author(s) have dedicated all copyright
4
- and related and neighboring rights to this work to the public domain worldwide.
5
- This work is distributed without any warranty.
6
-
7
- See the CC0 Public Domain Dedication:
8
- http://creativecommons.org/publicdomain/zero/1.0/
@@ -1,301 +0,0 @@
1
- CSS parsing tests
2
- #################
3
-
4
- This repository contains implementation-independent test for CSS parsers,
5
- based on the 2013 draft of the `CSS Syntax Level 3`_ specification.
6
-
7
- .. _CSS Syntax Level 3: http://dev.w3.org/csswg/css-syntax-3/
8
-
9
- The upstream repository for these tests is at
10
- https://github.com/SimonSapin/css-parsing-tests
11
-
12
-
13
- Projects using this
14
- ===================
15
-
16
- CSS parsers using these tests:
17
-
18
- * `tinycss2 <https://github.com/SimonSapin/tinycss2>`_ (Python)
19
- * `rust-cssparser <https://github.com/mozilla-servo/rust-cssparser>`_
20
- (Rust, used in `Servo <https://github.com/mozilla/servo/>`_)
21
- * `Crass <https://github.com/rgrove/crass/>`_ (Ruby)
22
-
23
-
24
- Importing
25
- =========
26
-
27
- The recommended way to use these tests in an implementation
28
- is to import them with git-subtree_.
29
-
30
- .. _git-subtree: https://github.com/git/git/tree/master/contrib/subtree
31
-
32
- To import the first time to a ``./css-parsing-tests`` sub-directory,
33
- run this from the top-level of a git repository::
34
-
35
- git subtree add -P css-parsing-tests https://github.com/SimonSapin/css-parsing-tests.git master
36
-
37
- Later, to merge changes made in the upstream repository, run::
38
-
39
- git subtree pull -P css-parsing-tests https://github.com/SimonSapin/css-parsing-tests.git master
40
-
41
-
42
- Test files
43
- ==========
44
-
45
- CSS Syntax specification describes a number of "functions".
46
- Each ``.json`` file in this repository corresponds to such a function.
47
- The files are encoded as UTF-8
48
- and each contain a JSON array with an even number of items,
49
- where each pair of items is one function input
50
- associated with the expected result.
51
-
52
- ``component_value_list.json``
53
- Tests `Parse a list of component values
54
- <http://dev.w3.org/csswg/css-syntax-3/#parse-a-list-of-component-values>`_.
55
- The Unicode input is represented by a JSON string,
56
- the output as an array of `component values`_ as described below.
57
-
58
- ``component_value_list.json``
59
- Tests `Parse a component value
60
- <http://dev.w3.org/csswg/css-syntax-3/#parse-a-component-value>`_.
61
- The Unicode input is represented by a JSON string,
62
- the output as a `component value`_.
63
-
64
- ``declaration_list.json``
65
- Tests `Parse a list of declarations
66
- <http://dev.w3.org/csswg/css-syntax-3/#parse-a-list-of-declarations>`_.
67
- The Unicode input is represented by a JSON string,
68
- the output as an array of declarations_ and at-rules_.
69
-
70
- ``one_declaration.json``
71
- Tests `Parse a declaration
72
- <http://dev.w3.org/csswg/css-syntax-3/#parse-a-declaration>`_.
73
- The Unicode input is represented by a JSON string,
74
- the output as a declaration_.
75
-
76
- ``one_rule.json``
77
- Tests `Parse a rule
78
- <http://dev.w3.org/csswg/css-syntax-3/#parse-a-rule>`_.
79
- The Unicode input is represented by a JSON string,
80
- the output as a `qualified rule`_ or at-rule_.
81
-
82
- ``rule_list.json``
83
- Tests `Parse a list of rules
84
- <http://dev.w3.org/csswg/css-syntax-3/#parse-a-list-of-rules>`_.
85
- The Unicode input is represented by a JSON string,
86
- the output as a list of `qualified rules`_ or at-rules_.
87
-
88
- ``stylesheet.json``
89
- Tests `Parse a stylesheet
90
- <http://dev.w3.org/csswg/css-syntax-3/#parse-a-stylesheet>`_.
91
- The Unicode input is represented by a JSON string,
92
- the output as a list of `qualified rules`_ or at-rules_.
93
-
94
- ``stylesheet_bytes.json``
95
- Tests `Parse a stylesheet
96
- <http://dev.w3.org/csswg/css-syntax-3/#parse-a-stylesheet>`_
97
- together with `The input byte stream
98
- <http://dev.w3.org/csswg/css-syntax/#input-byte-stream>`_.
99
- The input is represented as a JSON object containing:
100
-
101
- * A required ``css_bytes``, the input byte string,
102
- represented as a JSON string where code points U+0000 to U+00FF
103
- represent bytes of the same value.
104
- * An optional ``protocol_encoding``,
105
- a protocol encoding label as a JSON string, or null.
106
- * An optional ``environment_encoding``,
107
- an environment encoding label as a JSON string, or null.
108
- * An optional ``comment`` that is ignored.
109
-
110
- The output is represented a list of `qualified rules`_ or at-rules_.
111
-
112
- ``color3.json``
113
- Tests the ``<color>`` syntax `defined in CSS Color Level 3
114
- <http://www.w3.org/TR/css3-color/#colorunits>`_.
115
- The Unicode input is represented by a JSON string,
116
- the output as one of:
117
-
118
- * null if the input is not a valid color in CSS syntax
119
- * The string "currentColor" for the currentColor keyword
120
- * An array of length 4 for every other values:
121
- four (floating point) numbers for the Red, Green, Blue and Alpha channel.
122
- Each value is between 0 and 1.
123
-
124
- ``color3_hsl.json``
125
- Same as ``color3.json``.
126
- This file is generated by the ``make_color3_hsl.py`` Python script.
127
-
128
- ``color3_keywords.json``
129
- Same as ``color3.json``,
130
- except that the values for the Red, Green and Blue channel
131
- are between 0 and 255.
132
- This file is generated by the ``make_color3_keywords.py`` Python script.
133
-
134
- ``An+B.json``
135
- Tests the `An+B <http://dev.w3.org/csswg/css-syntax/#the-anb-type>`_
136
- syntax defined in CSS Syntax Level 3.
137
- This `differs <http://dev.w3.org/csswg/css-syntax/#changes>`_ from the
138
- `nth grammar rule <http://www.w3.org/TR/css3-selectors/#nth-child-pseudo>`_
139
- in Selectors Level 3 only in that
140
- ``-`` charecters and digits can be escaped in some cases.
141
- The Unicode input is represented by a JSON string,
142
- the output as null for invalid syntax,
143
- or an array of two integers ``[A, B]``.
144
-
145
-
146
- Result representation
147
- =====================
148
-
149
- AST nodes (the results of parsing) are represented in JSON as follow.
150
- This representation was chosen to be compact
151
- (and thus less annoying to write by hand)
152
- while staying unambiguous.
153
- For example, the difference between ``@import`` and ``\@import`` is not lost:
154
- they are represented as ``["at-keyword", "import"]`` and ``["ident", "@import"]``,
155
- respectively.
156
-
157
-
158
- Rules and declarations
159
- ----------------------
160
-
161
- .. _at-rule:
162
- .. _at-rules:
163
- .. _qualified rule:
164
- .. _qualified rules:
165
- .. _declaration:
166
- .. _declarations:
167
-
168
-
169
- At-rule
170
- An array of length 4: the string ``"at-rule"``,
171
- the name (value of the at-keyword) as a string,
172
- the prelude as a nested array of `component values`_,
173
- and the optional block as a nested array of component value, or null.
174
-
175
- Qualified rule
176
- An array of length 3: the string ``"qualified rule"``,
177
- the prelude as a nested array of `component values`_,
178
- and the block as a nested array of component value.
179
-
180
-
181
- Declaration
182
- An array of length 4: the string ``"declaration"``, the name as a string,
183
- the value as a nested array of `component values`_,
184
- and a the important flag as a boolean.
185
-
186
-
187
- .. _component value:
188
- .. _component values:
189
-
190
- Component values
191
- ----------------
192
-
193
- <ident>
194
- Array of length 2: the string ``"ident"``, and the value as a string.
195
-
196
- <at-keyword>
197
- Array of length 2: the string ``"at-keyword"``, and the value as a string.
198
-
199
- <hash>
200
- Array of length 3: the string ``"hash"``, the value as a string,
201
- and the type as the string ``"id"`` or ``"unrestricted"``.
202
-
203
- <string>
204
- Array of length 2: the string ``"string"``, and the value as a string.
205
-
206
- <bad-string>
207
- Array of length 1: the string ``"bad-string"``.
208
-
209
- <url>
210
- Array of length 2: the string ``"url"``, and the value as a string.
211
-
212
- <bad-url>
213
- Array of length 1: the string ``"bad-url"``.
214
-
215
- <delim>
216
- The value as a one-character string.
217
-
218
- <number>
219
- Array of length 4: the string ``"number"``, the representation as a string,
220
- the value as a number, and the type as the string ``"integer"`` or ``"number"``.
221
-
222
- <percentage>
223
- Array of length 4: the string ``"percentage"``, the representation as a string,
224
- the value as a number, and the type as the string ``"integer"`` or ``"number"``.
225
-
226
- <dimension>
227
- Array of length 4: the string ``"dimension"``, the representation as a string,
228
- the value as a number, the type as the string ``"integer"`` or ``"number"``,
229
- and the unit as a string.
230
-
231
- <unicode-range>
232
- Array of length 3: the string ``"unicode-range"``,
233
- followed by the *start* and *end* integers as two numbers.
234
-
235
- <include-match>
236
- The string ``"~="``.
237
-
238
- <dash-match>
239
- The string ``"|="``.
240
-
241
- <prefix-match>
242
- The string ``"^="``.
243
-
244
- <suffix-match>
245
- The string ``"$="``.
246
-
247
- <substring-match>
248
- The string ``"*="``.
249
-
250
- <column>
251
- The string ``"||"``.
252
-
253
- <whitespace>
254
- The string ``" "`` (a single space.)
255
-
256
- <CDO>
257
- The string ``"<!--"``.
258
-
259
- <CDC>
260
- The string ``"-->"``.
261
-
262
- <colon>
263
- The string ``":"``.
264
-
265
- <semicolon>
266
- The string ``";"``.
267
-
268
- <comma>
269
- The string ``","``.
270
-
271
- {} block
272
- An array of length N+1: the string ``"{}"``
273
- followed by the N `component values`_ of the block’s content.
274
-
275
- [] block
276
- An array of length N+1: the string ``"[]"``
277
- followed by the N `component values`_ of the block’s content.
278
-
279
- () block
280
- An array of length N+1: the string ``"()"``
281
- followed by the N `component values`_ of the block’s content.
282
-
283
- Function
284
- An array of length N+2: the string ``"function"``
285
- and the name of the function as a string
286
- followed by the N `component values`_ of the function’s arguments.
287
-
288
- <bad-string>
289
- The array of two strings ``["error", "bad-string"]``.
290
-
291
- <bad-url>
292
- The array of two strings ``["error", "bad-url"]``.
293
-
294
- Unmatched <}>
295
- The array of two strings ``["error", "}"]``.
296
-
297
- Unmatched <]>
298
- The array of two strings ``["error", "]"]``.
299
-
300
- Unmatched <)>
301
- The array of two strings ``["error", ")"]``.
@@ -1,142 +0,0 @@
1
- [
2
- "", null,
3
- " /* hey */\n", null,
4
- "4", null,
5
- "top", null,
6
- "/**/transparent", [0, 0, 0, 0],
7
- "transparent", [0, 0, 0, 0],
8
- " transparent\n", [0, 0, 0, 0],
9
- "TransParent", [0, 0, 0, 0],
10
- "currentColor", "currentColor",
11
- "CURRENTcolor", "currentColor",
12
- "current-Color", null,
13
-
14
- "black", [0, 0, 0, 1],
15
- "white", [1, 1, 1, 1],
16
- "fuchsia", [1, 0, 1, 1],
17
- "cyan", [0, 1, 1, 1],
18
- "CyAn", [0, 1, 1, 1],
19
-
20
- "#", null,
21
- "#f", null,
22
- "#ff", null,
23
- "#fff", [1, 1, 1, 1],
24
- "#ffg", null,
25
- "#ffff", null,
26
- "#fffff", null,
27
- "#ffffff", [1, 1, 1, 1],
28
- "#fffffg", null,
29
- "#fffffff", null,
30
- "#ffffffff", null,
31
- "#fffffffff", null,
32
-
33
- "#FFCc99", [1, 0.8, 0.6, 1],
34
- "#369", [0.2, 0.4, 0.6, 1],
35
-
36
- "rgb(00, 51, 102)", [0, 0.2, 0.4, 1],
37
- "r\\gb(00, 51, 102)", [0, 0.2, 0.4, 1],
38
- "r\\67 b(00, 51, 102)", [0, 0.2, 0.4, 1],
39
- "RGB(153, 204, 255)", [0.6, 0.8, 1, 1],
40
- "rgB(0, 0, 0)", [0, 0, 0, 1],
41
- "rgB(0, 51, 255)", [0, 0.2, 1, 1],
42
- "rgb(0,51,255)", [0, 0.2, 1, 1],
43
- "rgb(0\t, 51 ,255)", [0, 0.2, 1, 1],
44
- "rgb(/* R */0, /* G */51, /* B */255)", [0, 0.2, 1, 1],
45
- "rgb(-51, 306, 0)", [-0.2, 1.2, 0, 1],
46
-
47
- "rgb(42%, 3%, 50%)", [0.42, 0.03, 0.5, 1],
48
- "RGB(100%, 100%, 100%)", [1, 1, 1, 1],
49
- "rgB(0%, 0%, 0%)", [0, 0, 0, 1],
50
- "rgB(10%, 20%, 30%)", [0.1, 0.2, 0.3, 1],
51
- "rgb(10%,20%,30%)", [0.1, 0.2, 0.3, 1],
52
- "rgb(10%\t, 20% ,30%)", [0.1, 0.2, 0.3, 1],
53
- "rgb(/* R */ 10%, /* G */ 20%, /* B */ 30%)", [0.1, 0.2, 0.3, 1],
54
- "rgb(-12%, 110%, 1400%)", [-0.12, 1.1, 14, 1],
55
-
56
- "rgb(10%, 50%, 0)", null,
57
- "rgb(255, 50%, 0%)", null,
58
- "rgb(0, 0 0)", null,
59
- "rgb(0, 0, 0deg)", null,
60
- "rgb(0, 0, light)", null,
61
- "rgb()", null,
62
- "rgb(0)", null,
63
- "rgb(0, 0)", null,
64
- "rgb(0, 0, 0, 0)", null,
65
- "rgb(0%)", null,
66
- "rgb(0%, 0%)", null,
67
- "rgb(0%, 0%, 0%, 0%)", null,
68
- "rgb(0%, 0%, 0%, 0)", null,
69
-
70
- "rgba(0, 0, 0, 0)", [0, 0, 0, 0],
71
- "rgba(204, 0, 102, 0.3)", [0.8, 0, 0.4, 0.3],
72
- "RGBA(255, 255, 255, 0)", [1, 1, 1, 0],
73
- "rgBA(0, 51, 255, 1)", [0, 0.2, 1, 1],
74
- "rgba(0, 51, 255, 1.1)", [0, 0.2, 1, 1],
75
- "rgba(0, 51, 255, 37)", [0, 0.2, 1, 1],
76
- "rgba(0, 51, 255, 0.42)", [0, 0.2, 1, 0.42],
77
- "rgba(0, 51, 255, 0)", [0, 0.2, 1, 0],
78
- "rgba(0, 51, 255, -0.1)", [0, 0.2, 1, 0],
79
- "rgba(0, 51, 255, -139)", [0, 0.2, 1, 0],
80
-
81
- "rgba(42%, 3%, 50%, 0.3)", [0.42, 0.03, 0.5, 0.3],
82
- "RGBA(100%, 100%, 100%, 0)", [1, 1, 1, 0],
83
- "rgBA(0%, 20%, 100%, 1)", [0, 0.2, 1, 1],
84
- "rgba(0%, 20%, 100%, 1.1)", [0, 0.2, 1, 1],
85
- "rgba(0%, 20%, 100%, 37)", [0, 0.2, 1, 1],
86
- "rgba(0%, 20%, 100%, 0.42)", [0, 0.2, 1, 0.42],
87
- "rgba(0%, 20%, 100%, 0)", [0, 0.2, 1, 0],
88
- "rgba(0%, 20%, 100%, -0.1)", [0, 0.2, 1, 0],
89
- "rgba(0%, 20%, 100%, -139)", [0, 0.2, 1, 0],
90
-
91
- "rgba(255, 255, 255, 0%)", null,
92
- "rgba(10%, 50%, 0, 1)", null,
93
- "rgba(255, 50%, 0%, 1)", null,
94
- "rgba(0, 0, 0 0)", null,
95
- "rgba(0, 0, 0, 0deg)", null,
96
- "rgba(0, 0, 0, light)", null,
97
- "rgba()", null,
98
- "rgba(0)", null,
99
- "rgba(0, 0, 0)", null,
100
- "rgba(0, 0, 0, 0, 0)", null,
101
- "rgba(0%)", null,
102
- "rgba(0%, 0%)", null,
103
- "rgba(0%, 0%, 0%)", null,
104
- "rgba(0%, 0%, 0%, 0%)", null,
105
- "rgba(0%, 0%, 0%, 0%, 0%)", null,
106
-
107
- "HSL(0, 0%, 0%)", [0, 0, 0, 1],
108
- "hsL(0, 100%, 50%)", [1, 0, 0, 1],
109
- "hsl(60, 100%, 37.5%)", [0.75, 0.75, 0, 1],
110
- "hsl(780, 100%, 37.5%)", [0.75, 0.75, 0, 1],
111
- "hsl(-300, 100%, 37.5%)", [0.75, 0.75, 0, 1],
112
- "hsl(300, 50%, 50%)", [0.75, 0.25, 0.75, 1],
113
-
114
- "hsl(10, 50%, 0)", null,
115
- "hsl(50%, 50%, 0%)", null,
116
- "hsl(0, 0% 0%)", null,
117
- "hsl(30deg, 100%, 100%)", null,
118
- "hsl(0, 0%, light)", null,
119
- "hsl()", null,
120
- "hsl(0)", null,
121
- "hsl(0, 0%)", null,
122
- "hsl(0, 0%, 0%, 0%)", null,
123
-
124
- "HSLA(-300, 100%, 37.5%, 1)", [0.75, 0.75, 0, 1],
125
- "hsLA(-300, 100%, 37.5%, 12)", [0.75, 0.75, 0, 1],
126
- "hsla(-300, 100%, 37.5%, 0.2)", [0.75, 0.75, 0, 0.2],
127
- "hsla(-300, 100%, 37.5%, 0)", [0.75, 0.75, 0, 0],
128
- "hsla(-300, 100%, 37.5%, -3)", [0.75, 0.75, 0, 0],
129
-
130
- "hsla(10, 50%, 0, 1)", null,
131
- "hsla(50%, 50%, 0%, 1)", null,
132
- "hsla(0, 0% 0%, 1)", null,
133
- "hsla(30deg, 100%, 100%, 1)", null,
134
- "hsla(0, 0%, light, 1)", null,
135
- "hsla()", null,
136
- "hsla(0)", null,
137
- "hsla(0, 0%)", null,
138
- "hsla(0, 0%, 0%, 50%)", null,
139
- "hsla(0, 0%, 0%, 1, 0%)", null,
140
-
141
- "cmyk(0, 0, 0, 0)", null
142
- ]