biome_css_parser 0.5.8

Biome's CSS parser
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
---
source: crates/biome_css_parser/tests/spec_test.rs
expression: snapshot
---
## Input

```css
.div > .div {}

.class > div > #id {

}

.div + .div {}

.class + div + #id {

}

.div ~ .div {}

.class ~ div ~ #id {

}

.div || .div {}

.class || div || #id {

}

.class > div + #id ~ span.class #another {

}

.div .div {}

.class  div  #id {

}

[lang|="zh"] ~ [lang|="zh"] > [lang|="zh"] {

}

```


## AST

```
CssRoot {
    bom_token: missing (optional),
    rules: CssRuleList [
        CssQualifiedRule {
            prelude: CssSelectorList [
                CssComplexSelector {
                    left: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssClassSelector {
                                dot_token: DOT@0..1 "." [] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@1..5 "div" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                    combinator: R_ANGLE@5..7 ">" [] [Whitespace(" ")],
                    right: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssClassSelector {
                                dot_token: DOT@7..8 "." [] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@8..12 "div" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                },
            ],
            block: CssDeclarationOrRuleBlock {
                l_curly_token: L_CURLY@12..13 "{" [] [],
                items: CssDeclarationOrRuleList [],
                r_curly_token: R_CURLY@13..14 "}" [] [],
            },
        },
        CssQualifiedRule {
            prelude: CssSelectorList [
                CssComplexSelector {
                    left: CssComplexSelector {
                        left: CssCompoundSelector {
                            nesting_selectors: CssNestedSelectorList [],
                            simple_selector: missing (optional),
                            sub_selectors: CssSubSelectorList [
                                CssClassSelector {
                                    dot_token: DOT@14..17 "." [Newline("\n"), Newline("\n")] [],
                                    name: CssCustomIdentifier {
                                        value_token: IDENT@17..23 "class" [] [Whitespace(" ")],
                                    },
                                },
                            ],
                        },
                        combinator: R_ANGLE@23..25 ">" [] [Whitespace(" ")],
                        right: CssCompoundSelector {
                            nesting_selectors: CssNestedSelectorList [],
                            simple_selector: CssTypeSelector {
                                namespace: missing (optional),
                                ident: CssIdentifier {
                                    value_token: IDENT@25..29 "div" [] [Whitespace(" ")],
                                },
                            },
                            sub_selectors: CssSubSelectorList [],
                        },
                    },
                    combinator: R_ANGLE@29..31 ">" [] [Whitespace(" ")],
                    right: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssIdSelector {
                                hash_token: HASH@31..32 "#" [] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@32..35 "id" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                },
            ],
            block: CssDeclarationOrRuleBlock {
                l_curly_token: L_CURLY@35..36 "{" [] [],
                items: CssDeclarationOrRuleList [],
                r_curly_token: R_CURLY@36..39 "}" [Newline("\n"), Newline("\n")] [],
            },
        },
        CssQualifiedRule {
            prelude: CssSelectorList [
                CssComplexSelector {
                    left: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssClassSelector {
                                dot_token: DOT@39..42 "." [Newline("\n"), Newline("\n")] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@42..46 "div" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                    combinator: PLUS@46..48 "+" [] [Whitespace(" ")],
                    right: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssClassSelector {
                                dot_token: DOT@48..49 "." [] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@49..53 "div" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                },
            ],
            block: CssDeclarationOrRuleBlock {
                l_curly_token: L_CURLY@53..54 "{" [] [],
                items: CssDeclarationOrRuleList [],
                r_curly_token: R_CURLY@54..55 "}" [] [],
            },
        },
        CssQualifiedRule {
            prelude: CssSelectorList [
                CssComplexSelector {
                    left: CssComplexSelector {
                        left: CssCompoundSelector {
                            nesting_selectors: CssNestedSelectorList [],
                            simple_selector: missing (optional),
                            sub_selectors: CssSubSelectorList [
                                CssClassSelector {
                                    dot_token: DOT@55..58 "." [Newline("\n"), Newline("\n")] [],
                                    name: CssCustomIdentifier {
                                        value_token: IDENT@58..64 "class" [] [Whitespace(" ")],
                                    },
                                },
                            ],
                        },
                        combinator: PLUS@64..66 "+" [] [Whitespace(" ")],
                        right: CssCompoundSelector {
                            nesting_selectors: CssNestedSelectorList [],
                            simple_selector: CssTypeSelector {
                                namespace: missing (optional),
                                ident: CssIdentifier {
                                    value_token: IDENT@66..70 "div" [] [Whitespace(" ")],
                                },
                            },
                            sub_selectors: CssSubSelectorList [],
                        },
                    },
                    combinator: PLUS@70..72 "+" [] [Whitespace(" ")],
                    right: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssIdSelector {
                                hash_token: HASH@72..73 "#" [] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@73..76 "id" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                },
            ],
            block: CssDeclarationOrRuleBlock {
                l_curly_token: L_CURLY@76..77 "{" [] [],
                items: CssDeclarationOrRuleList [],
                r_curly_token: R_CURLY@77..80 "}" [Newline("\n"), Newline("\n")] [],
            },
        },
        CssQualifiedRule {
            prelude: CssSelectorList [
                CssComplexSelector {
                    left: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssClassSelector {
                                dot_token: DOT@80..83 "." [Newline("\n"), Newline("\n")] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@83..87 "div" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                    combinator: TILDE@87..89 "~" [] [Whitespace(" ")],
                    right: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssClassSelector {
                                dot_token: DOT@89..90 "." [] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@90..94 "div" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                },
            ],
            block: CssDeclarationOrRuleBlock {
                l_curly_token: L_CURLY@94..95 "{" [] [],
                items: CssDeclarationOrRuleList [],
                r_curly_token: R_CURLY@95..96 "}" [] [],
            },
        },
        CssQualifiedRule {
            prelude: CssSelectorList [
                CssComplexSelector {
                    left: CssComplexSelector {
                        left: CssCompoundSelector {
                            nesting_selectors: CssNestedSelectorList [],
                            simple_selector: missing (optional),
                            sub_selectors: CssSubSelectorList [
                                CssClassSelector {
                                    dot_token: DOT@96..99 "." [Newline("\n"), Newline("\n")] [],
                                    name: CssCustomIdentifier {
                                        value_token: IDENT@99..105 "class" [] [Whitespace(" ")],
                                    },
                                },
                            ],
                        },
                        combinator: TILDE@105..107 "~" [] [Whitespace(" ")],
                        right: CssCompoundSelector {
                            nesting_selectors: CssNestedSelectorList [],
                            simple_selector: CssTypeSelector {
                                namespace: missing (optional),
                                ident: CssIdentifier {
                                    value_token: IDENT@107..111 "div" [] [Whitespace(" ")],
                                },
                            },
                            sub_selectors: CssSubSelectorList [],
                        },
                    },
                    combinator: TILDE@111..113 "~" [] [Whitespace(" ")],
                    right: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssIdSelector {
                                hash_token: HASH@113..114 "#" [] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@114..117 "id" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                },
            ],
            block: CssDeclarationOrRuleBlock {
                l_curly_token: L_CURLY@117..118 "{" [] [],
                items: CssDeclarationOrRuleList [],
                r_curly_token: R_CURLY@118..121 "}" [Newline("\n"), Newline("\n")] [],
            },
        },
        CssQualifiedRule {
            prelude: CssSelectorList [
                CssComplexSelector {
                    left: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssClassSelector {
                                dot_token: DOT@121..124 "." [Newline("\n"), Newline("\n")] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@124..128 "div" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                    combinator: PIPE2@128..131 "||" [] [Whitespace(" ")],
                    right: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssClassSelector {
                                dot_token: DOT@131..132 "." [] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@132..136 "div" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                },
            ],
            block: CssDeclarationOrRuleBlock {
                l_curly_token: L_CURLY@136..137 "{" [] [],
                items: CssDeclarationOrRuleList [],
                r_curly_token: R_CURLY@137..138 "}" [] [],
            },
        },
        CssQualifiedRule {
            prelude: CssSelectorList [
                CssComplexSelector {
                    left: CssComplexSelector {
                        left: CssCompoundSelector {
                            nesting_selectors: CssNestedSelectorList [],
                            simple_selector: missing (optional),
                            sub_selectors: CssSubSelectorList [
                                CssClassSelector {
                                    dot_token: DOT@138..141 "." [Newline("\n"), Newline("\n")] [],
                                    name: CssCustomIdentifier {
                                        value_token: IDENT@141..147 "class" [] [Whitespace(" ")],
                                    },
                                },
                            ],
                        },
                        combinator: PIPE2@147..150 "||" [] [Whitespace(" ")],
                        right: CssCompoundSelector {
                            nesting_selectors: CssNestedSelectorList [],
                            simple_selector: CssTypeSelector {
                                namespace: missing (optional),
                                ident: CssIdentifier {
                                    value_token: IDENT@150..154 "div" [] [Whitespace(" ")],
                                },
                            },
                            sub_selectors: CssSubSelectorList [],
                        },
                    },
                    combinator: PIPE2@154..157 "||" [] [Whitespace(" ")],
                    right: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssIdSelector {
                                hash_token: HASH@157..158 "#" [] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@158..161 "id" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                },
            ],
            block: CssDeclarationOrRuleBlock {
                l_curly_token: L_CURLY@161..162 "{" [] [],
                items: CssDeclarationOrRuleList [],
                r_curly_token: R_CURLY@162..165 "}" [Newline("\n"), Newline("\n")] [],
            },
        },
        CssQualifiedRule {
            prelude: CssSelectorList [
                CssComplexSelector {
                    left: CssComplexSelector {
                        left: CssComplexSelector {
                            left: CssComplexSelector {
                                left: CssCompoundSelector {
                                    nesting_selectors: CssNestedSelectorList [],
                                    simple_selector: missing (optional),
                                    sub_selectors: CssSubSelectorList [
                                        CssClassSelector {
                                            dot_token: DOT@165..168 "." [Newline("\n"), Newline("\n")] [],
                                            name: CssCustomIdentifier {
                                                value_token: IDENT@168..174 "class" [] [Whitespace(" ")],
                                            },
                                        },
                                    ],
                                },
                                combinator: R_ANGLE@174..176 ">" [] [Whitespace(" ")],
                                right: CssCompoundSelector {
                                    nesting_selectors: CssNestedSelectorList [],
                                    simple_selector: CssTypeSelector {
                                        namespace: missing (optional),
                                        ident: CssIdentifier {
                                            value_token: IDENT@176..180 "div" [] [Whitespace(" ")],
                                        },
                                    },
                                    sub_selectors: CssSubSelectorList [],
                                },
                            },
                            combinator: PLUS@180..182 "+" [] [Whitespace(" ")],
                            right: CssCompoundSelector {
                                nesting_selectors: CssNestedSelectorList [],
                                simple_selector: missing (optional),
                                sub_selectors: CssSubSelectorList [
                                    CssIdSelector {
                                        hash_token: HASH@182..183 "#" [] [],
                                        name: CssCustomIdentifier {
                                            value_token: IDENT@183..186 "id" [] [Whitespace(" ")],
                                        },
                                    },
                                ],
                            },
                        },
                        combinator: TILDE@186..188 "~" [] [Whitespace(" ")],
                        right: CssCompoundSelector {
                            nesting_selectors: CssNestedSelectorList [],
                            simple_selector: CssTypeSelector {
                                namespace: missing (optional),
                                ident: CssIdentifier {
                                    value_token: IDENT@188..192 "span" [] [],
                                },
                            },
                            sub_selectors: CssSubSelectorList [
                                CssClassSelector {
                                    dot_token: DOT@192..193 "." [] [],
                                    name: CssCustomIdentifier {
                                        value_token: IDENT@193..198 "class" [] [],
                                    },
                                },
                            ],
                        },
                    },
                    combinator: CSS_SPACE_LITERAL@198..199 " " [] [],
                    right: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssIdSelector {
                                hash_token: HASH@199..200 "#" [] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@200..208 "another" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                },
            ],
            block: CssDeclarationOrRuleBlock {
                l_curly_token: L_CURLY@208..209 "{" [] [],
                items: CssDeclarationOrRuleList [],
                r_curly_token: R_CURLY@209..212 "}" [Newline("\n"), Newline("\n")] [],
            },
        },
        CssQualifiedRule {
            prelude: CssSelectorList [
                CssComplexSelector {
                    left: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssClassSelector {
                                dot_token: DOT@212..215 "." [Newline("\n"), Newline("\n")] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@215..218 "div" [] [],
                                },
                            },
                        ],
                    },
                    combinator: CSS_SPACE_LITERAL@218..219 " " [] [],
                    right: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssClassSelector {
                                dot_token: DOT@219..220 "." [] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@220..224 "div" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                },
            ],
            block: CssDeclarationOrRuleBlock {
                l_curly_token: L_CURLY@224..225 "{" [] [],
                items: CssDeclarationOrRuleList [],
                r_curly_token: R_CURLY@225..226 "}" [] [],
            },
        },
        CssQualifiedRule {
            prelude: CssSelectorList [
                CssComplexSelector {
                    left: CssComplexSelector {
                        left: CssCompoundSelector {
                            nesting_selectors: CssNestedSelectorList [],
                            simple_selector: missing (optional),
                            sub_selectors: CssSubSelectorList [
                                CssClassSelector {
                                    dot_token: DOT@226..229 "." [Newline("\n"), Newline("\n")] [],
                                    name: CssCustomIdentifier {
                                        value_token: IDENT@229..234 "class" [] [],
                                    },
                                },
                            ],
                        },
                        combinator: CSS_SPACE_LITERAL@234..236 " " [] [Whitespace(" ")],
                        right: CssCompoundSelector {
                            nesting_selectors: CssNestedSelectorList [],
                            simple_selector: CssTypeSelector {
                                namespace: missing (optional),
                                ident: CssIdentifier {
                                    value_token: IDENT@236..239 "div" [] [],
                                },
                            },
                            sub_selectors: CssSubSelectorList [],
                        },
                    },
                    combinator: CSS_SPACE_LITERAL@239..241 " " [] [Whitespace(" ")],
                    right: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssIdSelector {
                                hash_token: HASH@241..242 "#" [] [],
                                name: CssCustomIdentifier {
                                    value_token: IDENT@242..245 "id" [] [Whitespace(" ")],
                                },
                            },
                        ],
                    },
                },
            ],
            block: CssDeclarationOrRuleBlock {
                l_curly_token: L_CURLY@245..246 "{" [] [],
                items: CssDeclarationOrRuleList [],
                r_curly_token: R_CURLY@246..249 "}" [Newline("\n"), Newline("\n")] [],
            },
        },
        CssQualifiedRule {
            prelude: CssSelectorList [
                CssComplexSelector {
                    left: CssComplexSelector {
                        left: CssCompoundSelector {
                            nesting_selectors: CssNestedSelectorList [],
                            simple_selector: missing (optional),
                            sub_selectors: CssSubSelectorList [
                                CssAttributeSelector {
                                    l_brack_token: L_BRACK@249..252 "[" [Newline("\n"), Newline("\n")] [],
                                    name: CssAttributeName {
                                        namespace: missing (optional),
                                        name: CssIdentifier {
                                            value_token: IDENT@252..256 "lang" [] [],
                                        },
                                    },
                                    matcher: CssAttributeMatcher {
                                        operator: PIPEEQ@256..258 "|=" [] [],
                                        value: CssAttributeMatcherValue {
                                            name: CssString {
                                                value_token: CSS_STRING_LITERAL@258..262 "\"zh\"" [] [],
                                            },
                                        },
                                        modifier: missing (optional),
                                    },
                                    r_brack_token: R_BRACK@262..264 "]" [] [Whitespace(" ")],
                                },
                            ],
                        },
                        combinator: TILDE@264..266 "~" [] [Whitespace(" ")],
                        right: CssCompoundSelector {
                            nesting_selectors: CssNestedSelectorList [],
                            simple_selector: missing (optional),
                            sub_selectors: CssSubSelectorList [
                                CssAttributeSelector {
                                    l_brack_token: L_BRACK@266..267 "[" [] [],
                                    name: CssAttributeName {
                                        namespace: missing (optional),
                                        name: CssIdentifier {
                                            value_token: IDENT@267..271 "lang" [] [],
                                        },
                                    },
                                    matcher: CssAttributeMatcher {
                                        operator: PIPEEQ@271..273 "|=" [] [],
                                        value: CssAttributeMatcherValue {
                                            name: CssString {
                                                value_token: CSS_STRING_LITERAL@273..277 "\"zh\"" [] [],
                                            },
                                        },
                                        modifier: missing (optional),
                                    },
                                    r_brack_token: R_BRACK@277..279 "]" [] [Whitespace(" ")],
                                },
                            ],
                        },
                    },
                    combinator: R_ANGLE@279..281 ">" [] [Whitespace(" ")],
                    right: CssCompoundSelector {
                        nesting_selectors: CssNestedSelectorList [],
                        simple_selector: missing (optional),
                        sub_selectors: CssSubSelectorList [
                            CssAttributeSelector {
                                l_brack_token: L_BRACK@281..282 "[" [] [],
                                name: CssAttributeName {
                                    namespace: missing (optional),
                                    name: CssIdentifier {
                                        value_token: IDENT@282..286 "lang" [] [],
                                    },
                                },
                                matcher: CssAttributeMatcher {
                                    operator: PIPEEQ@286..288 "|=" [] [],
                                    value: CssAttributeMatcherValue {
                                        name: CssString {
                                            value_token: CSS_STRING_LITERAL@288..292 "\"zh\"" [] [],
                                        },
                                    },
                                    modifier: missing (optional),
                                },
                                r_brack_token: R_BRACK@292..294 "]" [] [Whitespace(" ")],
                            },
                        ],
                    },
                },
            ],
            block: CssDeclarationOrRuleBlock {
                l_curly_token: L_CURLY@294..295 "{" [] [],
                items: CssDeclarationOrRuleList [],
                r_curly_token: R_CURLY@295..298 "}" [Newline("\n"), Newline("\n")] [],
            },
        },
    ],
    eof_token: EOF@298..299 "" [Newline("\n")] [],
}
```

## CST

```
0: CSS_ROOT@0..299
  0: (empty)
  1: CSS_RULE_LIST@0..298
    0: CSS_QUALIFIED_RULE@0..14
      0: CSS_SELECTOR_LIST@0..12
        0: CSS_COMPLEX_SELECTOR@0..12
          0: CSS_COMPOUND_SELECTOR@0..5
            0: CSS_NESTED_SELECTOR_LIST@0..0
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@0..5
              0: CSS_CLASS_SELECTOR@0..5
                0: DOT@0..1 "." [] []
                1: CSS_CUSTOM_IDENTIFIER@1..5
                  0: IDENT@1..5 "div" [] [Whitespace(" ")]
          1: R_ANGLE@5..7 ">" [] [Whitespace(" ")]
          2: CSS_COMPOUND_SELECTOR@7..12
            0: CSS_NESTED_SELECTOR_LIST@7..7
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@7..12
              0: CSS_CLASS_SELECTOR@7..12
                0: DOT@7..8 "." [] []
                1: CSS_CUSTOM_IDENTIFIER@8..12
                  0: IDENT@8..12 "div" [] [Whitespace(" ")]
      1: CSS_DECLARATION_OR_RULE_BLOCK@12..14
        0: L_CURLY@12..13 "{" [] []
        1: CSS_DECLARATION_OR_RULE_LIST@13..13
        2: R_CURLY@13..14 "}" [] []
    1: CSS_QUALIFIED_RULE@14..39
      0: CSS_SELECTOR_LIST@14..35
        0: CSS_COMPLEX_SELECTOR@14..35
          0: CSS_COMPLEX_SELECTOR@14..29
            0: CSS_COMPOUND_SELECTOR@14..23
              0: CSS_NESTED_SELECTOR_LIST@14..14
              1: (empty)
              2: CSS_SUB_SELECTOR_LIST@14..23
                0: CSS_CLASS_SELECTOR@14..23
                  0: DOT@14..17 "." [Newline("\n"), Newline("\n")] []
                  1: CSS_CUSTOM_IDENTIFIER@17..23
                    0: IDENT@17..23 "class" [] [Whitespace(" ")]
            1: R_ANGLE@23..25 ">" [] [Whitespace(" ")]
            2: CSS_COMPOUND_SELECTOR@25..29
              0: CSS_NESTED_SELECTOR_LIST@25..25
              1: CSS_TYPE_SELECTOR@25..29
                0: (empty)
                1: CSS_IDENTIFIER@25..29
                  0: IDENT@25..29 "div" [] [Whitespace(" ")]
              2: CSS_SUB_SELECTOR_LIST@29..29
          1: R_ANGLE@29..31 ">" [] [Whitespace(" ")]
          2: CSS_COMPOUND_SELECTOR@31..35
            0: CSS_NESTED_SELECTOR_LIST@31..31
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@31..35
              0: CSS_ID_SELECTOR@31..35
                0: HASH@31..32 "#" [] []
                1: CSS_CUSTOM_IDENTIFIER@32..35
                  0: IDENT@32..35 "id" [] [Whitespace(" ")]
      1: CSS_DECLARATION_OR_RULE_BLOCK@35..39
        0: L_CURLY@35..36 "{" [] []
        1: CSS_DECLARATION_OR_RULE_LIST@36..36
        2: R_CURLY@36..39 "}" [Newline("\n"), Newline("\n")] []
    2: CSS_QUALIFIED_RULE@39..55
      0: CSS_SELECTOR_LIST@39..53
        0: CSS_COMPLEX_SELECTOR@39..53
          0: CSS_COMPOUND_SELECTOR@39..46
            0: CSS_NESTED_SELECTOR_LIST@39..39
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@39..46
              0: CSS_CLASS_SELECTOR@39..46
                0: DOT@39..42 "." [Newline("\n"), Newline("\n")] []
                1: CSS_CUSTOM_IDENTIFIER@42..46
                  0: IDENT@42..46 "div" [] [Whitespace(" ")]
          1: PLUS@46..48 "+" [] [Whitespace(" ")]
          2: CSS_COMPOUND_SELECTOR@48..53
            0: CSS_NESTED_SELECTOR_LIST@48..48
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@48..53
              0: CSS_CLASS_SELECTOR@48..53
                0: DOT@48..49 "." [] []
                1: CSS_CUSTOM_IDENTIFIER@49..53
                  0: IDENT@49..53 "div" [] [Whitespace(" ")]
      1: CSS_DECLARATION_OR_RULE_BLOCK@53..55
        0: L_CURLY@53..54 "{" [] []
        1: CSS_DECLARATION_OR_RULE_LIST@54..54
        2: R_CURLY@54..55 "}" [] []
    3: CSS_QUALIFIED_RULE@55..80
      0: CSS_SELECTOR_LIST@55..76
        0: CSS_COMPLEX_SELECTOR@55..76
          0: CSS_COMPLEX_SELECTOR@55..70
            0: CSS_COMPOUND_SELECTOR@55..64
              0: CSS_NESTED_SELECTOR_LIST@55..55
              1: (empty)
              2: CSS_SUB_SELECTOR_LIST@55..64
                0: CSS_CLASS_SELECTOR@55..64
                  0: DOT@55..58 "." [Newline("\n"), Newline("\n")] []
                  1: CSS_CUSTOM_IDENTIFIER@58..64
                    0: IDENT@58..64 "class" [] [Whitespace(" ")]
            1: PLUS@64..66 "+" [] [Whitespace(" ")]
            2: CSS_COMPOUND_SELECTOR@66..70
              0: CSS_NESTED_SELECTOR_LIST@66..66
              1: CSS_TYPE_SELECTOR@66..70
                0: (empty)
                1: CSS_IDENTIFIER@66..70
                  0: IDENT@66..70 "div" [] [Whitespace(" ")]
              2: CSS_SUB_SELECTOR_LIST@70..70
          1: PLUS@70..72 "+" [] [Whitespace(" ")]
          2: CSS_COMPOUND_SELECTOR@72..76
            0: CSS_NESTED_SELECTOR_LIST@72..72
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@72..76
              0: CSS_ID_SELECTOR@72..76
                0: HASH@72..73 "#" [] []
                1: CSS_CUSTOM_IDENTIFIER@73..76
                  0: IDENT@73..76 "id" [] [Whitespace(" ")]
      1: CSS_DECLARATION_OR_RULE_BLOCK@76..80
        0: L_CURLY@76..77 "{" [] []
        1: CSS_DECLARATION_OR_RULE_LIST@77..77
        2: R_CURLY@77..80 "}" [Newline("\n"), Newline("\n")] []
    4: CSS_QUALIFIED_RULE@80..96
      0: CSS_SELECTOR_LIST@80..94
        0: CSS_COMPLEX_SELECTOR@80..94
          0: CSS_COMPOUND_SELECTOR@80..87
            0: CSS_NESTED_SELECTOR_LIST@80..80
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@80..87
              0: CSS_CLASS_SELECTOR@80..87
                0: DOT@80..83 "." [Newline("\n"), Newline("\n")] []
                1: CSS_CUSTOM_IDENTIFIER@83..87
                  0: IDENT@83..87 "div" [] [Whitespace(" ")]
          1: TILDE@87..89 "~" [] [Whitespace(" ")]
          2: CSS_COMPOUND_SELECTOR@89..94
            0: CSS_NESTED_SELECTOR_LIST@89..89
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@89..94
              0: CSS_CLASS_SELECTOR@89..94
                0: DOT@89..90 "." [] []
                1: CSS_CUSTOM_IDENTIFIER@90..94
                  0: IDENT@90..94 "div" [] [Whitespace(" ")]
      1: CSS_DECLARATION_OR_RULE_BLOCK@94..96
        0: L_CURLY@94..95 "{" [] []
        1: CSS_DECLARATION_OR_RULE_LIST@95..95
        2: R_CURLY@95..96 "}" [] []
    5: CSS_QUALIFIED_RULE@96..121
      0: CSS_SELECTOR_LIST@96..117
        0: CSS_COMPLEX_SELECTOR@96..117
          0: CSS_COMPLEX_SELECTOR@96..111
            0: CSS_COMPOUND_SELECTOR@96..105
              0: CSS_NESTED_SELECTOR_LIST@96..96
              1: (empty)
              2: CSS_SUB_SELECTOR_LIST@96..105
                0: CSS_CLASS_SELECTOR@96..105
                  0: DOT@96..99 "." [Newline("\n"), Newline("\n")] []
                  1: CSS_CUSTOM_IDENTIFIER@99..105
                    0: IDENT@99..105 "class" [] [Whitespace(" ")]
            1: TILDE@105..107 "~" [] [Whitespace(" ")]
            2: CSS_COMPOUND_SELECTOR@107..111
              0: CSS_NESTED_SELECTOR_LIST@107..107
              1: CSS_TYPE_SELECTOR@107..111
                0: (empty)
                1: CSS_IDENTIFIER@107..111
                  0: IDENT@107..111 "div" [] [Whitespace(" ")]
              2: CSS_SUB_SELECTOR_LIST@111..111
          1: TILDE@111..113 "~" [] [Whitespace(" ")]
          2: CSS_COMPOUND_SELECTOR@113..117
            0: CSS_NESTED_SELECTOR_LIST@113..113
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@113..117
              0: CSS_ID_SELECTOR@113..117
                0: HASH@113..114 "#" [] []
                1: CSS_CUSTOM_IDENTIFIER@114..117
                  0: IDENT@114..117 "id" [] [Whitespace(" ")]
      1: CSS_DECLARATION_OR_RULE_BLOCK@117..121
        0: L_CURLY@117..118 "{" [] []
        1: CSS_DECLARATION_OR_RULE_LIST@118..118
        2: R_CURLY@118..121 "}" [Newline("\n"), Newline("\n")] []
    6: CSS_QUALIFIED_RULE@121..138
      0: CSS_SELECTOR_LIST@121..136
        0: CSS_COMPLEX_SELECTOR@121..136
          0: CSS_COMPOUND_SELECTOR@121..128
            0: CSS_NESTED_SELECTOR_LIST@121..121
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@121..128
              0: CSS_CLASS_SELECTOR@121..128
                0: DOT@121..124 "." [Newline("\n"), Newline("\n")] []
                1: CSS_CUSTOM_IDENTIFIER@124..128
                  0: IDENT@124..128 "div" [] [Whitespace(" ")]
          1: PIPE2@128..131 "||" [] [Whitespace(" ")]
          2: CSS_COMPOUND_SELECTOR@131..136
            0: CSS_NESTED_SELECTOR_LIST@131..131
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@131..136
              0: CSS_CLASS_SELECTOR@131..136
                0: DOT@131..132 "." [] []
                1: CSS_CUSTOM_IDENTIFIER@132..136
                  0: IDENT@132..136 "div" [] [Whitespace(" ")]
      1: CSS_DECLARATION_OR_RULE_BLOCK@136..138
        0: L_CURLY@136..137 "{" [] []
        1: CSS_DECLARATION_OR_RULE_LIST@137..137
        2: R_CURLY@137..138 "}" [] []
    7: CSS_QUALIFIED_RULE@138..165
      0: CSS_SELECTOR_LIST@138..161
        0: CSS_COMPLEX_SELECTOR@138..161
          0: CSS_COMPLEX_SELECTOR@138..154
            0: CSS_COMPOUND_SELECTOR@138..147
              0: CSS_NESTED_SELECTOR_LIST@138..138
              1: (empty)
              2: CSS_SUB_SELECTOR_LIST@138..147
                0: CSS_CLASS_SELECTOR@138..147
                  0: DOT@138..141 "." [Newline("\n"), Newline("\n")] []
                  1: CSS_CUSTOM_IDENTIFIER@141..147
                    0: IDENT@141..147 "class" [] [Whitespace(" ")]
            1: PIPE2@147..150 "||" [] [Whitespace(" ")]
            2: CSS_COMPOUND_SELECTOR@150..154
              0: CSS_NESTED_SELECTOR_LIST@150..150
              1: CSS_TYPE_SELECTOR@150..154
                0: (empty)
                1: CSS_IDENTIFIER@150..154
                  0: IDENT@150..154 "div" [] [Whitespace(" ")]
              2: CSS_SUB_SELECTOR_LIST@154..154
          1: PIPE2@154..157 "||" [] [Whitespace(" ")]
          2: CSS_COMPOUND_SELECTOR@157..161
            0: CSS_NESTED_SELECTOR_LIST@157..157
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@157..161
              0: CSS_ID_SELECTOR@157..161
                0: HASH@157..158 "#" [] []
                1: CSS_CUSTOM_IDENTIFIER@158..161
                  0: IDENT@158..161 "id" [] [Whitespace(" ")]
      1: CSS_DECLARATION_OR_RULE_BLOCK@161..165
        0: L_CURLY@161..162 "{" [] []
        1: CSS_DECLARATION_OR_RULE_LIST@162..162
        2: R_CURLY@162..165 "}" [Newline("\n"), Newline("\n")] []
    8: CSS_QUALIFIED_RULE@165..212
      0: CSS_SELECTOR_LIST@165..208
        0: CSS_COMPLEX_SELECTOR@165..208
          0: CSS_COMPLEX_SELECTOR@165..198
            0: CSS_COMPLEX_SELECTOR@165..186
              0: CSS_COMPLEX_SELECTOR@165..180
                0: CSS_COMPOUND_SELECTOR@165..174
                  0: CSS_NESTED_SELECTOR_LIST@165..165
                  1: (empty)
                  2: CSS_SUB_SELECTOR_LIST@165..174
                    0: CSS_CLASS_SELECTOR@165..174
                      0: DOT@165..168 "." [Newline("\n"), Newline("\n")] []
                      1: CSS_CUSTOM_IDENTIFIER@168..174
                        0: IDENT@168..174 "class" [] [Whitespace(" ")]
                1: R_ANGLE@174..176 ">" [] [Whitespace(" ")]
                2: CSS_COMPOUND_SELECTOR@176..180
                  0: CSS_NESTED_SELECTOR_LIST@176..176
                  1: CSS_TYPE_SELECTOR@176..180
                    0: (empty)
                    1: CSS_IDENTIFIER@176..180
                      0: IDENT@176..180 "div" [] [Whitespace(" ")]
                  2: CSS_SUB_SELECTOR_LIST@180..180
              1: PLUS@180..182 "+" [] [Whitespace(" ")]
              2: CSS_COMPOUND_SELECTOR@182..186
                0: CSS_NESTED_SELECTOR_LIST@182..182
                1: (empty)
                2: CSS_SUB_SELECTOR_LIST@182..186
                  0: CSS_ID_SELECTOR@182..186
                    0: HASH@182..183 "#" [] []
                    1: CSS_CUSTOM_IDENTIFIER@183..186
                      0: IDENT@183..186 "id" [] [Whitespace(" ")]
            1: TILDE@186..188 "~" [] [Whitespace(" ")]
            2: CSS_COMPOUND_SELECTOR@188..198
              0: CSS_NESTED_SELECTOR_LIST@188..188
              1: CSS_TYPE_SELECTOR@188..192
                0: (empty)
                1: CSS_IDENTIFIER@188..192
                  0: IDENT@188..192 "span" [] []
              2: CSS_SUB_SELECTOR_LIST@192..198
                0: CSS_CLASS_SELECTOR@192..198
                  0: DOT@192..193 "." [] []
                  1: CSS_CUSTOM_IDENTIFIER@193..198
                    0: IDENT@193..198 "class" [] []
          1: CSS_SPACE_LITERAL@198..199 " " [] []
          2: CSS_COMPOUND_SELECTOR@199..208
            0: CSS_NESTED_SELECTOR_LIST@199..199
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@199..208
              0: CSS_ID_SELECTOR@199..208
                0: HASH@199..200 "#" [] []
                1: CSS_CUSTOM_IDENTIFIER@200..208
                  0: IDENT@200..208 "another" [] [Whitespace(" ")]
      1: CSS_DECLARATION_OR_RULE_BLOCK@208..212
        0: L_CURLY@208..209 "{" [] []
        1: CSS_DECLARATION_OR_RULE_LIST@209..209
        2: R_CURLY@209..212 "}" [Newline("\n"), Newline("\n")] []
    9: CSS_QUALIFIED_RULE@212..226
      0: CSS_SELECTOR_LIST@212..224
        0: CSS_COMPLEX_SELECTOR@212..224
          0: CSS_COMPOUND_SELECTOR@212..218
            0: CSS_NESTED_SELECTOR_LIST@212..212
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@212..218
              0: CSS_CLASS_SELECTOR@212..218
                0: DOT@212..215 "." [Newline("\n"), Newline("\n")] []
                1: CSS_CUSTOM_IDENTIFIER@215..218
                  0: IDENT@215..218 "div" [] []
          1: CSS_SPACE_LITERAL@218..219 " " [] []
          2: CSS_COMPOUND_SELECTOR@219..224
            0: CSS_NESTED_SELECTOR_LIST@219..219
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@219..224
              0: CSS_CLASS_SELECTOR@219..224
                0: DOT@219..220 "." [] []
                1: CSS_CUSTOM_IDENTIFIER@220..224
                  0: IDENT@220..224 "div" [] [Whitespace(" ")]
      1: CSS_DECLARATION_OR_RULE_BLOCK@224..226
        0: L_CURLY@224..225 "{" [] []
        1: CSS_DECLARATION_OR_RULE_LIST@225..225
        2: R_CURLY@225..226 "}" [] []
    10: CSS_QUALIFIED_RULE@226..249
      0: CSS_SELECTOR_LIST@226..245
        0: CSS_COMPLEX_SELECTOR@226..245
          0: CSS_COMPLEX_SELECTOR@226..239
            0: CSS_COMPOUND_SELECTOR@226..234
              0: CSS_NESTED_SELECTOR_LIST@226..226
              1: (empty)
              2: CSS_SUB_SELECTOR_LIST@226..234
                0: CSS_CLASS_SELECTOR@226..234
                  0: DOT@226..229 "." [Newline("\n"), Newline("\n")] []
                  1: CSS_CUSTOM_IDENTIFIER@229..234
                    0: IDENT@229..234 "class" [] []
            1: CSS_SPACE_LITERAL@234..236 " " [] [Whitespace(" ")]
            2: CSS_COMPOUND_SELECTOR@236..239
              0: CSS_NESTED_SELECTOR_LIST@236..236
              1: CSS_TYPE_SELECTOR@236..239
                0: (empty)
                1: CSS_IDENTIFIER@236..239
                  0: IDENT@236..239 "div" [] []
              2: CSS_SUB_SELECTOR_LIST@239..239
          1: CSS_SPACE_LITERAL@239..241 " " [] [Whitespace(" ")]
          2: CSS_COMPOUND_SELECTOR@241..245
            0: CSS_NESTED_SELECTOR_LIST@241..241
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@241..245
              0: CSS_ID_SELECTOR@241..245
                0: HASH@241..242 "#" [] []
                1: CSS_CUSTOM_IDENTIFIER@242..245
                  0: IDENT@242..245 "id" [] [Whitespace(" ")]
      1: CSS_DECLARATION_OR_RULE_BLOCK@245..249
        0: L_CURLY@245..246 "{" [] []
        1: CSS_DECLARATION_OR_RULE_LIST@246..246
        2: R_CURLY@246..249 "}" [Newline("\n"), Newline("\n")] []
    11: CSS_QUALIFIED_RULE@249..298
      0: CSS_SELECTOR_LIST@249..294
        0: CSS_COMPLEX_SELECTOR@249..294
          0: CSS_COMPLEX_SELECTOR@249..279
            0: CSS_COMPOUND_SELECTOR@249..264
              0: CSS_NESTED_SELECTOR_LIST@249..249
              1: (empty)
              2: CSS_SUB_SELECTOR_LIST@249..264
                0: CSS_ATTRIBUTE_SELECTOR@249..264
                  0: L_BRACK@249..252 "[" [Newline("\n"), Newline("\n")] []
                  1: CSS_ATTRIBUTE_NAME@252..256
                    0: (empty)
                    1: CSS_IDENTIFIER@252..256
                      0: IDENT@252..256 "lang" [] []
                  2: CSS_ATTRIBUTE_MATCHER@256..262
                    0: PIPEEQ@256..258 "|=" [] []
                    1: CSS_ATTRIBUTE_MATCHER_VALUE@258..262
                      0: CSS_STRING@258..262
                        0: CSS_STRING_LITERAL@258..262 "\"zh\"" [] []
                    2: (empty)
                  3: R_BRACK@262..264 "]" [] [Whitespace(" ")]
            1: TILDE@264..266 "~" [] [Whitespace(" ")]
            2: CSS_COMPOUND_SELECTOR@266..279
              0: CSS_NESTED_SELECTOR_LIST@266..266
              1: (empty)
              2: CSS_SUB_SELECTOR_LIST@266..279
                0: CSS_ATTRIBUTE_SELECTOR@266..279
                  0: L_BRACK@266..267 "[" [] []
                  1: CSS_ATTRIBUTE_NAME@267..271
                    0: (empty)
                    1: CSS_IDENTIFIER@267..271
                      0: IDENT@267..271 "lang" [] []
                  2: CSS_ATTRIBUTE_MATCHER@271..277
                    0: PIPEEQ@271..273 "|=" [] []
                    1: CSS_ATTRIBUTE_MATCHER_VALUE@273..277
                      0: CSS_STRING@273..277
                        0: CSS_STRING_LITERAL@273..277 "\"zh\"" [] []
                    2: (empty)
                  3: R_BRACK@277..279 "]" [] [Whitespace(" ")]
          1: R_ANGLE@279..281 ">" [] [Whitespace(" ")]
          2: CSS_COMPOUND_SELECTOR@281..294
            0: CSS_NESTED_SELECTOR_LIST@281..281
            1: (empty)
            2: CSS_SUB_SELECTOR_LIST@281..294
              0: CSS_ATTRIBUTE_SELECTOR@281..294
                0: L_BRACK@281..282 "[" [] []
                1: CSS_ATTRIBUTE_NAME@282..286
                  0: (empty)
                  1: CSS_IDENTIFIER@282..286
                    0: IDENT@282..286 "lang" [] []
                2: CSS_ATTRIBUTE_MATCHER@286..292
                  0: PIPEEQ@286..288 "|=" [] []
                  1: CSS_ATTRIBUTE_MATCHER_VALUE@288..292
                    0: CSS_STRING@288..292
                      0: CSS_STRING_LITERAL@288..292 "\"zh\"" [] []
                  2: (empty)
                3: R_BRACK@292..294 "]" [] [Whitespace(" ")]
      1: CSS_DECLARATION_OR_RULE_BLOCK@294..298
        0: L_CURLY@294..295 "{" [] []
        1: CSS_DECLARATION_OR_RULE_LIST@295..295
        2: R_CURLY@295..298 "}" [Newline("\n"), Newline("\n")] []
  2: EOF@298..299 "" [Newline("\n")] []

```