habaki 0.5.0 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0353296529b5859a3a87d39342fefb8b8a90989bda2f99a11f83044afe272454'
4
- data.tar.gz: ccc7c4db5c2fcc817cf0915bf0824766c86712a1ec70fb104e2ab82c3a006341
3
+ metadata.gz: 99a0d86e6c6dc0b69d2d83a359986c92875c4139e8df27897ffb44ad05d6d2fa
4
+ data.tar.gz: 8c83b1a623518634131e6786b69128588ced9b1e0093f94d9ac6a972d1b1f3b5
5
5
  SHA512:
6
- metadata.gz: e2d38a0e7dc9ac35da58f6fcf287fb44a4589449401d38620f754e20a4987aa78263cd3c17feeab76c53453e21a8cedc665fd8316bba5de107ec64764d18bfb4
7
- data.tar.gz: 19031074df7e070da55f4cc73576a337c849657e55a91c4df682f9086e8139f85c56c9967702330f4c7a99c89d85f5c836920c1f30ce67ecb6df8e41b77db789
6
+ metadata.gz: d8488e134dbe6ff0c370c94bee15b423c0efe7f1b29d789d3f333777469a9c36e9fca192380c48d8962ce3a2cfb6b0f116f20198cec98558ea5a5ede51153283
7
+ data.tar.gz: 4cb0de2c9ad929bafd4218f1d46cd888a0180b0102d70526e896d905eb807ad42d3e369b25b3d5759fe636c61fff32de7b42472e688f0ed031d0554ede3f9883
@@ -0,0 +1,1007 @@
1
+ ---
2
+ "<absolute-size>": xx-small | x-small | small | medium | large | x-large | xx-large
3
+ | xxx-large
4
+ "<alpha-value>": "<number> | <percentage>"
5
+ "<angle-percentage>": "<angle> | <percentage>"
6
+ "<angular-color-hint>": "<angle-percentage>"
7
+ "<angular-color-stop>": "<color> && <color-stop-angle>?"
8
+ "<angular-color-stop-list>": "[ <angular-color-stop> [, <angular-color-hint>]? ]#
9
+ , <angular-color-stop>"
10
+ "<animateable-feature>": scroll-position | contents | <custom-ident>
11
+ "<attachment>": scroll | fixed | local
12
+ "<attr()>": attr( <attr-name> <type-or-unit>? [, <attr-fallback> ]? )
13
+ "<attr-matcher>": "[ '~' | '|' | '^' | '$' | '*' ]? '='"
14
+ "<attr-modifier>": i | s
15
+ "<attribute-selector>": "'[' <wq-name> ']' | '[' <wq-name> <attr-matcher> [ <string-token>
16
+ | <ident-token> ] <attr-modifier>? ']'"
17
+ "<auto-repeat>": repeat( [ auto-fill | auto-fit ] , [ <line-names>? <fixed-size> ]+
18
+ <line-names>? )
19
+ "<auto-track-list>": |-
20
+ [ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>? <auto-repeat>
21
+ [ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>?
22
+ "<baseline-position>": "[ first | last ]? baseline"
23
+ "<basic-shape>": "<inset()> | <circle()> | <ellipse()> | <polygon()> | <path()>"
24
+ "<bg-image>": none | <image>
25
+ "<bg-layer>": "<bg-image> || <bg-position> [ / <bg-size> ]? || <repeat-style> || <attachment>
26
+ || <box> || <box>"
27
+ "<bg-position>": "[ [ left | center | right | top | bottom | <length-percentage> ]
28
+ | [ left | center | right | <length-percentage> ] [ top | center | bottom | <length-percentage>
29
+ ] | [ [ center | [ left | right ] <length-percentage>? ] && [ center | [ top | bottom
30
+ ] <length-percentage>? ] ] ]"
31
+ "<bg-size>": "[ <length-percentage> | auto ]{1,2} | cover | contain"
32
+ "<blur()>": blur( <length> )
33
+ "<blend-mode>": normal | multiply | screen | overlay | darken | lighten | color-dodge
34
+ | color-burn | hard-light | soft-light | difference | exclusion | hue | saturation
35
+ | color | luminosity
36
+ "<box>": border-box | padding-box | content-box
37
+ "<brightness()>": brightness( <number-percentage> )
38
+ "<calc()>": calc( <calc-sum> )
39
+ "<calc-sum>": "<calc-product> [ [ '+' | '-' ] <calc-product> ]*"
40
+ "<calc-product>": "<calc-value> [ '*' <calc-value> | '/' <number> ]*"
41
+ "<calc-value>": "<number> | <dimension> | <percentage> | ( <calc-sum> )"
42
+ "<cf-final-image>": "<image> | <color>"
43
+ "<cf-mixing-image>": "<percentage>? && <image>"
44
+ "<circle()>": circle( [ <shape-radius> ]? [ at <position> ]? )
45
+ "<clamp()>": clamp( <calc-sum>#{3} )
46
+ "<class-selector>": "'.' <ident-token>"
47
+ "<clip-source>": "<url>"
48
+ "<color>": "<rgb()> | <rgba()> | <hsl()> | <hsla()> | <hwb()> | <hex-color> | <named-color>
49
+ | currentcolor | <deprecated-system-color>"
50
+ "<color-stop>": "<color-stop-length> | <color-stop-angle>"
51
+ "<color-stop-angle>": "<angle-percentage>{1,2}"
52
+ "<color-stop-length>": "<length-percentage>{1,2}"
53
+ "<color-stop-list>": "[ <linear-color-stop> [, <linear-color-hint>]? ]# , <linear-color-stop>"
54
+ "<combinator>": "'>' | '+' | '~' | [ '||' ]"
55
+ "<common-lig-values>": "[ common-ligatures | no-common-ligatures ]"
56
+ "<compat-auto>": searchfield | textarea | push-button | slider-horizontal | checkbox
57
+ | radio | square-button | menulist | listbox | meter | progress-bar | button
58
+ "<composite-style>": clear | copy | source-over | source-in | source-out | source-atop
59
+ | destination-over | destination-in | destination-out | destination-atop | xor
60
+ "<compositing-operator>": add | subtract | intersect | exclude
61
+ "<compound-selector>": "[ <type-selector>? <subclass-selector>* [ <pseudo-element-selector>
62
+ <pseudo-class-selector>* ]* ]!"
63
+ "<compound-selector-list>": "<compound-selector>#"
64
+ "<complex-selector>": "<compound-selector> [ <combinator>? <compound-selector> ]*"
65
+ "<complex-selector-list>": "<complex-selector>#"
66
+ "<conic-gradient()>": conic-gradient( [ from <angle> ]? [ at <position> ]?, <angular-color-stop-list>
67
+ )
68
+ "<contextual-alt-values>": "[ contextual | no-contextual ]"
69
+ "<content-distribution>": space-between | space-around | space-evenly | stretch
70
+ "<content-list>": "[ <string> | contents | <image> | <counter> | <quote> | <target>
71
+ | <leader()> ]+"
72
+ "<content-position>": center | start | end | flex-start | flex-end
73
+ "<content-replacement>": "<image>"
74
+ "<contrast()>": contrast( [ <number-percentage> ] )
75
+ "<counter>": "<counter()> | <counters()>"
76
+ "<counter()>": counter( <counter-name>, <counter-style>? )
77
+ "<counter-name>": "<custom-ident>"
78
+ "<counter-style>": "<counter-style-name> | symbols()"
79
+ "<counter-style-name>": "<custom-ident>"
80
+ "<counters()>": counters( <counter-name>, <string>, <counter-style>? )
81
+ "<cross-fade()>": cross-fade( <cf-mixing-image> , <cf-final-image>? )
82
+ "<cubic-bezier-timing-function>": ease | ease-in | ease-out | ease-in-out | cubic-bezier(<number
83
+ [0,1]>, <number>, <number [0,1]>, <number>)
84
+ "<deprecated-system-color>": ActiveBorder | ActiveCaption | AppWorkspace | Background
85
+ | ButtonFace | ButtonHighlight | ButtonShadow | ButtonText | CaptionText | GrayText
86
+ | Highlight | HighlightText | InactiveBorder | InactiveCaption | InactiveCaptionText
87
+ | InfoBackground | InfoText | Menu | MenuText | Scrollbar | ThreeDDarkShadow | ThreeDFace
88
+ | ThreeDHighlight | ThreeDLightShadow | ThreeDShadow | Window | WindowFrame | WindowText
89
+ "<discretionary-lig-values>": "[ discretionary-ligatures | no-discretionary-ligatures
90
+ ]"
91
+ "<display-box>": contents | none
92
+ "<display-inside>": flow | flow-root | table | flex | grid | ruby
93
+ "<display-internal>": table-row-group | table-header-group | table-footer-group |
94
+ table-row | table-cell | table-column-group | table-column | table-caption | ruby-base
95
+ | ruby-text | ruby-base-container | ruby-text-container
96
+ "<display-legacy>": inline-block | inline-list-item | inline-table | inline-flex |
97
+ inline-grid
98
+ "<display-listitem>": "<display-outside>? && [ flow | flow-root ]? && list-item"
99
+ "<display-outside>": block | inline | run-in
100
+ "<drop-shadow()>": drop-shadow( <length>{2,3} <color>? )
101
+ "<east-asian-variant-values>": "[ jis78 | jis83 | jis90 | jis04 | simplified | traditional
102
+ ]"
103
+ "<east-asian-width-values>": "[ full-width | proportional-width ]"
104
+ "<element()>": element( <id-selector> )
105
+ "<ellipse()>": ellipse( [ <shape-radius>{2} ]? [ at <position> ]? )
106
+ "<ending-shape>": circle | ellipse
107
+ "<env()>": env( <custom-ident> , <declaration-value>? )
108
+ "<explicit-track-list>": "[ <line-names>? <track-size> ]+ <line-names>?"
109
+ "<family-name>": "<string> | <custom-ident>+"
110
+ "<feature-tag-value>": "<string> [ <integer> | on | off ]?"
111
+ "<feature-type>": "@stylistic | @historical-forms | @styleset | @character-variant
112
+ | @swash | @ornaments | @annotation"
113
+ "<feature-value-block>": "<feature-type> '{' <feature-value-declaration-list> '}'"
114
+ "<feature-value-block-list>": "<feature-value-block>+"
115
+ "<feature-value-declaration>": "<custom-ident>: <integer>+;"
116
+ "<feature-value-declaration-list>": "<feature-value-declaration>"
117
+ "<feature-value-name>": "<custom-ident>"
118
+ "<fill-rule>": nonzero | evenodd
119
+ "<filter-function>": "<blur()> | <brightness()> | <contrast()> | <drop-shadow()> |
120
+ <grayscale()> | <hue-rotate()> | <invert()> | <opacity()> | <saturate()> | <sepia()>"
121
+ "<filter-function-list>": "[ <filter-function> | <url> ]+"
122
+ "<final-bg-layer>": "<'background-color'> || <bg-image> || <bg-position> [ / <bg-size>
123
+ ]? || <repeat-style> || <attachment> || <box> || <box>"
124
+ "<fit-content()>": fit-content( [ <length> | <percentage> ] )
125
+ "<fixed-breadth>": "<length-percentage>"
126
+ "<fixed-repeat>": repeat( [ <integer [1,∞]> ] , [ <line-names>? <fixed-size> ]+ <line-names>?
127
+ )
128
+ "<fixed-size>": "<fixed-breadth> | minmax( <fixed-breadth> , <track-breadth> ) | minmax(
129
+ <inflexible-breadth> , <fixed-breadth> )"
130
+ "<font-stretch-absolute>": normal | ultra-condensed | extra-condensed | condensed
131
+ | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded |
132
+ <percentage>
133
+ "<font-variant-css21>": "[ normal | small-caps ]"
134
+ "<font-weight-absolute>": normal | bold | <number [1,1000]>
135
+ "<frequency-percentage>": "<frequency> | <percentage>"
136
+ "<general-enclosed>": "[ <function-token> <any-value> ) ] | ( <ident> <any-value>
137
+ )"
138
+ "<generic-family>": serif | sans-serif | cursive | fantasy | monospace
139
+ "<generic-name>": serif | sans-serif | cursive | fantasy | monospace
140
+ "<geometry-box>": "<shape-box> | fill-box | stroke-box | view-box"
141
+ "<gradient>": "<linear-gradient()> | <repeating-linear-gradient()> | <radial-gradient()>
142
+ | <repeating-radial-gradient()> | <conic-gradient()>"
143
+ "<grayscale()>": grayscale( <number-percentage> )
144
+ "<grid-line>": auto | <custom-ident> | [ <integer> && <custom-ident>? ] | [ span &&
145
+ [ <integer> || <custom-ident> ] ]
146
+ "<historical-lig-values>": "[ historical-ligatures | no-historical-ligatures ]"
147
+ "<hsl()>": hsl( <hue> <percentage> <percentage> [ / <alpha-value> ]? ) | hsl( <hue>,
148
+ <percentage>, <percentage>, <alpha-value>? )
149
+ "<hsla()>": hsla( <hue> <percentage> <percentage> [ / <alpha-value> ]? ) | hsla( <hue>,
150
+ <percentage>, <percentage>, <alpha-value>? )
151
+ "<hue>": "<number> | <angle>"
152
+ "<hue-rotate()>": hue-rotate( <angle> )
153
+ "<hwb()>": hwb( [<hue> | none] [<percentage> | none] [<percentage> | none] [ / [<alpha-value>
154
+ | none] ]? )
155
+ "<id-selector>": "<hash-token>"
156
+ "<image>": "<url> | <image()> | <image-set()> | <element()> | <paint()> | <cross-fade()>
157
+ | <gradient>"
158
+ "<image()>": image( <image-tags>? [ <image-src>? , <color>? ]! )
159
+ "<image-set()>": image-set( <image-set-option># )
160
+ "<image-set-option>": "[ <image> | <string> ] [ <resolution> || type(<string>) ]"
161
+ "<image-src>": "<url> | <string>"
162
+ "<image-tags>": ltr | rtl
163
+ "<inflexible-breadth>": "<length> | <percentage> | min-content | max-content | auto"
164
+ "<inset()>": inset( <length-percentage>{1,4} [ round <'border-radius'> ]? )
165
+ "<invert()>": invert( <number-percentage> )
166
+ "<keyframes-name>": "<custom-ident> | <string>"
167
+ "<keyframe-block>": |-
168
+ <keyframe-selector># {
169
+ <declaration-list>
170
+ }
171
+ "<keyframe-block-list>": "<keyframe-block>+"
172
+ "<keyframe-selector>": from | to | <percentage>
173
+ "<layer()>": layer( <layer-name> )
174
+ "<layer-name>": "<ident> [ '.' <ident> ]*"
175
+ "<leader()>": leader( <leader-type> )
176
+ "<leader-type>": dotted | solid | space | <string>
177
+ "<length-percentage>": "<length> | <percentage>"
178
+ "<line-names>": "'[' <custom-ident>* ']'"
179
+ "<line-name-list>": "[ <line-names> | <name-repeat> ]+"
180
+ "<line-style>": none | hidden | dotted | dashed | solid | double | groove | ridge
181
+ | inset | outset
182
+ "<line-width>": "<length> | thin | medium | thick"
183
+ "<linear-color-hint>": "<length-percentage>"
184
+ "<linear-color-stop>": "<color> <color-stop-length>?"
185
+ "<linear-gradient()>": linear-gradient( [ <angle> | to <side-or-corner> ]? , <color-stop-list>
186
+ )
187
+ "<mask-layer>": "<mask-reference> || <position> [ / <bg-size> ]? || <repeat-style>
188
+ || <geometry-box> || [ <geometry-box> | no-clip ] || <compositing-operator> || <masking-mode>"
189
+ "<mask-position>": "[ <length-percentage> | left | center | right ] [ <length-percentage>
190
+ | top | center | bottom ]?"
191
+ "<mask-reference>": none | <image> | <mask-source>
192
+ "<mask-source>": "<url>"
193
+ "<masking-mode>": alpha | luminance | match-source
194
+ "<matrix()>": matrix( <number>#{6} )
195
+ "<matrix3d()>": matrix3d( <number>#{16} )
196
+ "<max()>": max( <calc-sum># )
197
+ "<media-and>": "<media-in-parens> [ and <media-in-parens> ]+"
198
+ "<media-condition>": "<media-not> | <media-and> | <media-or> | <media-in-parens>"
199
+ "<media-condition-without-or>": "<media-not> | <media-and> | <media-in-parens>"
200
+ "<media-feature>": "( [ <mf-plain> | <mf-boolean> | <mf-range> ] )"
201
+ "<media-in-parens>": "( <media-condition> ) | <media-feature> | <general-enclosed>"
202
+ "<media-not>": not <media-in-parens>
203
+ "<media-or>": "<media-in-parens> [ or <media-in-parens> ]+"
204
+ "<media-query>": "<media-condition> | [ not | only ]? <media-type> [ and <media-condition-without-or>
205
+ ]?"
206
+ "<media-query-list>": "<media-query>#"
207
+ "<media-type>": "<ident>"
208
+ "<mf-boolean>": "<mf-name>"
209
+ "<mf-name>": "<ident>"
210
+ "<mf-plain>": "<mf-name> : <mf-value>"
211
+ "<mf-range>": |-
212
+ <mf-name> [ '<' | '>' ]? '='? <mf-value>
213
+ | <mf-value> [ '<' | '>' ]? '='? <mf-name>
214
+ | <mf-value> '<' '='? <mf-name> '<' '='? <mf-value>
215
+ | <mf-value> '>' '='? <mf-name> '>' '='? <mf-value>
216
+ "<mf-value>": "<number> | <dimension> | <ident> | <ratio>"
217
+ "<min()>": min( <calc-sum># )
218
+ "<minmax()>": minmax( [ <length> | <percentage> | min-content | max-content | auto
219
+ ] , [ <length> | <percentage> | <flex> | min-content | max-content | auto ] )
220
+ "<name-repeat>": repeat( [ <integer [1,∞]> ] | auto-fill ], <line-names>+ )
221
+ "<named-color>": transparent | aliceblue | antiquewhite | aqua | aquamarine | azure
222
+ | beige | bisque | black | blanchedalmond | blue | blueviolet | brown | burlywood
223
+ | cadetblue | chartreuse | chocolate | coral | cornflowerblue | cornsilk | crimson
224
+ | cyan | darkblue | darkcyan | darkgoldenrod | darkgray | darkgreen | darkgrey |
225
+ darkkhaki | darkmagenta | darkolivegreen | darkorange | darkorchid | darkred | darksalmon
226
+ | darkseagreen | darkslateblue | darkslategray | darkslategrey | darkturquoise |
227
+ darkviolet | deeppink | deepskyblue | dimgray | dimgrey | dodgerblue | firebrick
228
+ | floralwhite | forestgreen | fuchsia | gainsboro | ghostwhite | gold | goldenrod
229
+ | gray | green | greenyellow | grey | honeydew | hotpink | indianred | indigo |
230
+ ivory | khaki | lavender | lavenderblush | lawngreen | lemonchiffon | lightblue
231
+ | lightcoral | lightcyan | lightgoldenrodyellow | lightgray | lightgreen | lightgrey
232
+ | lightpink | lightsalmon | lightseagreen | lightskyblue | lightslategray | lightslategrey
233
+ | lightsteelblue | lightyellow | lime | limegreen | linen | magenta | maroon | mediumaquamarine
234
+ | mediumblue | mediumorchid | mediumpurple | mediumseagreen | mediumslateblue |
235
+ mediumspringgreen | mediumturquoise | mediumvioletred | midnightblue | mintcream
236
+ | mistyrose | moccasin | navajowhite | navy | oldlace | olive | olivedrab | orange
237
+ | orangered | orchid | palegoldenrod | palegreen | paleturquoise | palevioletred
238
+ | papayawhip | peachpuff | peru | pink | plum | powderblue | purple | rebeccapurple
239
+ | red | rosybrown | royalblue | saddlebrown | salmon | sandybrown | seagreen | seashell
240
+ | sienna | silver | skyblue | slateblue | slategray | slategrey | snow | springgreen
241
+ | steelblue | tan | teal | thistle | tomato | turquoise | violet | wheat | white
242
+ | whitesmoke | yellow | yellowgreen
243
+ "<namespace-prefix>": "<ident>"
244
+ "<ns-prefix>": "[ <ident-token> | '*' ]? '|'"
245
+ "<number-percentage>": "<number> | <percentage>"
246
+ "<numeric-figure-values>": "[ lining-nums | oldstyle-nums ]"
247
+ "<numeric-fraction-values>": "[ diagonal-fractions | stacked-fractions ]"
248
+ "<numeric-spacing-values>": "[ proportional-nums | tabular-nums ]"
249
+ "<nth>": "<an-plus-b> | even | odd"
250
+ "<opacity()>": opacity( [ <number-percentage> ] )
251
+ "<overflow-position>": unsafe | safe
252
+ "<outline-radius>": "<length> | <percentage>"
253
+ "<page-body>": "<declaration>? [ ; <page-body> ]? | <page-margin-box> <page-body>"
254
+ "<page-margin-box>": "<page-margin-box-type> '{' <declaration-list> '}'"
255
+ "<page-margin-box-type>": "@top-left-corner | @top-left | @top-center | @top-right
256
+ | @top-right-corner | @bottom-left-corner | @bottom-left | @bottom-center | @bottom-right
257
+ | @bottom-right-corner | @left-top | @left-middle | @left-bottom | @right-top |
258
+ @right-middle | @right-bottom"
259
+ "<page-selector-list>": "[ <page-selector># ]?"
260
+ "<page-selector>": "<pseudo-page>+ | <ident> <pseudo-page>*"
261
+ "<page-size>": A5 | A4 | A3 | B5 | B4 | JIS-B5 | JIS-B4 | letter | legal | ledger
262
+ "<path()>": path( [ <fill-rule>, ]? <string> )
263
+ "<paint()>": paint( <ident>, <declaration-value>? )
264
+ "<perspective()>": perspective( <length> )
265
+ "<polygon()>": polygon( <fill-rule>? , [ <length-percentage> <length-percentage> ]#
266
+ )
267
+ "<position>": "[ [ left | center | right ] || [ top | center | bottom ] | [ left |
268
+ center | right | <length-percentage> ] [ top | center | bottom | <length-percentage>
269
+ ]? | [ [ left | right ] <length-percentage> ] && [ [ top | bottom ] <length-percentage>
270
+ ] ]"
271
+ "<pseudo-class-selector>": "':' <ident-token> | ':' <function-token> <any-value> ')'"
272
+ "<pseudo-element-selector>": "':' <pseudo-class-selector>"
273
+ "<pseudo-page>": ": [ left | right | first | blank ]"
274
+ "<quote>": open-quote | close-quote | no-open-quote | no-close-quote
275
+ "<radial-gradient()>": radial-gradient( [ <ending-shape> || <size> ]? [ at <position>
276
+ ]? , <color-stop-list> )
277
+ "<relative-selector>": "<combinator>? <complex-selector>"
278
+ "<relative-selector-list>": "<relative-selector>#"
279
+ "<relative-size>": larger | smaller
280
+ "<repeat-style>": repeat-x | repeat-y | [ repeat | space | round | no-repeat ]{1,2}
281
+ "<repeating-linear-gradient()>": repeating-linear-gradient( [ <angle> | to <side-or-corner>
282
+ ]? , <color-stop-list> )
283
+ "<repeating-radial-gradient()>": repeating-radial-gradient( [ <ending-shape> || <size>
284
+ ]? [ at <position> ]? , <color-stop-list> )
285
+ "<rgb()>": rgb( <percentage>{3} [ / <alpha-value> ]? ) | rgb( <number>{3} [ / <alpha-value>
286
+ ]? ) | rgb( <percentage>#{3} , <alpha-value>? ) | rgb( <number>#{3} , <alpha-value>?
287
+ )
288
+ "<rgba()>": rgba( <percentage>{3} [ / <alpha-value> ]? ) | rgba( <number>{3} [ / <alpha-value>
289
+ ]? ) | rgba( <percentage>#{3} , <alpha-value>? ) | rgba( <number>#{3} , <alpha-value>?
290
+ )
291
+ "<rotate()>": rotate( [ <angle> | <zero> ] )
292
+ "<rotate3d()>": rotate3d( <number> , <number> , <number> , [ <angle> | <zero> ] )
293
+ "<rotateX()>": rotateX( [ <angle> | <zero> ] )
294
+ "<rotateY()>": rotateY( [ <angle> | <zero> ] )
295
+ "<rotateZ()>": rotateZ( [ <angle> | <zero> ] )
296
+ "<saturate()>": saturate( <number-percentage> )
297
+ "<scale()>": scale( <number> , <number>? )
298
+ "<scale3d()>": scale3d( <number> , <number> , <number> )
299
+ "<scaleX()>": scaleX( <number> )
300
+ "<scaleY()>": scaleY( <number> )
301
+ "<scaleZ()>": scaleZ( <number> )
302
+ "<self-position>": center | start | end | self-start | self-end | flex-start | flex-end
303
+ "<shape-radius>": "<length-percentage> | closest-side | farthest-side"
304
+ "<skew()>": skew( [ <angle> | <zero> ] , [ <angle> | <zero> ]? )
305
+ "<skewX()>": skewX( [ <angle> | <zero> ] )
306
+ "<skewY()>": skewY( [ <angle> | <zero> ] )
307
+ "<sepia()>": sepia( <number-percentage> )
308
+ "<shadow>": inset? && <length>{2,4} && <color>?
309
+ "<shadow-t>": "[ <length>{2,3} && <color>? ]"
310
+ "<shape>": rect(<top>, <right>, <bottom>, <left>)
311
+ "<shape-box>": "<box> | margin-box"
312
+ "<side-or-corner>": "[ left | right ] || [ top | bottom ]"
313
+ "<single-animation>": "<time> || <easing-function> || <time> || <single-animation-iteration-count>
314
+ || <single-animation-direction> || <single-animation-fill-mode> || <single-animation-play-state>
315
+ || [ none | <keyframes-name> ]"
316
+ "<single-animation-direction>": normal | reverse | alternate | alternate-reverse
317
+ "<single-animation-fill-mode>": none | forwards | backwards | both
318
+ "<single-animation-iteration-count>": infinite | <number>
319
+ "<single-animation-play-state>": running | paused
320
+ "<single-animation-timeline>": auto | none | <timeline-name>
321
+ "<single-transition>": "[ none | <single-transition-property> ] || <time> || <easing-function>
322
+ || <time>"
323
+ "<single-transition-property>": all | <custom-ident>
324
+ "<size>": closest-side | farthest-side | closest-corner | farthest-corner | <length>
325
+ | <length-percentage>{2}
326
+ "<step-position>": jump-start | jump-end | jump-none | jump-both | start | end
327
+ "<step-timing-function>": step-start | step-end | steps(<integer>[, <step-position>]?)
328
+ "<subclass-selector>": "<id-selector> | <class-selector> | <attribute-selector> |
329
+ <pseudo-class-selector>"
330
+ "<supports-condition>": not <supports-in-parens> | <supports-in-parens> [ and <supports-in-parens>
331
+ ]* | <supports-in-parens> [ or <supports-in-parens> ]*
332
+ "<supports-in-parens>": "( <supports-condition> ) | <supports-feature> | <general-enclosed>"
333
+ "<supports-feature>": "<supports-decl> | <supports-selector-fn>"
334
+ "<supports-decl>": "( <declaration> )"
335
+ "<supports-selector-fn>": selector( <complex-selector> )
336
+ "<symbol>": "<string> | <image> | <custom-ident>"
337
+ "<target>": "<target-counter()> | <target-counters()> | <target-text()>"
338
+ "<target-counter()>": target-counter( [ <string> | <url> ] , <custom-ident> , <counter-style>?
339
+ )
340
+ "<target-counters()>": target-counters( [ <string> | <url> ] , <custom-ident> , <string>
341
+ , <counter-style>? )
342
+ "<target-text()>": target-text( [ <string> | <url> ] , [ content | before | after
343
+ | first-letter ]? )
344
+ "<time-percentage>": "<time> | <percentage>"
345
+ "<timeline-name>": "<custom-ident> | <string>"
346
+ "<easing-function>": linear | <cubic-bezier-timing-function> | <step-timing-function>
347
+ "<track-breadth>": "<length-percentage> | <flex> | min-content | max-content | auto"
348
+ "<track-list>": "[ <line-names>? [ <track-size> | <track-repeat> ] ]+ <line-names>?"
349
+ "<track-repeat>": repeat( [ <integer [1,∞]> ] , [ <line-names>? <track-size> ]+ <line-names>?
350
+ )
351
+ "<track-size>": "<track-breadth> | minmax( <inflexible-breadth> , <track-breadth>
352
+ ) | fit-content( [ <length> | <percentage> ] )"
353
+ "<transform-function>": "<matrix()> | <translate()> | <translateX()> | <translateY()>
354
+ | <scale()> | <scaleX()> | <scaleY()> | <rotate()> | <skew()> | <skewX()> | <skewY()>
355
+ | <matrix3d()> | <translate3d()> | <translateZ()> | <scale3d()> | <scaleZ()> | <rotate3d()>
356
+ | <rotateX()> | <rotateY()> | <rotateZ()> | <perspective()>"
357
+ "<transform-list>": "<transform-function>+"
358
+ "<translate()>": translate( <length-percentage> , <length-percentage>? )
359
+ "<translate3d()>": translate3d( <length-percentage> , <length-percentage> , <length>
360
+ )
361
+ "<translateX()>": translateX( <length-percentage> )
362
+ "<translateY()>": translateY( <length-percentage> )
363
+ "<translateZ()>": translateZ( <length> )
364
+ "<type-or-unit>": string | color | url | integer | number | length | angle | time
365
+ | frequency | cap | ch | em | ex | ic | lh | rlh | rem | vb | vi | vw | vh | vmin
366
+ | vmax | mm | Q | cm | in | pt | pc | px | deg | grad | rad | turn | ms | s | Hz
367
+ | kHz | %
368
+ "<type-selector>": "<wq-name> | <ns-prefix>? '*'"
369
+ "<var()>": var( <custom-property-name> , <declaration-value>? )
370
+ "<viewport-length>": auto | <length-percentage>
371
+ "<visual-box>": content-box | padding-box | border-box
372
+ "<wq-name>": "<ns-prefix>? <ident-token>"
373
+
374
+ "--*": "<declaration-value>"
375
+ "-ms-accelerator": false | true
376
+ "-ms-block-progression": tb | rl | bt | lr
377
+ "-ms-content-zoom-chaining": none | chained
378
+ "-ms-content-zooming": none | zoom
379
+ "-ms-content-zoom-limit": "<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>"
380
+ "-ms-content-zoom-limit-max": "<percentage>"
381
+ "-ms-content-zoom-limit-min": "<percentage>"
382
+ "-ms-content-zoom-snap": "<'-ms-content-zoom-snap-type'> || <'-ms-content-zoom-snap-points'>"
383
+ "-ms-content-zoom-snap-points": snapInterval( <percentage>, <percentage> ) | snapList(
384
+ <percentage># )
385
+ "-ms-content-zoom-snap-type": none | proximity | mandatory
386
+ "-ms-filter": "<string>"
387
+ "-ms-flow-from": "[ none | <custom-ident> ]#"
388
+ "-ms-flow-into": "[ none | <custom-ident> ]#"
389
+ "-ms-grid-columns": none | <track-list> | <auto-track-list>
390
+ "-ms-grid-rows": none | <track-list> | <auto-track-list>
391
+ "-ms-high-contrast-adjust": auto | none
392
+ "-ms-hyphenate-limit-chars": auto | <integer>{1,3}
393
+ "-ms-hyphenate-limit-lines": no-limit | <integer>
394
+ "-ms-hyphenate-limit-zone": "<percentage> | <length>"
395
+ "-ms-ime-align": auto | after
396
+ "-ms-overflow-style": auto | none | scrollbar | -ms-autohiding-scrollbar
397
+ "-ms-scrollbar-3dlight-color": "<color>"
398
+ "-ms-scrollbar-arrow-color": "<color>"
399
+ "-ms-scrollbar-base-color": "<color>"
400
+ "-ms-scrollbar-darkshadow-color": "<color>"
401
+ "-ms-scrollbar-face-color": "<color>"
402
+ "-ms-scrollbar-highlight-color": "<color>"
403
+ "-ms-scrollbar-shadow-color": "<color>"
404
+ "-ms-scrollbar-track-color": "<color>"
405
+ "-ms-scroll-chaining": chained | none
406
+ "-ms-scroll-limit": "<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'>
407
+ <'-ms-scroll-limit-y-max'>"
408
+ "-ms-scroll-limit-x-max": auto | <length>
409
+ "-ms-scroll-limit-x-min": "<length>"
410
+ "-ms-scroll-limit-y-max": auto | <length>
411
+ "-ms-scroll-limit-y-min": "<length>"
412
+ "-ms-scroll-rails": none | railed
413
+ "-ms-scroll-snap-points-x": snapInterval( <length-percentage>, <length-percentage>
414
+ ) | snapList( <length-percentage># )
415
+ "-ms-scroll-snap-points-y": snapInterval( <length-percentage>, <length-percentage>
416
+ ) | snapList( <length-percentage># )
417
+ "-ms-scroll-snap-type": none | proximity | mandatory
418
+ "-ms-scroll-snap-x": "<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>"
419
+ "-ms-scroll-snap-y": "<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>"
420
+ "-ms-scroll-translation": none | vertical-to-horizontal
421
+ "-ms-text-autospace": none | ideograph-alpha | ideograph-numeric | ideograph-parenthesis
422
+ | ideograph-space
423
+ "-ms-touch-select": grippers | none
424
+ "-ms-user-select": none | element | text
425
+ "-ms-wrap-flow": auto | both | start | end | maximum | clear
426
+ "-ms-wrap-margin": "<length>"
427
+ "-ms-wrap-through": wrap | none
428
+ "-moz-appearance": none | button | button-arrow-down | button-arrow-next | button-arrow-previous
429
+ | button-arrow-up | button-bevel | button-focus | caret | checkbox | checkbox-container
430
+ | checkbox-label | checkmenuitem | dualbutton | groupbox | listbox | listitem |
431
+ menuarrow | menubar | menucheckbox | menuimage | menuitem | menuitemtext | menulist
432
+ | menulist-button | menulist-text | menulist-textfield | menupopup | menuradio |
433
+ menuseparator | meterbar | meterchunk | progressbar | progressbar-vertical | progresschunk
434
+ | progresschunk-vertical | radio | radio-container | radio-label | radiomenuitem
435
+ | range | range-thumb | resizer | resizerpanel | scale-horizontal | scalethumbend
436
+ | scalethumb-horizontal | scalethumbstart | scalethumbtick | scalethumb-vertical
437
+ | scale-vertical | scrollbarbutton-down | scrollbarbutton-left | scrollbarbutton-right
438
+ | scrollbarbutton-up | scrollbarthumb-horizontal | scrollbarthumb-vertical | scrollbartrack-horizontal
439
+ | scrollbartrack-vertical | searchfield | separator | sheet | spinner | spinner-downbutton
440
+ | spinner-textfield | spinner-upbutton | splitter | statusbar | statusbarpanel |
441
+ tab | tabpanel | tabpanels | tab-scroll-arrow-back | tab-scroll-arrow-forward |
442
+ textfield | textfield-multiline | toolbar | toolbarbutton | toolbarbutton-dropdown
443
+ | toolbargripper | toolbox | tooltip | treeheader | treeheadercell | treeheadersortarrow
444
+ | treeitem | treeline | treetwisty | treetwistyopen | treeview | -moz-mac-unified-toolbar
445
+ | -moz-win-borderless-glass | -moz-win-browsertabbar-toolbox | -moz-win-communicationstext
446
+ | -moz-win-communications-toolbox | -moz-win-exclude-glass | -moz-win-glass | -moz-win-mediatext
447
+ | -moz-win-media-toolbox | -moz-window-button-box | -moz-window-button-box-maximized
448
+ | -moz-window-button-close | -moz-window-button-maximize | -moz-window-button-minimize
449
+ | -moz-window-button-restore | -moz-window-frame-bottom | -moz-window-frame-left
450
+ | -moz-window-frame-right | -moz-window-titlebar | -moz-window-titlebar-maximized
451
+ "-moz-binding": "<url> | none"
452
+ "-moz-border-bottom-colors": "<color>+ | none"
453
+ "-moz-border-left-colors": "<color>+ | none"
454
+ "-moz-border-right-colors": "<color>+ | none"
455
+ "-moz-border-top-colors": "<color>+ | none"
456
+ "-moz-context-properties": none | [ fill | fill-opacity | stroke | stroke-opacity
457
+ ]#
458
+ "-moz-float-edge": border-box | content-box | margin-box | padding-box
459
+ "-moz-force-broken-image-icon": 0 | 1
460
+ "-moz-image-region": "<shape> | auto"
461
+ "-moz-orient": inline | block | horizontal | vertical
462
+ "-moz-outline-radius": "<outline-radius>{1,4} [ / <outline-radius>{1,4} ]?"
463
+ "-moz-outline-radius-bottomleft": "<outline-radius>"
464
+ "-moz-outline-radius-bottomright": "<outline-radius>"
465
+ "-moz-outline-radius-topleft": "<outline-radius>"
466
+ "-moz-outline-radius-topright": "<outline-radius>"
467
+ "-moz-stack-sizing": ignore | stretch-to-fit
468
+ "-moz-text-blink": none | blink
469
+ "-moz-user-focus": ignore | normal | select-after | select-before | select-menu |
470
+ select-same | select-all | none
471
+ "-moz-user-input": auto | none | enabled | disabled
472
+ "-moz-user-modify": read-only | read-write | write-only
473
+ "-moz-window-dragging": drag | no-drag
474
+ "-moz-window-shadow": default | menu | tooltip | sheet | none
475
+ "-webkit-appearance": none | button | button-bevel | caret | checkbox | default-button
476
+ | inner-spin-button | listbox | listitem | media-controls-background | media-controls-fullscreen-background
477
+ | media-current-time-display | media-enter-fullscreen-button | media-exit-fullscreen-button
478
+ | media-fullscreen-button | media-mute-button | media-overlay-play-button | media-play-button
479
+ | media-seek-back-button | media-seek-forward-button | media-slider | media-sliderthumb
480
+ | media-time-remaining-display | media-toggle-closed-captions-button | media-volume-slider
481
+ | media-volume-slider-container | media-volume-sliderthumb | menulist | menulist-button
482
+ | menulist-text | menulist-textfield | meter | progress-bar | progress-bar-value
483
+ | push-button | radio | searchfield | searchfield-cancel-button | searchfield-decoration
484
+ | searchfield-results-button | searchfield-results-decoration | slider-horizontal
485
+ | slider-vertical | sliderthumb-horizontal | sliderthumb-vertical | square-button
486
+ | textarea | textfield | -apple-pay-button
487
+ "-webkit-border-before": "<'border-width'> || <'border-style'> || <color>"
488
+ "-webkit-border-before-color": "<color>"
489
+ "-webkit-border-before-style": "<'border-style'>"
490
+ "-webkit-border-before-width": "<'border-width'>"
491
+ "-webkit-box-reflect": "[ above | below | right | left ]? <length>? <image>?"
492
+ "-webkit-line-clamp": none | <integer>
493
+ "-webkit-mask": "[ <mask-reference> || <position> [ / <bg-size> ]? || <repeat-style>
494
+ || [ <box> | border | padding | content | text ] || [ <box> | border | padding |
495
+ content ] ]#"
496
+ "-webkit-mask-attachment": "<attachment>#"
497
+ "-webkit-mask-clip": "[ <box> | border | padding | content | text ]#"
498
+ "-webkit-mask-composite": "<composite-style>#"
499
+ "-webkit-mask-image": "<mask-reference>#"
500
+ "-webkit-mask-origin": "[ <box> | border | padding | content ]#"
501
+ "-webkit-mask-position": "<position>#"
502
+ "-webkit-mask-position-x": "[ <length-percentage> | left | center | right ]#"
503
+ "-webkit-mask-position-y": "[ <length-percentage> | top | center | bottom ]#"
504
+ "-webkit-mask-repeat": "<repeat-style>#"
505
+ "-webkit-mask-repeat-x": repeat | no-repeat | space | round
506
+ "-webkit-mask-repeat-y": repeat | no-repeat | space | round
507
+ "-webkit-mask-size": "<bg-size>#"
508
+ "-webkit-overflow-scrolling": auto | touch
509
+ "-webkit-tap-highlight-color": "<color>"
510
+ "-webkit-text-fill-color": "<color>"
511
+ "-webkit-text-stroke": "<length> || <color>"
512
+ "-webkit-text-stroke-color": "<color>"
513
+ "-webkit-text-stroke-width": "<length>"
514
+ "-webkit-touch-callout": default | none
515
+ "-webkit-user-modify": read-only | read-write | read-write-plaintext-only
516
+ accent-color: auto | <color>
517
+ align-content: normal | <baseline-position> | <content-distribution> | <overflow-position>?
518
+ <content-position>
519
+ align-items: normal | stretch | <baseline-position> | [ <overflow-position>? <self-position>
520
+ ]
521
+ align-self: auto | normal | stretch | <baseline-position> | <overflow-position>? <self-position>
522
+ align-tracks: "[ normal | <baseline-position> | <content-distribution> | <overflow-position>?
523
+ <content-position> ]#"
524
+ all: initial | inherit | unset | revert
525
+ animation: "<single-animation>#"
526
+ animation-delay: "<time>#"
527
+ animation-direction: "<single-animation-direction>#"
528
+ animation-duration: "<time>#"
529
+ animation-fill-mode: "<single-animation-fill-mode>#"
530
+ animation-iteration-count: "<single-animation-iteration-count>#"
531
+ animation-name: "[ none | <keyframes-name> ]#"
532
+ animation-play-state: "<single-animation-play-state>#"
533
+ animation-timing-function: "<easing-function>#"
534
+ animation-timeline: "<single-animation-timeline>#"
535
+ appearance: none | auto | textfield | menulist-button | <compat-auto>
536
+ aspect-ratio: auto | <ratio>
537
+ azimuth: "<angle> | [ [ left-side | far-left | left | center-left | center | center-right
538
+ | right | far-right | right-side ] || behind ] | leftwards | rightwards"
539
+ backdrop-filter: none | <filter-function-list>
540
+ backface-visibility: visible | hidden
541
+ background: "[ <bg-layer> , ]* <final-bg-layer>"
542
+ background-attachment: "<attachment>#"
543
+ background-blend-mode: "<blend-mode>#"
544
+ background-clip: "<box>#"
545
+ background-color: "<color>"
546
+ background-image: "<bg-image>#"
547
+ background-origin: "<box>#"
548
+ background-position: "<bg-position>#"
549
+ background-position-x: "[ center | [ [ left | right | x-start | x-end ]? <length-percentage>?
550
+ ]! ]#"
551
+ background-position-y: "[ center | [ [ top | bottom | y-start | y-end ]? <length-percentage>?
552
+ ]! ]#"
553
+ background-repeat: "<repeat-style>#"
554
+ background-size: "<bg-size>#"
555
+ block-overflow: clip | ellipsis | <string>
556
+ block-size: "<'width'>"
557
+ border: "<line-width> || <line-style> || <color>"
558
+ border-block: "<'border-top-width'> || <'border-top-style'> || <color>"
559
+ border-block-color: "<'border-top-color'>{1,2}"
560
+ border-block-style: "<'border-top-style'>"
561
+ border-block-width: "<'border-top-width'>"
562
+ border-block-end: "<'border-top-width'> || <'border-top-style'> || <color>"
563
+ border-block-end-color: "<'border-top-color'>"
564
+ border-block-end-style: "<'border-top-style'>"
565
+ border-block-end-width: "<'border-top-width'>"
566
+ border-block-start: "<'border-top-width'> || <'border-top-style'> || <color>"
567
+ border-block-start-color: "<'border-top-color'>"
568
+ border-block-start-style: "<'border-top-style'>"
569
+ border-block-start-width: "<'border-top-width'>"
570
+ border-bottom: "<line-width> || <line-style> || <color>"
571
+ border-bottom-color: "<'border-top-color'>"
572
+ border-bottom-left-radius: "<length-percentage>{1,2}"
573
+ border-bottom-right-radius: "<length-percentage>{1,2}"
574
+ border-bottom-style: "<line-style>"
575
+ border-bottom-width: "<line-width>"
576
+ border-collapse: collapse | separate
577
+ border-color: "<color>{1,4}"
578
+ border-end-end-radius: "<length-percentage>{1,2}"
579
+ border-end-start-radius: "<length-percentage>{1,2}"
580
+ border-image: "<'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'>
581
+ | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>"
582
+ border-image-outset: "[ <length> | <number> ]{1,4}"
583
+ border-image-repeat: "[ stretch | repeat | round | space ]{1,2}"
584
+ border-image-slice: "<number-percentage>{1,4} && fill?"
585
+ border-image-source: none | <image>
586
+ border-image-width: "[ <length-percentage> | <number> | auto ]{1,4}"
587
+ border-inline: "<'border-top-width'> || <'border-top-style'> || <color>"
588
+ border-inline-end: "<'border-top-width'> || <'border-top-style'> || <color>"
589
+ border-inline-color: "<'border-top-color'>{1,2}"
590
+ border-inline-style: "<'border-top-style'>"
591
+ border-inline-width: "<'border-top-width'>"
592
+ border-inline-end-color: "<'border-top-color'>"
593
+ border-inline-end-style: "<'border-top-style'>"
594
+ border-inline-end-width: "<'border-top-width'>"
595
+ border-inline-start: "<'border-top-width'> || <'border-top-style'> || <color>"
596
+ border-inline-start-color: "<'border-top-color'>"
597
+ border-inline-start-style: "<'border-top-style'>"
598
+ border-inline-start-width: "<'border-top-width'>"
599
+ border-left: "<line-width> || <line-style> || <color>"
600
+ border-left-color: "<color>"
601
+ border-left-style: "<line-style>"
602
+ border-left-width: "<line-width>"
603
+ border-radius: "<length-percentage>{1,4} [ / <length-percentage>{1,4} ]?"
604
+ border-right: "<line-width> || <line-style> || <color>"
605
+ border-right-color: "<color>"
606
+ border-right-style: "<line-style>"
607
+ border-right-width: "<line-width>"
608
+ border-spacing: "<length> <length>?"
609
+ border-start-end-radius: "<length-percentage>{1,2}"
610
+ border-start-start-radius: "<length-percentage>{1,2}"
611
+ border-style: "<line-style>{1,4}"
612
+ border-top: "<line-width> || <line-style> || <color>"
613
+ border-top-color: "<color>"
614
+ border-top-left-radius: "<length-percentage>{1,2}"
615
+ border-top-right-radius: "<length-percentage>{1,2}"
616
+ border-top-style: "<line-style>"
617
+ border-top-width: "<line-width>"
618
+ border-width: "<line-width>{1,4}"
619
+ bottom: "<length> | <percentage> | auto"
620
+ box-align: start | center | end | baseline | stretch
621
+ box-decoration-break: slice | clone
622
+ box-direction: normal | reverse | inherit
623
+ box-flex: "<number>"
624
+ box-flex-group: "<integer>"
625
+ box-lines: single | multiple
626
+ box-ordinal-group: "<integer>"
627
+ box-orient: horizontal | vertical | inline-axis | block-axis | inherit
628
+ box-pack: start | center | end | justify
629
+ box-shadow: none | <shadow>#
630
+ box-sizing: content-box | border-box
631
+ break-after: auto | avoid | always | all | avoid-page | page | left | right | recto
632
+ | verso | avoid-column | column | avoid-region | region
633
+ break-before: auto | avoid | always | all | avoid-page | page | left | right | recto
634
+ | verso | avoid-column | column | avoid-region | region
635
+ break-inside: auto | avoid | avoid-page | avoid-column | avoid-region
636
+ caption-side: top | bottom | block-start | block-end | inline-start | inline-end
637
+ caret-color: auto | <color>
638
+ clear: none | left | right | both | inline-start | inline-end
639
+ clip: "<shape> | auto"
640
+ clip-path: "<clip-source> | [ <basic-shape> || <geometry-box> ] | none"
641
+ color: "<color>"
642
+ print-color-adjust: economy | exact
643
+ color-scheme: normal | [ light | dark | <custom-ident> ]+ && only?
644
+ column-count: "<integer> | auto"
645
+ column-fill: auto | balance | balance-all
646
+ column-gap: normal | <length-percentage>
647
+ column-rule: "<'column-rule-width'> || <'column-rule-style'> || <'column-rule-color'>"
648
+ column-rule-color: "<color>"
649
+ column-rule-style: "<'border-style'>"
650
+ column-rule-width: "<'border-width'>"
651
+ column-span: none | all
652
+ column-width: "<length> | auto"
653
+ columns: "<'column-width'> || <'column-count'>"
654
+ contain: none | strict | content | [ size || layout || style || paint ]
655
+ content: normal | none | [ <content-replacement> | <content-list> ] [/ [ <string>
656
+ | <counter> ]+ ]?
657
+ content-visibility: visible | auto | hidden
658
+ counter-increment: "[ <counter-name> <integer>? ]+ | none"
659
+ counter-reset: "[ <counter-name> <integer>? | <reversed-counter-name> <integer>? ]+
660
+ | none"
661
+ counter-set: "[ <counter-name> <integer>? ]+ | none"
662
+ cursor: "[ [ <url> [ <x> <y> ]? , ]* [ auto | default | none | context-menu | help
663
+ | pointer | progress | wait | cell | crosshair | text | vertical-text | alias |
664
+ copy | move | no-drop | not-allowed | e-resize | n-resize | ne-resize | nw-resize
665
+ | s-resize | se-resize | sw-resize | w-resize | ew-resize | ns-resize | nesw-resize
666
+ | nwse-resize | col-resize | row-resize | all-scroll | zoom-in | zoom-out | grab
667
+ | grabbing ] ]"
668
+ direction: ltr | rtl
669
+ display: "[ <display-outside> || <display-inside> ] | <display-listitem> | <display-internal>
670
+ | <display-box> | <display-legacy>"
671
+ empty-cells: show | hide
672
+ filter: none | <filter-function-list>
673
+ flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
674
+ flex-basis: content | <'width'>
675
+ flex-direction: row | row-reverse | column | column-reverse
676
+ flex-flow: "<'flex-direction'> || <'flex-wrap'>"
677
+ flex-grow: "<number>"
678
+ flex-shrink: "<number>"
679
+ flex-wrap: nowrap | wrap | wrap-reverse
680
+ float: left | right | none | inline-start | inline-end
681
+ font: "[ [ <'font-style'> || <font-variant-css21> || <'font-weight'> || <'font-stretch'>
682
+ ]? <'font-size'> [ / <'line-height'> ]? <'font-family'> ] | caption | icon | menu
683
+ | message-box | small-caption | status-bar"
684
+ font-family: "[ <family-name> | <generic-family> ]#"
685
+ font-feature-settings: normal | <feature-tag-value>#
686
+ font-kerning: auto | normal | none
687
+ font-language-override: normal | <string>
688
+ font-optical-sizing: auto | none
689
+ font-variation-settings: normal | [ <string> <number> ]#
690
+ font-size: "<absolute-size> | <relative-size> | <length-percentage>"
691
+ font-size-adjust: none | [ ex-height | cap-height | ch-width | ic-width | ic-height
692
+ ]? [ from-font | <number> ]
693
+ font-smooth: auto | never | always | <absolute-size> | <length>
694
+ font-stretch: "<font-stretch-absolute>"
695
+ font-style: normal | italic | oblique <angle>?
696
+ font-synthesis: none | [ weight || style || small-caps ]
697
+ font-variant: normal | none | [ <common-lig-values> || <discretionary-lig-values>
698
+ || <historical-lig-values> || <contextual-alt-values> || stylistic( <feature-value-name>
699
+ ) || historical-forms || styleset( <feature-value-name># ) || character-variant(
700
+ <feature-value-name># ) || swash( <feature-value-name> ) || ornaments( <feature-value-name>
701
+ ) || annotation( <feature-value-name> ) || [ small-caps | all-small-caps | petite-caps
702
+ | all-petite-caps | unicase | titling-caps ] || <numeric-figure-values> || <numeric-spacing-values>
703
+ || <numeric-fraction-values> || ordinal || slashed-zero || <east-asian-variant-values>
704
+ || <east-asian-width-values> || ruby ]
705
+ font-variant-alternates: normal | [ stylistic( <feature-value-name> ) || historical-forms
706
+ || styleset( <feature-value-name># ) || character-variant( <feature-value-name>#
707
+ ) || swash( <feature-value-name> ) || ornaments( <feature-value-name> ) || annotation(
708
+ <feature-value-name> ) ]
709
+ font-variant-caps: normal | small-caps | all-small-caps | petite-caps | all-petite-caps
710
+ | unicase | titling-caps
711
+ font-variant-east-asian: normal | [ <east-asian-variant-values> || <east-asian-width-values>
712
+ || ruby ]
713
+ font-variant-ligatures: normal | none | [ <common-lig-values> || <discretionary-lig-values>
714
+ || <historical-lig-values> || <contextual-alt-values> ]
715
+ font-variant-numeric: normal | [ <numeric-figure-values> || <numeric-spacing-values>
716
+ || <numeric-fraction-values> || ordinal || slashed-zero ]
717
+ font-variant-position: normal | sub | super
718
+ font-weight: "<font-weight-absolute> | bolder | lighter"
719
+ forced-color-adjust: auto | none
720
+ gap: "<'row-gap'> <'column-gap'>?"
721
+ grid: "<'grid-template'> | <'grid-template-rows'> / [ auto-flow && dense? ] <'grid-auto-columns'>?
722
+ | [ auto-flow && dense? ] <'grid-auto-rows'>? / <'grid-template-columns'>"
723
+ grid-area: "<grid-line> [ / <grid-line> ]{0,3}"
724
+ grid-auto-columns: "<track-size>+"
725
+ grid-auto-flow: "[ row | column ] || dense"
726
+ grid-auto-rows: "<track-size>+"
727
+ grid-column: "<grid-line> [ / <grid-line> ]?"
728
+ grid-column-end: "<grid-line>"
729
+ grid-column-gap: "<length-percentage>"
730
+ grid-column-start: "<grid-line>"
731
+ grid-gap: "<'grid-row-gap'> <'grid-column-gap'>?"
732
+ grid-row: "<grid-line> [ / <grid-line> ]?"
733
+ grid-row-end: "<grid-line>"
734
+ grid-row-gap: "<length-percentage>"
735
+ grid-row-start: "<grid-line>"
736
+ grid-template: none | [ <'grid-template-rows'> / <'grid-template-columns'> ] | [ <line-names>?
737
+ <string> <track-size>? <line-names>? ]+ [ / <explicit-track-list> ]?
738
+ grid-template-areas: none | <string>+
739
+ grid-template-columns: none | <track-list> | <auto-track-list> | subgrid <line-name-list>?
740
+ grid-template-rows: none | <track-list> | <auto-track-list> | subgrid <line-name-list>?
741
+ hanging-punctuation: none | [ first || [ force-end | allow-end ] || last ]
742
+ height: auto | <length> | <percentage> | min-content | max-content | fit-content |
743
+ fit-content(<length-percentage>)
744
+ hyphenate-character: auto | <string>
745
+ hyphens: none | manual | auto
746
+ image-orientation: from-image | <angle> | [ <angle>? flip ]
747
+ image-rendering: auto | crisp-edges | pixelated
748
+ image-resolution: "[ from-image || <resolution> ] && snap?"
749
+ ime-mode: auto | normal | active | inactive | disabled
750
+ initial-letter: normal | [ <number> <integer>? ]
751
+ initial-letter-align: "[ auto | alphabetic | hanging | ideographic ]"
752
+ inline-size: "<'width'>"
753
+ input-security: auto | none
754
+ inset: "<'top'>{1,4}"
755
+ inset-block: "<'top'>{1,2}"
756
+ inset-block-end: "<'top'>"
757
+ inset-block-start: "<'top'>"
758
+ inset-inline: "<'top'>{1,2}"
759
+ inset-inline-end: "<'top'>"
760
+ inset-inline-start: "<'top'>"
761
+ isolation: auto | isolate
762
+ justify-content: normal | <content-distribution> | <overflow-position>? [ <content-position>
763
+ | left | right ]
764
+ justify-items: normal | stretch | <baseline-position> | <overflow-position>? [ <self-position>
765
+ | left | right ] | legacy | legacy && [ left | right | center ]
766
+ justify-self: auto | normal | stretch | <baseline-position> | <overflow-position>?
767
+ [ <self-position> | left | right ]
768
+ justify-tracks: "[ normal | <content-distribution> | <overflow-position>? [ <content-position>
769
+ | left | right ] ]#"
770
+ left: "<length> | <percentage> | auto"
771
+ letter-spacing: normal | <length>
772
+ line-break: auto | loose | normal | strict | anywhere
773
+ line-clamp: none | <integer>
774
+ line-height: normal | <number> | <length> | <percentage>
775
+ line-height-step: "<length>"
776
+ list-style: "<'list-style-type'> || <'list-style-position'> || <'list-style-image'>"
777
+ list-style-image: "<image> | none"
778
+ list-style-position: inside | outside
779
+ list-style-type: "<counter-style> | <string> | none"
780
+ margin: "[ <length> | <percentage> | auto ]{1,4}"
781
+ margin-block: "<'margin-left'>{1,2}"
782
+ margin-block-end: "<'margin-left'>"
783
+ margin-block-start: "<'margin-left'>"
784
+ margin-bottom: "<length> | <percentage> | auto"
785
+ margin-inline: "<'margin-left'>{1,2}"
786
+ margin-inline-end: "<'margin-left'>"
787
+ margin-inline-start: "<'margin-left'>"
788
+ margin-left: "<length> | <percentage> | auto"
789
+ margin-right: "<length> | <percentage> | auto"
790
+ margin-top: "<length> | <percentage> | auto"
791
+ margin-trim: none | in-flow | all
792
+ mask: "<mask-layer>#"
793
+ mask-border: "<'mask-border-source'> || <'mask-border-slice'> [ / <'mask-border-width'>?
794
+ [ / <'mask-border-outset'> ]? ]? || <'mask-border-repeat'> || <'mask-border-mode'>"
795
+ mask-border-mode: luminance | alpha
796
+ mask-border-outset: "[ <length> | <number> ]{1,4}"
797
+ mask-border-repeat: "[ stretch | repeat | round | space ]{1,2}"
798
+ mask-border-slice: "<number-percentage>{1,4} fill?"
799
+ mask-border-source: none | <image>
800
+ mask-border-width: "[ <length-percentage> | <number> | auto ]{1,4}"
801
+ mask-clip: "[ <geometry-box> | no-clip ]#"
802
+ mask-composite: "<compositing-operator>#"
803
+ mask-image: "<mask-reference>#"
804
+ mask-mode: "<masking-mode>#"
805
+ mask-origin: "<geometry-box>#"
806
+ mask-position: "<position>#"
807
+ mask-repeat: "<repeat-style>#"
808
+ mask-size: "<bg-size>#"
809
+ mask-type: luminance | alpha
810
+ masonry-auto-flow: "[ pack | next ] || [ definite-first | ordered ]"
811
+ math-style: normal | compact
812
+ max-block-size: "<'max-width'>"
813
+ max-height: none | <length-percentage> | min-content | max-content | fit-content |
814
+ fit-content(<length-percentage>)
815
+ max-inline-size: "<'max-width'>"
816
+ max-lines: none | <integer>
817
+ max-width: none | <length-percentage> | min-content | max-content | fit-content |
818
+ fit-content(<length-percentage>)
819
+ min-block-size: "<'min-width'>"
820
+ min-height: auto | <length> | <percentage> | min-content | max-content | fit-content
821
+ | fit-content(<length-percentage>)
822
+ min-inline-size: "<'min-width'>"
823
+ min-width: auto | <length> | <percentage> | min-content | max-content | fit-content
824
+ | fit-content(<length-percentage>)
825
+ mix-blend-mode: "<blend-mode>"
826
+ object-fit: fill | contain | cover | none | scale-down
827
+ object-position: "<position>"
828
+ offset: "[ <'offset-position'>? [ <'offset-path'> [ <'offset-distance'> || <'offset-rotate'>
829
+ ]? ]? ]! [ / <'offset-anchor'> ]?"
830
+ offset-anchor: auto | <position>
831
+ offset-distance: "<length-percentage>"
832
+ offset-path: none | ray( [ <angle> && <size> && contain? ] ) | <path()> | <url> |
833
+ [ <basic-shape> || <geometry-box> ]
834
+ offset-position: auto | <position>
835
+ offset-rotate: "[ auto | reverse ] || <angle>"
836
+ opacity: "<alpha-value>"
837
+ order: "<integer>"
838
+ orphans: "<integer>"
839
+ outline: "[ <'outline-color'> || <'outline-style'> || <'outline-width'> ]"
840
+ outline-color: "<color> | invert"
841
+ outline-offset: "<length>"
842
+ outline-style: auto | <'border-style'>
843
+ outline-width: "<line-width>"
844
+ overflow: "[ visible | hidden | clip | scroll | auto ]{1,2}"
845
+ overflow-anchor: auto | none
846
+ overflow-block: visible | hidden | clip | scroll | auto
847
+ overflow-clip-box: padding-box | content-box
848
+ overflow-clip-margin: "<visual-box> || <length [0,∞]>"
849
+ overflow-inline: visible | hidden | clip | scroll | auto
850
+ overflow-wrap: normal | break-word | anywhere
851
+ overflow-x: visible | hidden | clip | scroll | auto
852
+ overflow-y: visible | hidden | clip | scroll | auto
853
+ overscroll-behavior: "[ contain | none | auto ]{1,2}"
854
+ overscroll-behavior-block: contain | none | auto
855
+ overscroll-behavior-inline: contain | none | auto
856
+ overscroll-behavior-x: contain | none | auto
857
+ overscroll-behavior-y: contain | none | auto
858
+ padding: "[ <length> | <percentage> ]{1,4}"
859
+ padding-block: "<'padding-left'>{1,2}"
860
+ padding-block-end: "<'padding-left'>"
861
+ padding-block-start: "<'padding-left'>"
862
+ padding-bottom: "<length> | <percentage>"
863
+ padding-inline: "<'padding-left'>{1,2}"
864
+ padding-inline-end: "<'padding-left'>"
865
+ padding-inline-start: "<'padding-left'>"
866
+ padding-left: "<length> | <percentage>"
867
+ padding-right: "<length> | <percentage>"
868
+ padding-top: "<length> | <percentage>"
869
+ page-break-after: auto | always | avoid | left | right | recto | verso
870
+ page-break-before: auto | always | avoid | left | right | recto | verso
871
+ page-break-inside: auto | avoid
872
+ paint-order: normal | [ fill || stroke || markers ]
873
+ perspective: none | <length>
874
+ perspective-origin: "<position>"
875
+ place-content: "<'align-content'> <'justify-content'>?"
876
+ place-items: "<'align-items'> <'justify-items'>?"
877
+ place-self: "<'align-self'> <'justify-self'>?"
878
+ pointer-events: auto | none | visiblePainted | visibleFill | visibleStroke | visible
879
+ | painted | fill | stroke | all | inherit
880
+ position: static | relative | absolute | sticky | fixed
881
+ quotes: none | auto | [ <string> <string> ]+
882
+ resize: none | both | horizontal | vertical | block | inline
883
+ right: "<length> | <percentage> | auto"
884
+ rotate: none | <angle> | [ x | y | z | <number>{3} ] && <angle>
885
+ row-gap: normal | <length-percentage>
886
+ ruby-align: start | center | space-between | space-around
887
+ ruby-merge: separate | collapse | auto
888
+ ruby-position: "[ alternate || [ over | under ] ] | inter-character"
889
+ scale: none | <number>{1,3}
890
+ scrollbar-color: auto | <color>{2}
891
+ scrollbar-gutter: auto | stable && both-edges?
892
+ scrollbar-width: auto | thin | none
893
+ scroll-behavior: auto | smooth
894
+ scroll-margin: "<length>{1,4}"
895
+ scroll-margin-block: "<length>{1,2}"
896
+ scroll-margin-block-start: "<length>"
897
+ scroll-margin-block-end: "<length>"
898
+ scroll-margin-bottom: "<length>"
899
+ scroll-margin-inline: "<length>{1,2}"
900
+ scroll-margin-inline-start: "<length>"
901
+ scroll-margin-inline-end: "<length>"
902
+ scroll-margin-left: "<length>"
903
+ scroll-margin-right: "<length>"
904
+ scroll-margin-top: "<length>"
905
+ scroll-padding: "[ auto | <length-percentage> ]{1,4}"
906
+ scroll-padding-block: "[ auto | <length-percentage> ]{1,2}"
907
+ scroll-padding-block-start: auto | <length-percentage>
908
+ scroll-padding-block-end: auto | <length-percentage>
909
+ scroll-padding-bottom: auto | <length-percentage>
910
+ scroll-padding-inline: "[ auto | <length-percentage> ]{1,2}"
911
+ scroll-padding-inline-start: auto | <length-percentage>
912
+ scroll-padding-inline-end: auto | <length-percentage>
913
+ scroll-padding-left: auto | <length-percentage>
914
+ scroll-padding-right: auto | <length-percentage>
915
+ scroll-padding-top: auto | <length-percentage>
916
+ scroll-snap-align: "[ none | start | end | center ]{1,2}"
917
+ scroll-snap-coordinate: none | <position>#
918
+ scroll-snap-destination: "<position>"
919
+ scroll-snap-points-x: none | repeat( <length-percentage> )
920
+ scroll-snap-points-y: none | repeat( <length-percentage> )
921
+ scroll-snap-stop: normal | always
922
+ scroll-snap-type: none | [ x | y | block | inline | both ] [ mandatory | proximity
923
+ ]?
924
+ scroll-snap-type-x: none | mandatory | proximity
925
+ scroll-snap-type-y: none | mandatory | proximity
926
+ shape-image-threshold: "<alpha-value>"
927
+ shape-margin: "<length-percentage>"
928
+ shape-outside: none | [ <shape-box> || <basic-shape> ] | <image>
929
+ tab-size: "<integer> | <length>"
930
+ table-layout: auto | fixed
931
+ text-align: start | end | left | right | center | justify | match-parent
932
+ text-align-last: auto | start | end | left | right | center | justify
933
+ text-combine-upright: none | all | [ digits <integer>? ]
934
+ text-decoration: "<'text-decoration-line'> || <'text-decoration-style'> || <'text-decoration-color'>
935
+ || <'text-decoration-thickness'>"
936
+ text-decoration-color: "<color>"
937
+ text-decoration-line: none | [ underline || overline || line-through || blink ] |
938
+ spelling-error | grammar-error
939
+ text-decoration-skip: none | [ objects || [ spaces | [ leading-spaces || trailing-spaces
940
+ ] ] || edges || box-decoration ]
941
+ text-decoration-skip-ink: auto | all | none
942
+ text-decoration-style: solid | double | dotted | dashed | wavy
943
+ text-decoration-thickness: 'auto | from-font | <length> | <percentage> '
944
+ text-emphasis: "<'text-emphasis-style'> || <'text-emphasis-color'>"
945
+ text-emphasis-color: "<color>"
946
+ text-emphasis-position: "[ over | under ] && [ right | left ]"
947
+ text-emphasis-style: none | [ [ filled | open ] || [ dot | circle | double-circle
948
+ | triangle | sesame ] ] | <string>
949
+ text-indent: "<length-percentage> && hanging? && each-line?"
950
+ text-justify: auto | inter-character | inter-word | none
951
+ text-orientation: mixed | upright | sideways
952
+ text-overflow: "[ clip | ellipsis | <string> ]{1,2}"
953
+ text-rendering: auto | optimizeSpeed | optimizeLegibility | geometricPrecision
954
+ text-shadow: none | <shadow-t>#
955
+ text-size-adjust: none | auto | <percentage>
956
+ text-transform: none | capitalize | uppercase | lowercase | full-width | full-size-kana
957
+ text-underline-offset: 'auto | <length> | <percentage> '
958
+ text-underline-position: auto | from-font | [ under || [ left | right ] ]
959
+ top: "<length> | <percentage> | auto"
960
+ touch-action: auto | none | [ [ pan-x | pan-left | pan-right ] || [ pan-y | pan-up
961
+ | pan-down ] || pinch-zoom ] | manipulation
962
+ transform: none | <transform-list>
963
+ transform-box: content-box | border-box | fill-box | stroke-box | view-box
964
+ transform-origin: "[ <length-percentage> | left | center | right | top | bottom ]
965
+ | [ [ <length-percentage> | left | center | right ] && [ <length-percentage> | top
966
+ | center | bottom ] ] <length>?"
967
+ transform-style: flat | preserve-3d
968
+ transition: "<single-transition>#"
969
+ transition-delay: "<time>#"
970
+ transition-duration: "<time>#"
971
+ transition-property: none | <single-transition-property>#
972
+ transition-timing-function: "<easing-function>#"
973
+ translate: none | <length-percentage> [ <length-percentage> <length>? ]?
974
+ unicode-bidi: normal | embed | isolate | bidi-override | isolate-override | plaintext
975
+ user-select: auto | text | none | contain | all
976
+ vertical-align: baseline | sub | super | text-top | text-bottom | middle | top | bottom
977
+ | <percentage> | <length>
978
+ visibility: visible | hidden | collapse
979
+ white-space: normal | pre | nowrap | pre-wrap | pre-line | break-spaces
980
+ widows: "<integer>"
981
+ width: auto | <length> | <percentage> | min-content | max-content | fit-content |
982
+ fit-content(<length-percentage>)
983
+ will-change: auto | <animateable-feature>#
984
+ word-break: normal | break-all | keep-all | break-word
985
+ word-spacing: normal | <length>
986
+ word-wrap: normal | break-word
987
+ writing-mode: horizontal-tb | vertical-rl | vertical-lr | sideways-rl | sideways-lr
988
+ z-index: auto | <integer>
989
+ zoom: normal | reset | <number> | <percentage>
990
+
991
+ src: "[ <url> [ format( <string># ) ]? | local( <family-name> ) ]#"
992
+ -epub-hyphens: "none | manual | auto"
993
+ -epub-line-break: "auto | loose | normal | strict"
994
+ -epub-text-align-last: "auto | start | end | left | right | center | justify"
995
+ -epub-word-break: "normal | keep-all | break-all"
996
+
997
+ --shorthand-background: "<'background-color'> || <'background-image'> || <'background-repeat'> || <'background-attachment'> || <'background-position'> [ / <'background-size'>]?"
998
+ --shorthand-font: "[[<'font-style'> || <'font-variant'> || <'font-weight'>]? <'font-size'> [ / <'line-height'>]? <'font-family'>] | caption | icon | menu | message-box | small-caption | status-bar"
999
+ --shorthand-list-style: "<'list-style-type'> || <'list-style-position'> || <'list-style-image'>"
1000
+ --shorthand-border: "<'border-width'> || <'border-style'> || <'border-color'>"
1001
+ --shorthand-border-top: "<'border-width'> || <'border-style'> || <'border-color'>"
1002
+ --shorthand-border-bottom: "<'border-width'> || <'border-style'> || <'border-color'>"
1003
+ --shorthand-border-left: "<'border-width'> || <'border-style'> || <'border-color'>"
1004
+ --shorthand-border-right: "<'border-width'> || <'border-style'> || <'border-color'>"
1005
+ --shorthand-border-width: "<'border-width'>"
1006
+ --shorthand-border-style: "<'border-style'>"
1007
+ --shorthand-border-color: "<'border-color'>"
@@ -10,7 +10,7 @@ src/katana-parser/parser.c src/katana-parser/selector.c src/katana-parser/tokeni
10
10
  src/rb_katana_array.c src/rb_katana_selector.c src/rb_katana_declaration.c src/rb_katana_rule.c src/rb_katana.c
11
11
  }
12
12
 
13
- $INCFLAGS << " -I$(srcdir)/src"
13
+ $INCFLAGS << " -std=c99 -I$(srcdir)/src"
14
14
 
15
15
  # add folder, where compiler can search source files
16
16
  $VPATH << "$(srcdir)/src"
@@ -98,8 +98,8 @@ module Habaki
98
98
  props[match.reference] << match.value
99
99
  end
100
100
 
101
- props.each do |k, v|
102
- new_decl = add_by_property(k, Values.new([v].flatten))
101
+ props.each do |prop, values|
102
+ new_decl = add_by_property(prop, values)
103
103
  new_decl.position = declaration.position
104
104
  end
105
105
 
@@ -122,10 +122,10 @@ module Habaki
122
122
  border_style_properties = %w[border-width border-style border-color]
123
123
 
124
124
  border_style_properties.each do |prop|
125
- create_shorthand_properties! prop unless find_by_property(prop)
125
+ create_shorthand_properties! prop unless has_property?(prop)
126
126
  end
127
127
 
128
- create_shorthand_properties! 'border' if border_style_properties.map{|prop| find_by_property(prop)}.all?
128
+ create_shorthand_properties! 'border' if border_style_properties.map{|prop| has_property?(prop)}.all?
129
129
  end
130
130
 
131
131
  # Looks for long format CSS background properties (e.g. <tt>background-color</tt>) and
@@ -159,15 +159,37 @@ module Habaki
159
159
  create_shorthand_properties! 'list-style'
160
160
  end
161
161
 
162
+ def self.shorthand_properties(shorthand_property)
163
+ nodes = []
164
+ FormalSyntax::Tree.tree.property("--shorthand-"+shorthand_property).traverse do |node|
165
+ nodes << {type: node.type, value: node.value, next_value: node.parent&.children&.last&.value} if [:ref, :token].include?(node.type)
166
+ end
167
+ nodes
168
+ end
169
+
170
+ PRECOMPUTED_SHORTHAND_PROPS = {
171
+ "background" => shorthand_properties("background"),
172
+ "font" => shorthand_properties("font"),
173
+ "list-style" => shorthand_properties("list-style"),
174
+ "border" => shorthand_properties("border"),
175
+ "border-top" => shorthand_properties("border-top"),
176
+ "border-bottom" => shorthand_properties("border-bottom"),
177
+ "border-left" => shorthand_properties("border-left"),
178
+ "border-right" => shorthand_properties("border-right"),
179
+ "border-width" => shorthand_properties("border-width"),
180
+ "border-style" => shorthand_properties("border-style"),
181
+ "border-color" => shorthand_properties("border-color"),
182
+ }
183
+
162
184
  # Combine several properties into a shorthand one
163
185
  def create_shorthand_properties!(shorthand_property, need_all = false)
164
186
  properties_to_delete = []
165
-
166
187
  new_values = []
167
- FormalSyntax::Tree.tree.property("--shorthand-"+shorthand_property).traverse do |node|
168
- case node.type
188
+
189
+ PRECOMPUTED_SHORTHAND_PROPS[shorthand_property].each do |node|
190
+ case node[:type]
169
191
  when :ref
170
- decl = find_by_property(node.value)
192
+ decl = find_by_property(node[:value])
171
193
  if decl
172
194
  properties_to_delete << decl.property
173
195
  new_values += decl.values
@@ -176,7 +198,7 @@ module Habaki
176
198
  end
177
199
  when :token
178
200
  # only if next node property is present (line-height, background-size)
179
- new_values << Operator.new(node.value) if node.parent&.children&.last&.value && find_by_property(node.parent.children.last.value)
201
+ new_values << Operator.new(node[:value]) if node[:next_value] && has_property?(node[:next_value])
180
202
  end
181
203
  end
182
204
 
@@ -251,11 +273,6 @@ module Habaki
251
273
  decls
252
274
  end
253
275
 
254
- def push_declaration(decl)
255
- @hash[decl.property] = decl
256
- push decl
257
- end
258
-
259
276
  # Parse inline declarations and append to current declarations
260
277
  # @param [String] data
261
278
  # @return [void]
@@ -268,6 +285,12 @@ module Habaki
268
285
  end
269
286
  end
270
287
 
288
+ # Does declaration with property present ?
289
+ # @return [Boolean]
290
+ def has_property?(property)
291
+ @hash.has_key?(property)
292
+ end
293
+
271
294
  # Find declaration with property
272
295
  # @param [String] property
273
296
  # @return [Declaration]
@@ -342,5 +365,13 @@ module Habaki
342
365
  push_declaration Declaration.read_from_katana(decl)
343
366
  end
344
367
  end
368
+
369
+ private
370
+
371
+ def push_declaration(decl)
372
+ @hash[decl.property] = decl
373
+ push decl
374
+ end
375
+
345
376
  end
346
377
  end
@@ -67,7 +67,7 @@ module Habaki
67
67
  when :token
68
68
  str += @value
69
69
  when :ref
70
- str += "'#{@value}'"
70
+ str += "<'#{@value}'>"
71
71
  when :type
72
72
  str += "<#{@value}>"
73
73
  else
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: habaki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julien Boulnois
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-10 00:00:00.000000000 Z
11
+ date: 2022-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -28,30 +28,30 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.14'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.14'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -116,6 +116,7 @@ extensions:
116
116
  extra_rdoc_files: []
117
117
  files:
118
118
  - Gemfile
119
+ - data/formal_syntax.yml
119
120
  - ext/katana/extconf.rb
120
121
  - ext/katana/rb_katana.c
121
122
  - ext/katana/rb_katana.h