View raw

1 { 2 "information_for_contributors": [ 3 "This file has been converted from https://github.com/microsoft/vscode-css/blob/master/grammars/css.cson", 4 "If you want to provide a fix or improvement, please create a pull request against the original repository.", 5 "Once accepted there, we are happy to receive an update request." 6 ], 7 "version": "https://github.com/microsoft/vscode-css/commit/9a07d76cb0e7a56f9bfc76328a57227751e4adb4", 8 "name": "CSS", 9 "scopeName": "source.css", 10 "patterns": [ 11 { 12 "include": "#comment-block" 13 }, 14 { 15 "include": "#escapes" 16 }, 17 { 18 "include": "#combinators" 19 }, 20 { 21 "include": "#selector" 22 }, 23 { 24 "include": "#at-rules" 25 }, 26 { 27 "include": "#rule-list" 28 } 29 ], 30 "repository": { 31 "at-rules": { 32 "patterns": [ 33 { 34 "begin": "\\A(?:\\xEF\\xBB\\xBF)?(?i:(?=\\s*@charset\\b))", 35 "end": ";|(?=$)", 36 "endCaptures": { 37 "0": { 38 "name": "punctuation.terminator.rule.css" 39 } 40 }, 41 "name": "meta.at-rule.charset.css", 42 "patterns": [ 43 { 44 "captures": { 45 "1": { 46 "name": "invalid.illegal.not-lowercase.charset.css" 47 }, 48 "2": { 49 "name": "invalid.illegal.leading-whitespace.charset.css" 50 }, 51 "3": { 52 "name": "invalid.illegal.no-whitespace.charset.css" 53 }, 54 "4": { 55 "name": "invalid.illegal.whitespace.charset.css" 56 }, 57 "5": { 58 "name": "invalid.illegal.not-double-quoted.charset.css" 59 }, 60 "6": { 61 "name": "invalid.illegal.unclosed-string.charset.css" 62 }, 63 "7": { 64 "name": "invalid.illegal.unexpected-characters.charset.css" 65 } 66 }, 67 "match": "(?x) # Possible errors:\n\\G\n((?!@charset)@\\w+) # Not lowercase (@charset is case-sensitive)\n|\n\\G(\\s+) # Preceding whitespace\n|\n(@charset\\S[^;]*) # No whitespace after @charset\n|\n(?<=@charset) # Before quoted charset name\n(\\x20{2,}|\\t+) # More than one space used, or a tab\n|\n(?<=@charset\\x20) # Beginning of charset name\n([^\";]+) # Not double-quoted\n|\n(\"[^\"]+$) # Unclosed quote\n|\n(?<=\") # After charset name\n([^;]+) # Unexpected junk instead of semicolon" 68 }, 69 { 70 "captures": { 71 "1": { 72 "name": "keyword.control.at-rule.charset.css" 73 }, 74 "2": { 75 "name": "punctuation.definition.keyword.css" 76 } 77 }, 78 "match": "((@)charset)(?=\\s)" 79 }, 80 { 81 "begin": "\"", 82 "beginCaptures": { 83 "0": { 84 "name": "punctuation.definition.string.begin.css" 85 } 86 }, 87 "end": "\"|$", 88 "endCaptures": { 89 "0": { 90 "name": "punctuation.definition.string.end.css" 91 } 92 }, 93 "name": "string.quoted.double.css", 94 "patterns": [ 95 { 96 "begin": "(?:\\G|^)(?=(?:[^\"])+$)", 97 "end": "$", 98 "name": "invalid.illegal.unclosed.string.css" 99 } 100 ] 101 } 102 ] 103 }, 104 { 105 "begin": "(?i)((@)import)(?:\\s+|$|(?=['\"]|/\\*))", 106 "beginCaptures": { 107 "1": { 108 "name": "keyword.control.at-rule.import.css" 109 }, 110 "2": { 111 "name": "punctuation.definition.keyword.css" 112 } 113 }, 114 "end": ";", 115 "endCaptures": { 116 "0": { 117 "name": "punctuation.terminator.rule.css" 118 } 119 }, 120 "name": "meta.at-rule.import.css", 121 "patterns": [ 122 { 123 "begin": "\\G\\s*(?=/\\*)", 124 "end": "(?<=\\*/)\\s*", 125 "patterns": [ 126 { 127 "include": "#comment-block" 128 } 129 ] 130 }, 131 { 132 "include": "#string" 133 }, 134 { 135 "include": "#url" 136 }, 137 { 138 "include": "#media-query-list" 139 } 140 ] 141 }, 142 { 143 "begin": "(?i)((@)font-face)(?=\\s*|{|/\\*|$)", 144 "beginCaptures": { 145 "1": { 146 "name": "keyword.control.at-rule.font-face.css" 147 }, 148 "2": { 149 "name": "punctuation.definition.keyword.css" 150 } 151 }, 152 "end": "(?!\\G)", 153 "name": "meta.at-rule.font-face.css", 154 "patterns": [ 155 { 156 "include": "#comment-block" 157 }, 158 { 159 "include": "#escapes" 160 }, 161 { 162 "include": "#rule-list" 163 } 164 ] 165 }, 166 { 167 "begin": "(?i)(@)page(?=[\\s:{]|/\\*|$)", 168 "captures": { 169 "0": { 170 "name": "keyword.control.at-rule.page.css" 171 }, 172 "1": { 173 "name": "punctuation.definition.keyword.css" 174 } 175 }, 176 "end": "(?=\\s*($|[:{;]))", 177 "name": "meta.at-rule.page.css", 178 "patterns": [ 179 { 180 "include": "#rule-list" 181 } 182 ] 183 }, 184 { 185 "begin": "(?i)(?=@media(\\s|\\(|/\\*|$))", 186 "end": "(?<=})(?!\\G)", 187 "patterns": [ 188 { 189 "begin": "(?i)\\G(@)media", 190 "beginCaptures": { 191 "0": { 192 "name": "keyword.control.at-rule.media.css" 193 }, 194 "1": { 195 "name": "punctuation.definition.keyword.css" 196 } 197 }, 198 "end": "(?=\\s*[{;])", 199 "name": "meta.at-rule.media.header.css", 200 "patterns": [ 201 { 202 "include": "#media-query-list" 203 } 204 ] 205 }, 206 { 207 "begin": "{", 208 "beginCaptures": { 209 "0": { 210 "name": "punctuation.section.media.begin.bracket.curly.css" 211 } 212 }, 213 "end": "}", 214 "endCaptures": { 215 "0": { 216 "name": "punctuation.section.media.end.bracket.curly.css" 217 } 218 }, 219 "name": "meta.at-rule.media.body.css", 220 "patterns": [ 221 { 222 "include": "$self" 223 } 224 ] 225 } 226 ] 227 }, 228 { 229 "begin": "(?i)(?=@counter-style([\\s'\"{;]|/\\*|$))", 230 "end": "(?<=})(?!\\G)", 231 "patterns": [ 232 { 233 "begin": "(?i)\\G(@)counter-style", 234 "beginCaptures": { 235 "0": { 236 "name": "keyword.control.at-rule.counter-style.css" 237 }, 238 "1": { 239 "name": "punctuation.definition.keyword.css" 240 } 241 }, 242 "end": "(?=\\s*{)", 243 "name": "meta.at-rule.counter-style.header.css", 244 "patterns": [ 245 { 246 "include": "#comment-block" 247 }, 248 { 249 "include": "#escapes" 250 }, 251 { 252 "captures": { 253 "0": { 254 "patterns": [ 255 { 256 "include": "#escapes" 257 } 258 ] 259 } 260 }, 261 "match": "(?x)\n(?:[-a-zA-Z_] | [^\\x00-\\x7F]) # First letter\n(?:[-a-zA-Z0-9_] | [^\\x00-\\x7F] # Remainder of identifier\n |\\\\(?:[0-9a-fA-F]{1,6}|.)\n)*", 262 "name": "variable.parameter.style-name.css" 263 } 264 ] 265 }, 266 { 267 "begin": "{", 268 "beginCaptures": { 269 "0": { 270 "name": "punctuation.section.property-list.begin.bracket.curly.css" 271 } 272 }, 273 "end": "}", 274 "endCaptures": { 275 "0": { 276 "name": "punctuation.section.property-list.end.bracket.curly.css" 277 } 278 }, 279 "name": "meta.at-rule.counter-style.body.css", 280 "patterns": [ 281 { 282 "include": "#comment-block" 283 }, 284 { 285 "include": "#escapes" 286 }, 287 { 288 "include": "#rule-list-innards" 289 } 290 ] 291 } 292 ] 293 }, 294 { 295 "begin": "(?i)(?=@document([\\s'\"{;]|/\\*|$))", 296 "end": "(?<=})(?!\\G)", 297 "patterns": [ 298 { 299 "begin": "(?i)\\G(@)document", 300 "beginCaptures": { 301 "0": { 302 "name": "keyword.control.at-rule.document.css" 303 }, 304 "1": { 305 "name": "punctuation.definition.keyword.css" 306 } 307 }, 308 "end": "(?=\\s*[{;])", 309 "name": "meta.at-rule.document.header.css", 310 "patterns": [ 311 { 312 "begin": "(?i)(?<![\\w-])(url-prefix|domain|regexp)(\\()", 313 "beginCaptures": { 314 "1": { 315 "name": "support.function.document-rule.css" 316 }, 317 "2": { 318 "name": "punctuation.section.function.begin.bracket.round.css" 319 } 320 }, 321 "end": "\\)", 322 "endCaptures": { 323 "0": { 324 "name": "punctuation.section.function.end.bracket.round.css" 325 } 326 }, 327 "name": "meta.function.document-rule.css", 328 "patterns": [ 329 { 330 "include": "#string" 331 }, 332 { 333 "include": "#comment-block" 334 }, 335 { 336 "include": "#escapes" 337 }, 338 { 339 "match": "[^'\")\\s]+", 340 "name": "variable.parameter.document-rule.css" 341 } 342 ] 343 }, 344 { 345 "include": "#url" 346 }, 347 { 348 "include": "#commas" 349 }, 350 { 351 "include": "#comment-block" 352 }, 353 { 354 "include": "#escapes" 355 } 356 ] 357 }, 358 { 359 "begin": "{", 360 "beginCaptures": { 361 "0": { 362 "name": "punctuation.section.document.begin.bracket.curly.css" 363 } 364 }, 365 "end": "}", 366 "endCaptures": { 367 "0": { 368 "name": "punctuation.section.document.end.bracket.curly.css" 369 } 370 }, 371 "name": "meta.at-rule.document.body.css", 372 "patterns": [ 373 { 374 "include": "$self" 375 } 376 ] 377 } 378 ] 379 }, 380 { 381 "begin": "(?i)(?=@(?:-(?:webkit|moz|o|ms)-)?keyframes([\\s'\"{;]|/\\*|$))", 382 "end": "(?<=})(?!\\G)", 383 "patterns": [ 384 { 385 "begin": "(?i)\\G(@)(?:-(?:webkit|moz|o|ms)-)?keyframes", 386 "beginCaptures": { 387 "0": { 388 "name": "keyword.control.at-rule.keyframes.css" 389 }, 390 "1": { 391 "name": "punctuation.definition.keyword.css" 392 } 393 }, 394 "end": "(?=\\s*{)", 395 "name": "meta.at-rule.keyframes.header.css", 396 "patterns": [ 397 { 398 "include": "#comment-block" 399 }, 400 { 401 "include": "#escapes" 402 }, 403 { 404 "captures": { 405 "0": { 406 "patterns": [ 407 { 408 "include": "#escapes" 409 } 410 ] 411 } 412 }, 413 "match": "(?x)\n(?:[-a-zA-Z_] | [^\\x00-\\x7F]) # First letter\n(?:[-a-zA-Z0-9_] | [^\\x00-\\x7F] # Remainder of identifier\n |\\\\(?:[0-9a-fA-F]{1,6}|.)\n)*", 414 "name": "variable.parameter.keyframe-list.css" 415 } 416 ] 417 }, 418 { 419 "begin": "{", 420 "beginCaptures": { 421 "0": { 422 "name": "punctuation.section.keyframes.begin.bracket.curly.css" 423 } 424 }, 425 "end": "}", 426 "endCaptures": { 427 "0": { 428 "name": "punctuation.section.keyframes.end.bracket.curly.css" 429 } 430 }, 431 "name": "meta.at-rule.keyframes.body.css", 432 "patterns": [ 433 { 434 "include": "#comment-block" 435 }, 436 { 437 "include": "#escapes" 438 }, 439 { 440 "captures": { 441 "1": { 442 "name": "entity.other.keyframe-offset.css" 443 }, 444 "2": { 445 "name": "entity.other.keyframe-offset.percentage.css" 446 } 447 }, 448 "match": "(?xi)\n(?<![\\w-]) (from|to) (?![\\w-]) # Keywords for 0% | 100%\n|\n([-+]?(?:\\d+(?:\\.\\d+)?|\\.\\d+)%) # Percentile value" 449 }, 450 { 451 "include": "#rule-list" 452 } 453 ] 454 } 455 ] 456 }, 457 { 458 "begin": "(?i)(?=@supports(\\s|\\(|/\\*|$))", 459 "end": "(?<=})(?!\\G)|(?=;)", 460 "patterns": [ 461 { 462 "begin": "(?i)\\G(@)supports", 463 "beginCaptures": { 464 "0": { 465 "name": "keyword.control.at-rule.supports.css" 466 }, 467 "1": { 468 "name": "punctuation.definition.keyword.css" 469 } 470 }, 471 "end": "(?=\\s*[{;])", 472 "name": "meta.at-rule.supports.header.css", 473 "patterns": [ 474 { 475 "include": "#feature-query-operators" 476 }, 477 { 478 "include": "#feature-query" 479 }, 480 { 481 "include": "#comment-block" 482 }, 483 { 484 "include": "#escapes" 485 } 486 ] 487 }, 488 { 489 "begin": "{", 490 "beginCaptures": { 491 "0": { 492 "name": "punctuation.section.supports.begin.bracket.curly.css" 493 } 494 }, 495 "end": "}", 496 "endCaptures": { 497 "0": { 498 "name": "punctuation.section.supports.end.bracket.curly.css" 499 } 500 }, 501 "name": "meta.at-rule.supports.body.css", 502 "patterns": [ 503 { 504 "include": "$self" 505 } 506 ] 507 } 508 ] 509 }, 510 { 511 "begin": "(?i)((@)(-(ms|o)-)?viewport)(?=[\\s'\"{;]|/\\*|$)", 512 "beginCaptures": { 513 "1": { 514 "name": "keyword.control.at-rule.viewport.css" 515 }, 516 "2": { 517 "name": "punctuation.definition.keyword.css" 518 } 519 }, 520 "end": "(?=\\s*[@{;])", 521 "name": "meta.at-rule.viewport.css", 522 "patterns": [ 523 { 524 "include": "#comment-block" 525 }, 526 { 527 "include": "#escapes" 528 } 529 ] 530 }, 531 { 532 "begin": "(?i)((@)font-feature-values)(?=[\\s'\"{;]|/\\*|$)\\s*", 533 "beginCaptures": { 534 "1": { 535 "name": "keyword.control.at-rule.font-feature-values.css" 536 }, 537 "2": { 538 "name": "punctuation.definition.keyword.css" 539 } 540 }, 541 "contentName": "variable.parameter.font-name.css", 542 "end": "(?=\\s*[@{;])", 543 "name": "meta.at-rule.font-features.css", 544 "patterns": [ 545 { 546 "include": "#comment-block" 547 }, 548 { 549 "include": "#escapes" 550 } 551 ] 552 }, 553 { 554 "include": "#font-features" 555 }, 556 { 557 "begin": "(?i)((@)namespace)(?=[\\s'\";]|/\\*|$)", 558 "beginCaptures": { 559 "1": { 560 "name": "keyword.control.at-rule.namespace.css" 561 }, 562 "2": { 563 "name": "punctuation.definition.keyword.css" 564 } 565 }, 566 "end": ";|(?=[@{])", 567 "endCaptures": { 568 "0": { 569 "name": "punctuation.terminator.rule.css" 570 } 571 }, 572 "name": "meta.at-rule.namespace.css", 573 "patterns": [ 574 { 575 "include": "#url" 576 }, 577 { 578 "captures": { 579 "1": { 580 "patterns": [ 581 { 582 "include": "#comment-block" 583 } 584 ] 585 }, 586 "2": { 587 "name": "entity.name.function.namespace-prefix.css", 588 "patterns": [ 589 { 590 "include": "#escapes" 591 } 592 ] 593 } 594 }, 595 "match": "(?xi)\n(?:\\G|^|(?<=\\s))\n(?=\n (?<=\\s|^) # Starts with whitespace\n (?:[-a-zA-Z_]|[^\\x00-\\x7F]) # Then a valid identifier character\n |\n \\s* # Possible adjoining whitespace\n /\\*(?:[^*]|\\*[^/])*\\*/ # Injected comment\n)\n(.*?) # Grouped to embed #comment-block\n(\n (?:[-a-zA-Z_] | [^\\x00-\\x7F]) # First letter\n (?:[-a-zA-Z0-9_] | [^\\x00-\\x7F] # Remainder of identifier\n |\\\\(?:[0-9a-fA-F]{1,6}|.)\n )*\n)" 596 }, 597 { 598 "include": "#comment-block" 599 }, 600 { 601 "include": "#escapes" 602 }, 603 { 604 "include": "#string" 605 } 606 ] 607 }, 608 { 609 "begin": "(?i)(?=@[\\w-]+[^;]+;s*$)", 610 "end": "(?<=;)(?!\\G)", 611 "patterns": [ 612 { 613 "begin": "(?i)\\G(@)[\\w-]+", 614 "beginCaptures": { 615 "0": { 616 "name": "keyword.control.at-rule.css" 617 }, 618 "1": { 619 "name": "punctuation.definition.keyword.css" 620 } 621 }, 622 "end": ";", 623 "endCaptures": { 624 "0": { 625 "name": "punctuation.terminator.rule.css" 626 } 627 }, 628 "name": "meta.at-rule.header.css" 629 } 630 ] 631 }, 632 { 633 "begin": "(?i)(?=@[\\w-]+(\\s|\\(|{|/\\*|$))", 634 "end": "(?<=})(?!\\G)", 635 "patterns": [ 636 { 637 "begin": "(?i)\\G(@)[\\w-]+", 638 "beginCaptures": { 639 "0": { 640 "name": "keyword.control.at-rule.css" 641 }, 642 "1": { 643 "name": "punctuation.definition.keyword.css" 644 } 645 }, 646 "end": "(?=\\s*[{;])", 647 "name": "meta.at-rule.header.css" 648 }, 649 { 650 "begin": "{", 651 "beginCaptures": { 652 "0": { 653 "name": "punctuation.section.begin.bracket.curly.css" 654 } 655 }, 656 "end": "}", 657 "endCaptures": { 658 "0": { 659 "name": "punctuation.section.end.bracket.curly.css" 660 } 661 }, 662 "name": "meta.at-rule.body.css", 663 "patterns": [ 664 { 665 "include": "$self" 666 } 667 ] 668 } 669 ] 670 } 671 ] 672 }, 673 "color-keywords": { 674 "patterns": [ 675 { 676 "match": "(?i)(?<![\\w-])(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)(?![\\w-])", 677 "name": "support.constant.color.w3c-standard-color-name.css" 678 }, 679 { 680 "match": "(?xi) (?<![\\w-])\n(aliceblue|antiquewhite|aquamarine|azure|beige|bisque|blanchedalmond|blueviolet|brown|burlywood\n|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan\n|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange\n|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise\n|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen\n|gainsboro|ghostwhite|gold|goldenrod|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki\n|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow\n|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray\n|lightslategrey|lightsteelblue|lightyellow|limegreen|linen|magenta|mediumaquamarine|mediumblue\n|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise\n|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|oldlace|olivedrab|orangered\n|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum\n|powderblue|rebeccapurple|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell\n|sienna|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|thistle|tomato\n|transparent|turquoise|violet|wheat|whitesmoke|yellowgreen)\n(?![\\w-])", 681 "name": "support.constant.color.w3c-extended-color-name.css" 682 }, 683 { 684 "match": "(?i)(?<![\\w-])currentColor(?![\\w-])", 685 "name": "support.constant.color.current.css" 686 }, 687 { 688 "match": "(?xi) (?<![\\w-])\n(ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow\n|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption\n|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow\n|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText)\n(?![\\w-])", 689 "name": "invalid.deprecated.color.system.css" 690 } 691 ] 692 }, 693 "combinators": { 694 "patterns": [ 695 { 696 "match": "/deep/|>>>", 697 "name": "invalid.deprecated.combinator.css" 698 }, 699 { 700 "match": ">>|>|\\+|~", 701 "name": "keyword.operator.combinator.css" 702 } 703 ] 704 }, 705 "commas": { 706 "match": ",", 707 "name": "punctuation.separator.list.comma.css" 708 }, 709 "comment-block": { 710 "begin": "/\\*", 711 "beginCaptures": { 712 "0": { 713 "name": "punctuation.definition.comment.begin.css" 714 } 715 }, 716 "end": "\\*/", 717 "endCaptures": { 718 "0": { 719 "name": "punctuation.definition.comment.end.css" 720 } 721 }, 722 "name": "comment.block.css" 723 }, 724 "escapes": { 725 "patterns": [ 726 { 727 "match": "\\\\[0-9a-fA-F]{1,6}", 728 "name": "constant.character.escape.codepoint.css" 729 }, 730 { 731 "begin": "\\\\$\\s*", 732 "end": "^(?<!\\G)", 733 "name": "constant.character.escape.newline.css" 734 }, 735 { 736 "match": "\\\\.", 737 "name": "constant.character.escape.css" 738 } 739 ] 740 }, 741 "feature-query": { 742 "begin": "\\(", 743 "beginCaptures": { 744 "0": { 745 "name": "punctuation.definition.condition.begin.bracket.round.css" 746 } 747 }, 748 "end": "\\)", 749 "endCaptures": { 750 "0": { 751 "name": "punctuation.definition.condition.end.bracket.round.css" 752 } 753 }, 754 "name": "meta.feature-query.css", 755 "patterns": [ 756 { 757 "include": "#feature-query-operators" 758 }, 759 { 760 "include": "#feature-query" 761 } 762 ] 763 }, 764 "feature-query-operators": { 765 "patterns": [ 766 { 767 "match": "(?i)(?<=[\\s()]|^|\\*/)(and|not|or)(?=[\\s()]|/\\*|$)", 768 "name": "keyword.operator.logical.feature.$1.css" 769 }, 770 { 771 "include": "#rule-list-innards" 772 } 773 ] 774 }, 775 "font-features": { 776 "begin": "(?xi)\n((@)(annotation|character-variant|ornaments|styleset|stylistic|swash))\n(?=[\\s@'\"{;]|/\\*|$)", 777 "beginCaptures": { 778 "1": { 779 "name": "keyword.control.at-rule.${3:/downcase}.css" 780 }, 781 "2": { 782 "name": "punctuation.definition.keyword.css" 783 } 784 }, 785 "end": "(?<=})", 786 "name": "meta.at-rule.${3:/downcase}.css", 787 "patterns": [ 788 { 789 "begin": "{", 790 "beginCaptures": { 791 "0": { 792 "name": "punctuation.section.property-list.begin.bracket.curly.css" 793 } 794 }, 795 "end": "}", 796 "endCaptures": { 797 "0": { 798 "name": "punctuation.section.property-list.end.bracket.curly.css" 799 } 800 }, 801 "name": "meta.property-list.font-feature.css", 802 "patterns": [ 803 { 804 "captures": { 805 "0": { 806 "patterns": [ 807 { 808 "include": "#escapes" 809 } 810 ] 811 } 812 }, 813 "match": "(?x)\n(?: [-a-zA-Z_] | [^\\x00-\\x7F] ) # First letter\n(?: [-a-zA-Z0-9_] | [^\\x00-\\x7F] # Remainder of identifier\n | \\\\(?:[0-9a-fA-F]{1,6}|.)\n)*", 814 "name": "variable.font-feature.css" 815 }, 816 { 817 "include": "#rule-list-innards" 818 } 819 ] 820 } 821 ] 822 }, 823 "functions": { 824 "patterns": [ 825 { 826 "begin": "(?i)(?<![\\w-])(calc)(\\()", 827 "beginCaptures": { 828 "1": { 829 "name": "support.function.calc.css" 830 }, 831 "2": { 832 "name": "punctuation.section.function.begin.bracket.round.css" 833 } 834 }, 835 "end": "\\)", 836 "endCaptures": { 837 "0": { 838 "name": "punctuation.section.function.end.bracket.round.css" 839 } 840 }, 841 "name": "meta.function.calc.css", 842 "patterns": [ 843 { 844 "match": "[*/]|(?<=\\s|^)[-+](?=\\s|$)", 845 "name": "keyword.operator.arithmetic.css" 846 }, 847 { 848 "include": "#property-values" 849 } 850 ] 851 }, 852 { 853 "begin": "(?i)(?<![\\w-])(rgba?|rgb|hsla?|hsl|hwb|lab|oklab|lch|oklch|color)(\\()", 854 "beginCaptures": { 855 "1": { 856 "name": "support.function.misc.css" 857 }, 858 "2": { 859 "name": "punctuation.section.function.begin.bracket.round.css" 860 } 861 }, 862 "end": "\\)", 863 "endCaptures": { 864 "0": { 865 "name": "punctuation.section.function.end.bracket.round.css" 866 } 867 }, 868 "name": "meta.function.color.css", 869 "patterns": [ 870 { 871 "include": "#property-values" 872 } 873 ] 874 }, 875 { 876 "begin": "(?xi) (?<![\\w-])\n(\n (?:-webkit-|-moz-|-o-)? # Accept prefixed/historical variants\n (?:repeating-)? # \"Repeating\"-type gradient\n (?:linear|radial|conic) # Shape\n -gradient\n)\n(\\()", 877 "beginCaptures": { 878 "1": { 879 "name": "support.function.gradient.css" 880 }, 881 "2": { 882 "name": "punctuation.section.function.begin.bracket.round.css" 883 } 884 }, 885 "end": "\\)", 886 "endCaptures": { 887 "0": { 888 "name": "punctuation.section.function.end.bracket.round.css" 889 } 890 }, 891 "name": "meta.function.gradient.css", 892 "patterns": [ 893 { 894 "match": "(?i)(?<![\\w-])(from|to|at|in|hue)(?![\\w-])", 895 "name": "keyword.operator.gradient.css" 896 }, 897 { 898 "include": "#property-values" 899 } 900 ] 901 }, 902 { 903 "begin": "(?i)(?<![\\w-])(-webkit-gradient)(\\()", 904 "beginCaptures": { 905 "1": { 906 "name": "invalid.deprecated.gradient.function.css" 907 }, 908 "2": { 909 "name": "punctuation.section.function.begin.bracket.round.css" 910 } 911 }, 912 "end": "\\)", 913 "endCaptures": { 914 "0": { 915 "name": "punctuation.section.function.end.bracket.round.css" 916 } 917 }, 918 "name": "meta.function.gradient.invalid.deprecated.gradient.css", 919 "patterns": [ 920 { 921 "begin": "(?i)(?<![\\w-])(from|to|color-stop)(\\()", 922 "beginCaptures": { 923 "1": { 924 "name": "invalid.deprecated.function.css" 925 }, 926 "2": { 927 "name": "punctuation.section.function.begin.bracket.round.css" 928 } 929 }, 930 "end": "\\)", 931 "endCaptures": { 932 "0": { 933 "name": "punctuation.section.function.end.bracket.round.css" 934 } 935 }, 936 "patterns": [ 937 { 938 "include": "#property-values" 939 } 940 ] 941 }, 942 { 943 "include": "#property-values" 944 } 945 ] 946 }, 947 { 948 "begin": "(?xi) (?<![\\w-])\n(annotation|attr|blur|brightness|character-variant|clamp|contrast|counters?\n|cross-fade|drop-shadow|element|fit-content|format|grayscale|hue-rotate|color-mix\n|image-set|invert|local|max|min|minmax|opacity|ornaments|repeat|saturate|sepia\n|styleset|stylistic|swash|symbols\n|cos|sin|tan|acos|asin|atan|atan2|hypot|sqrt|pow|log|exp|abs|sign)\n(\\()", 949 "beginCaptures": { 950 "1": { 951 "name": "support.function.misc.css" 952 }, 953 "2": { 954 "name": "punctuation.section.function.begin.bracket.round.css" 955 } 956 }, 957 "end": "\\)", 958 "endCaptures": { 959 "0": { 960 "name": "punctuation.section.function.end.bracket.round.css" 961 } 962 }, 963 "name": "meta.function.misc.css", 964 "patterns": [ 965 { 966 "match": "(?i)(?<=[,\\s\"]|\\*/|^)\\d+x(?=[\\s,\"')]|/\\*|$)", 967 "name": "constant.numeric.other.density.css" 968 }, 969 { 970 "include": "#property-values" 971 }, 972 { 973 "match": "[^'\"),\\s]+", 974 "name": "variable.parameter.misc.css" 975 } 976 ] 977 }, 978 { 979 "begin": "(?i)(?<![\\w-])(circle|ellipse|inset|polygon|rect)(\\()", 980 "beginCaptures": { 981 "1": { 982 "name": "support.function.shape.css" 983 }, 984 "2": { 985 "name": "punctuation.section.function.begin.bracket.round.css" 986 } 987 }, 988 "end": "\\)", 989 "endCaptures": { 990 "0": { 991 "name": "punctuation.section.function.end.bracket.round.css" 992 } 993 }, 994 "name": "meta.function.shape.css", 995 "patterns": [ 996 { 997 "match": "(?i)(?<=\\s|^|\\*/)(at|round)(?=\\s|/\\*|$)", 998 "name": "keyword.operator.shape.css" 999 }, 1000 { 1001 "include": "#property-values" 1002 } 1003 ] 1004 }, 1005 { 1006 "begin": "(?i)(?<![\\w-])(cubic-bezier|steps)(\\()", 1007 "beginCaptures": { 1008 "1": { 1009 "name": "support.function.timing-function.css" 1010 }, 1011 "2": { 1012 "name": "punctuation.section.function.begin.bracket.round.css" 1013 } 1014 }, 1015 "end": "\\)", 1016 "endCaptures": { 1017 "0": { 1018 "name": "punctuation.section.function.end.bracket.round.css" 1019 } 1020 }, 1021 "name": "meta.function.timing-function.css", 1022 "patterns": [ 1023 { 1024 "match": "(?i)(?<![\\w-])(start|end)(?=\\s*\\)|$)", 1025 "name": "support.constant.step-direction.css" 1026 }, 1027 { 1028 "include": "#property-values" 1029 } 1030 ] 1031 }, 1032 { 1033 "begin": "(?xi) (?<![\\w-])\n( (?:translate|scale|rotate)(?:[XYZ]|3D)?\n| matrix(?:3D)?\n| skew[XY]?\n| perspective\n)\n(\\()", 1034 "beginCaptures": { 1035 "1": { 1036 "name": "support.function.transform.css" 1037 }, 1038 "2": { 1039 "name": "punctuation.section.function.begin.bracket.round.css" 1040 } 1041 }, 1042 "end": "\\)", 1043 "endCaptures": { 1044 "0": { 1045 "name": "punctuation.section.function.end.bracket.round.css" 1046 } 1047 }, 1048 "patterns": [ 1049 { 1050 "include": "#property-values" 1051 } 1052 ] 1053 }, 1054 { 1055 "include": "#url" 1056 }, 1057 { 1058 "begin": "(?i)(?<![\\w-])(var)(\\()", 1059 "beginCaptures": { 1060 "1": { 1061 "name": "support.function.misc.css" 1062 }, 1063 "2": { 1064 "name": "punctuation.section.function.begin.bracket.round.css" 1065 } 1066 }, 1067 "end": "\\)", 1068 "endCaptures": { 1069 "0": { 1070 "name": "punctuation.section.function.end.bracket.round.css" 1071 } 1072 }, 1073 "name": "meta.function.variable.css", 1074 "patterns": [ 1075 { 1076 "name": "variable.argument.css", 1077 "match": "(?x)\n--\n(?:[-a-zA-Z_] | [^\\x00-\\x7F]) # First letter\n(?:[-a-zA-Z0-9_] | [^\\x00-\\x7F] # Remainder of identifier\n |\\\\(?:[0-9a-fA-F]{1,6}|.)\n)*" 1078 }, 1079 { 1080 "include": "#property-values" 1081 } 1082 ] 1083 } 1084 ] 1085 }, 1086 "functional-pseudo-classes": { 1087 "patterns": [ 1088 { 1089 "begin": "(?i)((:)dir)(\\()", 1090 "beginCaptures": { 1091 "1": { 1092 "name": "entity.other.attribute-name.pseudo-class.css" 1093 }, 1094 "2": { 1095 "name": "punctuation.definition.entity.css" 1096 }, 1097 "3": { 1098 "name": "punctuation.section.function.begin.bracket.round.css" 1099 } 1100 }, 1101 "end": "\\)", 1102 "endCaptures": { 1103 "0": { 1104 "name": "punctuation.section.function.end.bracket.round.css" 1105 } 1106 }, 1107 "patterns": [ 1108 { 1109 "include": "#comment-block" 1110 }, 1111 { 1112 "include": "#escapes" 1113 }, 1114 { 1115 "match": "(?i)(?<![\\w-])(ltr|rtl)(?![\\w-])", 1116 "name": "support.constant.text-direction.css" 1117 }, 1118 { 1119 "include": "#property-values" 1120 } 1121 ] 1122 }, 1123 { 1124 "begin": "(?i)((:)lang)(\\()", 1125 "beginCaptures": { 1126 "1": { 1127 "name": "entity.other.attribute-name.pseudo-class.css" 1128 }, 1129 "2": { 1130 "name": "punctuation.definition.entity.css" 1131 }, 1132 "3": { 1133 "name": "punctuation.section.function.begin.bracket.round.css" 1134 } 1135 }, 1136 "end": "\\)", 1137 "endCaptures": { 1138 "0": { 1139 "name": "punctuation.section.function.end.bracket.round.css" 1140 } 1141 }, 1142 "patterns": [ 1143 { 1144 "match": "(?<=[(,\\s])[a-zA-Z]+(-[a-zA-Z0-9]*|\\\\(?:[0-9a-fA-F]{1,6}|.))*(?=[),\\s])", 1145 "name": "support.constant.language-range.css" 1146 }, 1147 { 1148 "begin": "\"", 1149 "beginCaptures": { 1150 "0": { 1151 "name": "punctuation.definition.string.begin.css" 1152 } 1153 }, 1154 "end": "\"", 1155 "endCaptures": { 1156 "0": { 1157 "name": "punctuation.definition.string.end.css" 1158 } 1159 }, 1160 "name": "string.quoted.double.css", 1161 "patterns": [ 1162 { 1163 "include": "#escapes" 1164 }, 1165 { 1166 "match": "(?<=[\"\\s])[a-zA-Z*]+(-[a-zA-Z0-9*]*)*(?=[\"\\s])", 1167 "name": "support.constant.language-range.css" 1168 } 1169 ] 1170 }, 1171 { 1172 "begin": "'", 1173 "beginCaptures": { 1174 "0": { 1175 "name": "punctuation.definition.string.begin.css" 1176 } 1177 }, 1178 "end": "'", 1179 "endCaptures": { 1180 "0": { 1181 "name": "punctuation.definition.string.end.css" 1182 } 1183 }, 1184 "name": "string.quoted.single.css", 1185 "patterns": [ 1186 { 1187 "include": "#escapes" 1188 }, 1189 { 1190 "match": "(?<=['\\s])[a-zA-Z*]+(-[a-zA-Z0-9*]*)*(?=['\\s])", 1191 "name": "support.constant.language-range.css" 1192 } 1193 ] 1194 }, 1195 { 1196 "include": "#commas" 1197 } 1198 ] 1199 }, 1200 { 1201 "begin": "(?i)((:)(?:not|has|matches|where|is))(\\()", 1202 "beginCaptures": { 1203 "1": { 1204 "name": "entity.other.attribute-name.pseudo-class.css" 1205 }, 1206 "2": { 1207 "name": "punctuation.definition.entity.css" 1208 }, 1209 "3": { 1210 "name": "punctuation.section.function.begin.bracket.round.css" 1211 } 1212 }, 1213 "end": "\\)", 1214 "endCaptures": { 1215 "0": { 1216 "name": "punctuation.section.function.end.bracket.round.css" 1217 } 1218 }, 1219 "patterns": [ 1220 { 1221 "include": "#selector-innards" 1222 } 1223 ] 1224 }, 1225 { 1226 "begin": "(?i)((:)nth-(?:last-)?(?:child|of-type))(\\()", 1227 "beginCaptures": { 1228 "1": { 1229 "name": "entity.other.attribute-name.pseudo-class.css" 1230 }, 1231 "2": { 1232 "name": "punctuation.definition.entity.css" 1233 }, 1234 "3": { 1235 "name": "punctuation.section.function.begin.bracket.round.css" 1236 } 1237 }, 1238 "end": "\\)", 1239 "endCaptures": { 1240 "0": { 1241 "name": "punctuation.section.function.end.bracket.round.css" 1242 } 1243 }, 1244 "patterns": [ 1245 { 1246 "match": "(?i)[+-]?(\\d+n?|n)(\\s*[+-]\\s*\\d+)?", 1247 "name": "constant.numeric.css" 1248 }, 1249 { 1250 "match": "(?i)even|odd", 1251 "name": "support.constant.parity.css" 1252 } 1253 ] 1254 } 1255 ] 1256 }, 1257 "media-features": { 1258 "captures": { 1259 "1": { 1260 "name": "support.type.property-name.media.css" 1261 }, 1262 "2": { 1263 "name": "support.type.property-name.media.css" 1264 }, 1265 "3": { 1266 "name": "support.type.vendored.property-name.media.css" 1267 } 1268 }, 1269 "match": "(?xi)\n(?<=^|\\s|\\(|\\*/) # Preceded by whitespace, bracket or comment\n(?:\n # Standardised features\n (\n (?:min-|max-)? # Range features\n (?: height\n | width\n | aspect-ratio\n | color\n | color-index\n | monochrome\n | resolution\n )\n | grid # Discrete features\n | scan\n | orientation\n | display-mode\n | hover\n )\n |\n # Deprecated features\n (\n (?:min-|max-)? # Deprecated in Media Queries 4\n device-\n (?: height\n | width\n | aspect-ratio\n )\n )\n |\n # Vendor extensions\n (\n (?:\n # Spec-compliant syntax\n [-_]\n (?: webkit # Webkit/Blink\n | apple|khtml # Webkit aliases\n | epub # ePub3\n | moz # Gecko\n | ms # Microsoft\n | o # Presto (pre-Opera 15)\n | xv|ah|rim|atsc| # Less common vendors\n hp|tc|wap|ro\n )\n |\n # Non-standard prefixes\n (?: mso # Microsoft Office\n | prince # YesLogic\n )\n )\n -\n [\\w-]+ # Feature name\n (?= # Terminates correctly\n \\s* # Possible whitespace\n (?: # Possible injected comment\n /\\*\n (?:[^*]|\\*[^/])*\n \\*/\n )?\n \\s*\n [:)] # Ends with a colon or closed bracket\n )\n )\n)\n(?=\\s|$|[><:=]|\\)|/\\*) # Terminates cleanly" 1270 }, 1271 "media-feature-keywords": { 1272 "match": "(?xi)\n(?<=^|\\s|:|\\*/)\n(?: portrait # Orientation\n | landscape\n | progressive # Scan types\n | interlace\n | fullscreen # Display modes\n | standalone\n | minimal-ui\n | browser\n | hover\n)\n(?=\\s|\\)|$)", 1273 "name": "support.constant.property-value.css" 1274 }, 1275 "media-query": { 1276 "begin": "\\G", 1277 "end": "(?=\\s*[{;])", 1278 "patterns": [ 1279 { 1280 "include": "#comment-block" 1281 }, 1282 { 1283 "include": "#escapes" 1284 }, 1285 { 1286 "include": "#media-types" 1287 }, 1288 { 1289 "match": "(?i)(?<=\\s|^|,|\\*/)(only|not)(?=\\s|{|/\\*|$)", 1290 "name": "keyword.operator.logical.$1.media.css" 1291 }, 1292 { 1293 "match": "(?i)(?<=\\s|^|\\*/|\\))and(?=\\s|/\\*|$)", 1294 "name": "keyword.operator.logical.and.media.css" 1295 }, 1296 { 1297 "match": ",(?:(?:\\s*,)+|(?=\\s*[;){]))", 1298 "name": "invalid.illegal.comma.css" 1299 }, 1300 { 1301 "include": "#commas" 1302 }, 1303 { 1304 "begin": "\\(", 1305 "beginCaptures": { 1306 "0": { 1307 "name": "punctuation.definition.parameters.begin.bracket.round.css" 1308 } 1309 }, 1310 "end": "\\)", 1311 "endCaptures": { 1312 "0": { 1313 "name": "punctuation.definition.parameters.end.bracket.round.css" 1314 } 1315 }, 1316 "patterns": [ 1317 { 1318 "include": "#media-features" 1319 }, 1320 { 1321 "include": "#media-feature-keywords" 1322 }, 1323 { 1324 "match": ":", 1325 "name": "punctuation.separator.key-value.css" 1326 }, 1327 { 1328 "match": ">=|<=|=|<|>", 1329 "name": "keyword.operator.comparison.css" 1330 }, 1331 { 1332 "captures": { 1333 "1": { 1334 "name": "constant.numeric.css" 1335 }, 1336 "2": { 1337 "name": "keyword.operator.arithmetic.css" 1338 }, 1339 "3": { 1340 "name": "constant.numeric.css" 1341 } 1342 }, 1343 "match": "(\\d+)\\s*(/)\\s*(\\d+)", 1344 "name": "meta.ratio.css" 1345 }, 1346 { 1347 "include": "#numeric-values" 1348 }, 1349 { 1350 "include": "#comment-block" 1351 } 1352 ] 1353 } 1354 ] 1355 }, 1356 "media-query-list": { 1357 "begin": "(?=\\s*[^{;])", 1358 "end": "(?=\\s*[{;])", 1359 "patterns": [ 1360 { 1361 "include": "#media-query" 1362 } 1363 ] 1364 }, 1365 "media-types": { 1366 "captures": { 1367 "1": { 1368 "name": "support.constant.media.css" 1369 }, 1370 "2": { 1371 "name": "invalid.deprecated.constant.media.css" 1372 } 1373 }, 1374 "match": "(?xi)\n(?<=^|\\s|,|\\*/)\n(?:\n # Valid media types\n (all|print|screen|speech)\n |\n # Deprecated in Media Queries 4: http://dev.w3.org/csswg/mediaqueries/#media-types\n (aural|braille|embossed|handheld|projection|tty|tv)\n)\n(?=$|[{,\\s;]|/\\*)" 1375 }, 1376 "numeric-values": { 1377 "patterns": [ 1378 { 1379 "captures": { 1380 "1": { 1381 "name": "punctuation.definition.constant.css" 1382 } 1383 }, 1384 "match": "(#)(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})\\b", 1385 "name": "constant.other.color.rgb-value.hex.css" 1386 }, 1387 { 1388 "captures": { 1389 "1": { 1390 "name": "keyword.other.unit.percentage.css" 1391 }, 1392 "2": { 1393 "name": "keyword.other.unit.${2:/downcase}.css" 1394 } 1395 }, 1396 "match": "(?xi) (?<![\\w-])\n[-+]? # Sign indicator\n\n(?: # Numerals\n [0-9]+ (?:\\.[0-9]+)? # Integer/float with leading digits\n | \\.[0-9]+ # Float without leading digits\n)\n\n(?: # Scientific notation\n (?<=[0-9]) # Exponent must follow a digit\n E # Exponent indicator\n [-+]? # Possible sign indicator\n [0-9]+ # Exponent value\n)?\n\n(?: # Possible unit for data-type:\n (%) # - Percentage\n | ( deg|grad|rad|turn # - Angle\n | Hz|kHz # - Frequency\n | ch|cm|em|ex|fr|in|mm|mozmm| # - Length\n pc|pt|px|q|rem|rch|rex|rlh|\n ic|ric|rcap|vh|vw|vb|vi|svh|\n svw|svb|svi|dvh|dvw|dvb|dvi|\n lvh|lvw|lvb|lvi|vmax|vmin|\n cqw|cqi|cqh|cqb|cqmin|cqmax\n | dpi|dpcm|dppx # - Resolution\n | s|ms # - Time\n )\n \\b # Boundary checking intentionally lax to\n)? # facilitate embedding in CSS-like grammars", 1397 "name": "constant.numeric.css" 1398 } 1399 ] 1400 }, 1401 "property-keywords": { 1402 "patterns": [ 1403 { 1404 "match": "(?xi) (?<![\\w-])\n(above|absolute|active|add|additive|after-edge|alias|all|all-petite-caps|all-scroll|all-small-caps|alpha|alphabetic|alternate|alternate-reverse\n|always|antialiased|auto|auto-fill|auto-fit|auto-pos|available|avoid|avoid-column|avoid-page|avoid-region|backwards|balance|baseline|before-edge|below|bevel\n|bidi-override|blink|block|block-axis|block-start|block-end|bold|bolder|border|border-box|both|bottom|bottom-outside|break-all|break-word|bullets\n|butt|capitalize|caption|cell|center|central|char|circle|clip|clone|close-quote|closest-corner|closest-side|col-resize|collapse|color|color-burn\n|color-dodge|column|column-reverse|common-ligatures|compact|condensed|contain|content|content-box|contents|context-menu|contextual|copy|cover\n|crisp-edges|crispEdges|crosshair|cyclic|dark|darken|dashed|decimal|default|dense|diagonal-fractions|difference|digits|disabled|disc|discretionary-ligatures\n|distribute|distribute-all-lines|distribute-letter|distribute-space|dot|dotted|double|double-circle|downleft|downright|e-resize|each-line|ease|ease-in\n|ease-in-out|ease-out|economy|ellipse|ellipsis|embed|end|evenodd|ew-resize|exact|exclude|exclusion|expanded|extends|extra-condensed|extra-expanded\n|fallback|farthest-corner|farthest-side|fill|fill-available|fill-box|filled|fit-content|fixed|flat|flex|flex-end|flex-start|flip|flow|flow-root|forwards|freeze\n|from-image|full-width|geometricPrecision|georgian|grab|grabbing|grayscale|grid|groove|hand|hanging|hard-light|help|hidden|hide\n|historical-forms|historical-ligatures|horizontal|horizontal-tb|hue|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space\n|ideographic|inactive|infinite|inherit|initial|inline|inline-axis|inline-block|inline-end|inline-flex|inline-grid|inline-list-item|inline-start\n|inline-table|inset|inside|inter-character|inter-ideograph|inter-word|intersect|invert|isolate|isolate-override|italic|jis04|jis78|jis83\n|jis90|justify|justify-all|kannada|keep-all|landscape|large|larger|left|light|lighten|lighter|line|line-edge|line-through|linear|linearRGB\n|lining-nums|list-item|local|loose|lowercase|lr|lr-tb|ltr|luminance|luminosity|main-size|mandatory|manipulation|manual|margin-box|match-parent\n|match-source|mathematical|max-content|medium|menu|message-box|middle|min-content|miter|mixed|move|multiply|n-resize|narrower|ne-resize\n|nearest-neighbor|nesw-resize|newspaper|no-change|no-clip|no-close-quote|no-common-ligatures|no-contextual|no-discretionary-ligatures\n|no-drop|no-historical-ligatures|no-open-quote|no-repeat|none|nonzero|normal|not-allowed|nowrap|ns-resize|numbers|numeric|nw-resize|nwse-resize\n|oblique|oldstyle-nums|open|open-quote|optimizeLegibility|optimizeQuality|optimizeSpeed|optional|ordinal|outset|outside|over|overlay|overline|padding\n|padding-box|page|painted|pan-down|pan-left|pan-right|pan-up|pan-x|pan-y|paused|petite-caps|pixelated|plaintext|pointer|portrait|pre|pre-line\n|pre-wrap|preserve-3d|progress|progressive|proportional-nums|proportional-width|proximity|radial|recto|region|relative|remove|repeat|repeat-[xy]\n|reset-size|reverse|revert|revert-layer|ridge|right|rl|rl-tb|round|row|row-resize|row-reverse|row-severse|rtl|ruby|ruby-base|ruby-base-container|ruby-text\n|ruby-text-container|run-in|running|s-resize|saturation|scale-down|screen|scroll|scroll-position|se-resize|semi-condensed|semi-expanded|separate\n|sesame|show|sideways|sideways-left|sideways-lr|sideways-right|sideways-rl|simplified|slashed-zero|slice|small|small-caps|small-caption|smaller\n|smooth|soft-light|solid|space|space-around|space-between|space-evenly|spell-out|square|sRGB|stacked-fractions|start|static|status-bar|swap\n|step-end|step-start|sticky|stretch|strict|stroke|stroke-box|style|sub|subgrid|subpixel-antialiased|subtract|super|sw-resize|symbolic|table\n|table-caption|table-cell|table-column|table-column-group|table-footer-group|table-header-group|table-row|table-row-group|tabular-nums|tb|tb-rl\n|text|text-after-edge|text-before-edge|text-bottom|text-top|thick|thin|titling-caps|top|top-outside|touch|traditional|transparent|triangle\n|ultra-condensed|ultra-expanded|under|underline|unicase|unset|upleft|uppercase|upright|use-glyph-orientation|use-script|verso|vertical\n|vertical-ideographic|vertical-lr|vertical-rl|vertical-text|view-box|visible|visibleFill|visiblePainted|visibleStroke|w-resize|wait|wavy\n|weight|whitespace|wider|words|wrap|wrap-reverse|x|x-large|x-small|xx-large|xx-small|y|zero|zoom-in|zoom-out)\n(?![\\w-])", 1405 "name": "support.constant.property-value.css" 1406 }, 1407 { 1408 "match": "(?xi) (?<![\\w-])\n(arabic-indic|armenian|bengali|cambodian|circle|cjk-decimal|cjk-earthly-branch|cjk-heavenly-stem|cjk-ideographic\n|decimal|decimal-leading-zero|devanagari|disc|disclosure-closed|disclosure-open|ethiopic-halehame-am\n|ethiopic-halehame-ti-e[rt]|ethiopic-numeric|georgian|gujarati|gurmukhi|hangul|hangul-consonant|hebrew\n|hiragana|hiragana-iroha|japanese-formal|japanese-informal|kannada|katakana|katakana-iroha|khmer\n|korean-hangul-formal|korean-hanja-formal|korean-hanja-informal|lao|lower-alpha|lower-armenian|lower-greek\n|lower-latin|lower-roman|malayalam|mongolian|myanmar|oriya|persian|simp-chinese-formal|simp-chinese-informal\n|square|tamil|telugu|thai|tibetan|trad-chinese-formal|trad-chinese-informal|upper-alpha|upper-armenian\n|upper-latin|upper-roman|urdu)\n(?![\\w-])", 1409 "name": "support.constant.property-value.list-style-type.css" 1410 }, 1411 { 1412 "match": "(?<![\\w-])(?i:-(?:ah|apple|atsc|epub|hp|khtml|moz|ms|o|rim|ro|tc|wap|webkit|xv)|(?:mso|prince))-[a-zA-Z-]+", 1413 "name": "support.constant.vendored.property-value.css" 1414 }, 1415 { 1416 "match": "(?<![\\w-])(?i:arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system-ui|system|tahoma|times|trebuchet|ui-monospace|ui-rounded|ui-sans-serif|ui-serif|utopia|verdana|webdings|sans-serif|serif|monospace)(?![\\w-])", 1417 "name": "support.constant.font-name.css" 1418 } 1419 ] 1420 }, 1421 "property-names": { 1422 "patterns": [ 1423 { 1424 "match": "(?xi) (?<![\\w-])\n(?:\n # Standard CSS\n accent-color|additive-symbols|align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration\n | animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|aspect-ratio|backdrop-filter\n | backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image\n | background-origin|background-position|background-position-[xy]|background-repeat|background-size|bleed|block-size|border\n | border-block-end|border-block-end-color|border-block-end-style|border-block-end-width|border-block-start|border-block-start-color\n | border-block-start-style|border-block-start-width|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius\n | border-bottom-style|border-bottom-width|border-collapse|border-color|border-end-end-radius|border-end-start-radius|border-image\n | border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-inline-end\n | border-inline-end-color|border-inline-end-style|border-inline-end-width|border-inline-start|border-inline-start-color\n | border-inline-start-style|border-inline-start-width|border-left|border-left-color|border-left-style|border-left-width\n | border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-start-end-radius\n | border-start-start-radius|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style\n | border-top-width|border-width|bottom|box-decoration-break|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side\n | caret-color|clear|clip|clip-path|clip-rule|color|color-adjust|color-interpolation-filters|color-scheme|column-count|column-fill|column-gap\n | column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|contain|container|container-name|container-type|content|counter-increment\n | counter-reset|cursor|direction|display|empty-cells|enable-background|fallback|fill|fill-opacity|fill-rule|filter|flex|flex-basis\n | flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|flood-color|flood-opacity|font|font-display|font-family\n | font-feature-settings|font-kerning|font-language-override|font-optical-sizing|font-size|font-size-adjust|font-stretch\n | font-style|font-synthesis|font-variant|font-variant-alternates|font-variant-caps|font-variant-east-asian|font-variant-ligatures\n | font-variant-numeric|font-variant-position|font-variation-settings|font-weight|gap|glyph-orientation-horizontal|glyph-orientation-vertical\n | grid|grid-area|grid-auto-columns|grid-auto-flow|grid-auto-rows|grid-column|grid-column-end|grid-column-gap|grid-column-start\n | grid-gap|grid-row|grid-row-end|grid-row-gap|grid-row-start|grid-template|grid-template-areas|grid-template-columns|grid-template-rows\n | hanging-punctuation|height|hyphens|image-orientation|image-rendering|image-resolution|ime-mode|initial-letter|initial-letter-align\n | inline-size|inset|inset-block|inset-block-end|inset-block-start|inset-inline|inset-inline-end|inset-inline-start|isolation\n | justify-content|justify-items|justify-self|kerning|left|letter-spacing|lighting-color|line-break|line-clamp|line-height|list-style\n | list-style-image|list-style-position|list-style-type|margin|margin-block|margin-block-end|margin-block-start|margin-bottom|margin-inline|margin-inline-end|margin-inline-start\n | margin-left|margin-right|margin-top|marker-end|marker-mid|marker-start|marks|mask|mask-border|mask-border-mode|mask-border-outset\n | mask-border-repeat|mask-border-slice|mask-border-source|mask-border-width|mask-clip|mask-composite|mask-image|mask-mode\n | mask-origin|mask-position|mask-repeat|mask-size|mask-type|max-block-size|max-height|max-inline-size|max-lines|max-width\n | max-zoom|min-block-size|min-height|min-inline-size|min-width|min-zoom|mix-blend-mode|negative|object-fit|object-position\n | offset|offset-anchor|offset-distance|offset-path|offset-position|offset-rotation|opacity|order|orientation|orphans\n | outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-anchor|overflow-block|overflow-inline\n | overflow-wrap|overflow-[xy]|overscroll-behavior|overscroll-behavior-block|overscroll-behavior-inline|overscroll-behavior-[xy]\n | pad|padding|padding-block|padding-block-end|padding-block-start|padding-bottom|padding-inline|padding-inline-end|padding-inline-start|padding-left\n | padding-right|padding-top|page-break-after|page-break-before|page-break-inside|paint-order|perspective|perspective-origin\n | place-content|place-items|place-self|pointer-events|position|prefix|quotes|range|resize|right|rotate|row-gap|ruby-align\n | ruby-merge|ruby-position|scale|scroll-behavior|scroll-margin|scroll-margin-block|scroll-margin-block-end|scroll-margin-block-start\n | scroll-margin-bottom|scroll-margin-inline|scroll-margin-inline-end|scroll-margin-inline-start|scroll-margin-left|scroll-margin-right\n | scroll-margin-top|scroll-padding|scroll-padding-block|scroll-padding-block-end|scroll-padding-block-start|scroll-padding-bottom\n | scroll-padding-inline|scroll-padding-inline-end|scroll-padding-inline-start|scroll-padding-left|scroll-padding-right\n | scroll-padding-top|scroll-snap-align|scroll-snap-coordinate|scroll-snap-destination|scroll-snap-stop|scroll-snap-type\n | scrollbar-color|scrollbar-gutter|scrollbar-width|shape-image-threshold|shape-margin|shape-outside|shape-rendering|size\n | speak-as|src|stop-color|stop-opacity|stroke|stroke-dasharray|stroke-dashoffset|stroke-linecap|stroke-linejoin|stroke-miterlimit\n | stroke-opacity|stroke-width|suffix|symbols|system|tab-size|table-layout|text-align|text-align-last|text-anchor|text-combine-upright\n | text-decoration|text-decoration-color|text-decoration-line|text-decoration-skip|text-decoration-skip-ink|text-decoration-style|text-decoration-thickness\n | text-emphasis|text-emphasis-color|text-emphasis-position|text-emphasis-style|text-indent|text-justify|text-orientation\n | text-overflow|text-rendering|text-shadow|text-size-adjust|text-transform|text-underline-offset|text-underline-position|top|touch-action|transform\n | transform-box|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function\n | translate|unicode-bidi|unicode-range|user-select|user-zoom|vertical-align|visibility|white-space|widows|width|will-change\n | word-break|word-spacing|word-wrap|writing-mode|z-index|zoom\n\n # SVG attributes\n | alignment-baseline|baseline-shift|clip-rule|color-interpolation|color-interpolation-filters|color-profile\n | color-rendering|cx|cy|dominant-baseline|enable-background|fill|fill-opacity|fill-rule|flood-color|flood-opacity\n | glyph-orientation-horizontal|glyph-orientation-vertical|height|kerning|lighting-color|marker-end|marker-mid\n | marker-start|r|rx|ry|shape-rendering|stop-color|stop-opacity|stroke|stroke-dasharray|stroke-dashoffset|stroke-linecap\n | stroke-linejoin|stroke-miterlimit|stroke-opacity|stroke-width|text-anchor|width|x|y\n\n # Not listed on MDN; presumably deprecated\n | adjust|after|align|align-last|alignment|alignment-adjust|appearance|attachment|azimuth|background-break\n | balance|baseline|before|bidi|binding|bookmark|bookmark-label|bookmark-level|bookmark-target|border-length\n | bottom-color|bottom-left-radius|bottom-right-radius|bottom-style|bottom-width|box|box-align|box-direction\n | box-flex|box-flex-group|box-lines|box-ordinal-group|box-orient|box-pack|break|character|collapse|column\n | column-break-after|column-break-before|count|counter|crop|cue|cue-after|cue-before|decoration|decoration-break\n | delay|display-model|display-role|down|drop|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust\n | drop-initial-before-align|drop-initial-size|drop-initial-value|duration|elevation|emphasis|family|fit|fit-position\n | flex-group|float-offset|gap|grid-columns|grid-rows|hanging-punctuation|header|hyphenate|hyphenate-after|hyphenate-before\n | hyphenate-character|hyphenate-lines|hyphenate-resource|icon|image|increment|indent|index|initial-after-adjust\n | initial-after-align|initial-before-adjust|initial-before-align|initial-size|initial-value|inline-box-align|iteration-count\n | justify|label|left-color|left-style|left-width|length|level|line|line-stacking|line-stacking-ruby|line-stacking-shift\n | line-stacking-strategy|lines|list|mark|mark-after|mark-before|marks|marquee|marquee-direction|marquee-play-count|marquee-speed\n | marquee-style|max|min|model|move-to|name|nav|nav-down|nav-index|nav-left|nav-right|nav-up|new|numeral|offset|ordinal-group\n | orient|origin|overflow-style|overhang|pack|page|page-policy|pause|pause-after|pause-before|phonemes|pitch|pitch-range\n | play-count|play-during|play-state|point|presentation|presentation-level|profile|property|punctuation|punctuation-trim\n | radius|rate|rendering-intent|repeat|replace|reset|resolution|resource|respond-to|rest|rest-after|rest-before|richness\n | right-color|right-style|right-width|role|rotation|rotation-point|rows|ruby|ruby-overhang|ruby-span|rule|rule-color\n | rule-style|rule-width|shadow|size|size-adjust|sizing|space|space-collapse|spacing|span|speak|speak-header|speak-numeral\n | speak-punctuation|speech|speech-rate|speed|stacking|stacking-ruby|stacking-shift|stacking-strategy|stress|stretch\n | string-set|style|style-image|style-position|style-type|target|target-name|target-new|target-position|text|text-height\n | text-justify|text-outline|text-replace|text-wrap|timing-function|top-color|top-left-radius|top-right-radius|top-style\n | top-width|trim|unicode|up|user-select|variant|voice|voice-balance|voice-duration|voice-family|voice-pitch|voice-pitch-range\n | voice-rate|voice-stress|voice-volume|volume|weight|white|white-space-collapse|word|wrap\n)\n(?![\\w-])", 1425 "name": "support.type.property-name.css" 1426 }, 1427 { 1428 "match": "(?<![\\w-])(?i:-(?:ah|apple|atsc|epub|hp|khtml|moz|ms|o|rim|ro|tc|wap|webkit|xv)|(?:mso|prince))-[a-zA-Z-]+", 1429 "name": "support.type.vendored.property-name.css" 1430 } 1431 ] 1432 }, 1433 "property-values": { 1434 "patterns": [ 1435 { 1436 "include": "#commas" 1437 }, 1438 { 1439 "include": "#comment-block" 1440 }, 1441 { 1442 "include": "#escapes" 1443 }, 1444 { 1445 "include": "#functions" 1446 }, 1447 { 1448 "include": "#property-keywords" 1449 }, 1450 { 1451 "include": "#unicode-range" 1452 }, 1453 { 1454 "include": "#numeric-values" 1455 }, 1456 { 1457 "include": "#color-keywords" 1458 }, 1459 { 1460 "include": "#string" 1461 }, 1462 { 1463 "match": "!\\s*important(?![\\w-])", 1464 "name": "keyword.other.important.css" 1465 } 1466 ] 1467 }, 1468 "pseudo-classes": { 1469 "captures": { 1470 "1": { 1471 "name": "punctuation.definition.entity.css" 1472 }, 1473 "2": { 1474 "name": "invalid.illegal.colon.css" 1475 } 1476 }, 1477 "match": "(?xi)\n(:)(:*)\n(?: active|any-link|checked|default|disabled|empty|enabled|first\n | (?:first|last|only)-(?:child|of-type)|focus|focus-visible|focus-within|fullscreen|host|hover\n | in-range|indeterminate|invalid|left|link|optional|out-of-range\n | read-only|read-write|required|right|root|scope|target|unresolved\n | valid|visited\n)(?![\\w-]|\\s*[;}])", 1478 "name": "entity.other.attribute-name.pseudo-class.css" 1479 }, 1480 "pseudo-elements": { 1481 "captures": { 1482 "1": { 1483 "name": "punctuation.definition.entity.css" 1484 }, 1485 "2": { 1486 "name": "punctuation.definition.entity.css" 1487 } 1488 }, 1489 "match": "(?xi)\n(?:\n (::?) # Elements using both : and :: notation\n (?: after\n | before\n | first-letter\n | first-line\n | (?:-(?:ah|apple|atsc|epub|hp|khtml|moz\n |ms|o|rim|ro|tc|wap|webkit|xv)\n | (?:mso|prince))\n -[a-z-]+\n )\n |\n (::) # Double-colon only\n (?: backdrop\n | content\n | grammar-error\n | marker\n | placeholder\n | selection\n | shadow\n | spelling-error\n )\n)\n(?![\\w-]|\\s*[;}])", 1490 "name": "entity.other.attribute-name.pseudo-element.css" 1491 }, 1492 "rule-list": { 1493 "begin": "{", 1494 "beginCaptures": { 1495 "0": { 1496 "name": "punctuation.section.property-list.begin.bracket.curly.css" 1497 } 1498 }, 1499 "end": "}", 1500 "endCaptures": { 1501 "0": { 1502 "name": "punctuation.section.property-list.end.bracket.curly.css" 1503 } 1504 }, 1505 "name": "meta.property-list.css", 1506 "patterns": [ 1507 { 1508 "include": "#rule-list-innards" 1509 } 1510 ] 1511 }, 1512 "rule-list-innards": { 1513 "patterns": [ 1514 { 1515 "include": "#comment-block" 1516 }, 1517 { 1518 "include": "#escapes" 1519 }, 1520 { 1521 "include": "#font-features" 1522 }, 1523 { 1524 "match": "(?x) (?<![\\w-])\n--\n(?:[-a-zA-Z_] | [^\\x00-\\x7F]) # First letter\n(?:[-a-zA-Z0-9_] | [^\\x00-\\x7F] # Remainder of identifier\n |\\\\(?:[0-9a-fA-F]{1,6}|.)\n)*", 1525 "name": "variable.css" 1526 }, 1527 { 1528 "begin": "(?<![-a-zA-Z])(?=[-a-zA-Z])", 1529 "end": "$|(?![-a-zA-Z])", 1530 "name": "meta.property-name.css", 1531 "patterns": [ 1532 { 1533 "include": "#property-names" 1534 } 1535 ] 1536 }, 1537 { 1538 "begin": "(:)\\s*", 1539 "beginCaptures": { 1540 "1": { 1541 "name": "punctuation.separator.key-value.css" 1542 } 1543 }, 1544 "end": "\\s*(;)|\\s*(?=}|\\))", 1545 "endCaptures": { 1546 "1": { 1547 "name": "punctuation.terminator.rule.css" 1548 } 1549 }, 1550 "contentName": "meta.property-value.css", 1551 "patterns": [ 1552 { 1553 "include": "#comment-block" 1554 }, 1555 { 1556 "include": "#property-values" 1557 } 1558 ] 1559 }, 1560 { 1561 "match": ";", 1562 "name": "punctuation.terminator.rule.css" 1563 } 1564 ] 1565 }, 1566 "selector": { 1567 "begin": "(?x)\n(?=\n (?:\\|)? # Possible anonymous namespace prefix\n (?:\n [-\\[:.*\\#a-zA-Z_] # Valid selector character\n |\n [^\\x00-\\x7F] # Which can include non-ASCII symbols\n |\n \\\\ # Or an escape sequence\n (?:[0-9a-fA-F]{1,6}|.)\n )\n)", 1568 "end": "(?=\\s*[/@{)])", 1569 "name": "meta.selector.css", 1570 "patterns": [ 1571 { 1572 "include": "#selector-innards" 1573 } 1574 ] 1575 }, 1576 "selector-innards": { 1577 "patterns": [ 1578 { 1579 "include": "#comment-block" 1580 }, 1581 { 1582 "include": "#commas" 1583 }, 1584 { 1585 "include": "#escapes" 1586 }, 1587 { 1588 "include": "#combinators" 1589 }, 1590 { 1591 "captures": { 1592 "1": { 1593 "name": "entity.other.namespace-prefix.css" 1594 }, 1595 "2": { 1596 "name": "punctuation.separator.css" 1597 } 1598 }, 1599 "match": "(?x)\n(?:^|(?<=[\\s,(};])) # Follows whitespace, comma, semicolon, or bracket\n(?!\n [-\\w*]+\n \\|\n (?!\n [-\\[:.*\\#a-zA-Z_] # Make sure there's a selector to match\n | [^\\x00-\\x7F]\n )\n)\n(\n (?: [-a-zA-Z_] | [^\\x00-\\x7F] ) # First letter\n (?: [-a-zA-Z0-9_] | [^\\x00-\\x7F] # Remainder of identifier\n | \\\\(?:[0-9a-fA-F]{1,6}|.)\n )*\n |\n \\* # Universal namespace\n)?\n(\\|) # Namespace separator" 1600 }, 1601 { 1602 "include": "#tag-names" 1603 }, 1604 { 1605 "match": "\\*", 1606 "name": "entity.name.tag.wildcard.css" 1607 }, 1608 { 1609 "captures": { 1610 "1": { 1611 "name": "punctuation.definition.entity.css" 1612 }, 1613 "2": { 1614 "patterns": [ 1615 { 1616 "include": "#escapes" 1617 } 1618 ] 1619 } 1620 }, 1621 "match": "(?x) (?<![@\\w-])\n([.\\#])\n# Invalid identifier\n(\n (?:\n # Starts with ASCII digits, with possible hyphen preceding it\n -?[0-9]\n |\n # Consists of a hyphen only\n - # Terminated by either:\n (?= $ # - End-of-line\n | [\\s,.\\#)\\[:{>+~|] # - Followed by another selector\n | /\\* # - Followed by a block comment\n )\n |\n # Name contains unescaped ASCII symbol\n (?: # Check for acceptable preceding characters\n [-a-zA-Z_0-9]|[^\\x00-\\x7F] # - Valid selector character\n | \\\\(?:[0-9a-fA-F]{1,6}|.) # - Escape sequence\n )*\n (?: # Invalid punctuation\n [!\"'%&(*;<?@^`|\\]}] # - NOTE: We exempt `)` from the list of checked\n | # symbols to avoid matching `:not(.invalid)`\n / (?!\\*) # - Avoid invalidating the start of a comment\n )+\n )\n # Mark remainder of selector invalid\n (?: [-a-zA-Z_0-9]|[^\\x00-\\x7F] # - Otherwise valid identifier characters\n | \\\\(?:[0-9a-fA-F]{1,6}|.) # - Escape sequence\n )*\n)", 1622 "name": "invalid.illegal.bad-identifier.css" 1623 }, 1624 { 1625 "captures": { 1626 "1": { 1627 "name": "punctuation.definition.entity.css" 1628 }, 1629 "2": { 1630 "patterns": [ 1631 { 1632 "include": "#escapes" 1633 } 1634 ] 1635 } 1636 }, 1637 "match": "(?x)\n(\\.) # Valid class-name\n(\n (?: [-a-zA-Z_0-9]|[^\\x00-\\x7F] # Valid identifier characters\n | \\\\(?:[0-9a-fA-F]{1,6}|.) # Escape sequence\n )+\n) # Followed by either:\n(?= $ # - End of the line\n | [\\s,.\\#)\\[:{>+~|] # - Another selector\n | /\\* # - A block comment\n)", 1638 "name": "entity.other.attribute-name.class.css" 1639 }, 1640 { 1641 "captures": { 1642 "1": { 1643 "name": "punctuation.definition.entity.css" 1644 }, 1645 "2": { 1646 "patterns": [ 1647 { 1648 "include": "#escapes" 1649 } 1650 ] 1651 } 1652 }, 1653 "match": "(?x)\n(\\#)\n(\n -?\n (?![0-9])\n (?:[-a-zA-Z0-9_]|[^\\x00-\\x7F]|\\\\(?:[0-9a-fA-F]{1,6}|.))+\n)\n(?=$|[\\s,.\\#)\\[:{>+~|]|/\\*)", 1654 "name": "entity.other.attribute-name.id.css" 1655 }, 1656 { 1657 "begin": "\\[", 1658 "beginCaptures": { 1659 "0": { 1660 "name": "punctuation.definition.entity.begin.bracket.square.css" 1661 } 1662 }, 1663 "end": "\\]", 1664 "endCaptures": { 1665 "0": { 1666 "name": "punctuation.definition.entity.end.bracket.square.css" 1667 } 1668 }, 1669 "name": "meta.attribute-selector.css", 1670 "patterns": [ 1671 { 1672 "include": "#comment-block" 1673 }, 1674 { 1675 "include": "#string" 1676 }, 1677 { 1678 "captures": { 1679 "1": { 1680 "name": "storage.modifier.ignore-case.css" 1681 } 1682 }, 1683 "match": "(?<=[\"'\\s]|^|\\*/)\\s*([iI])\\s*(?=[\\s\\]]|/\\*|$)" 1684 }, 1685 { 1686 "captures": { 1687 "1": { 1688 "name": "string.unquoted.attribute-value.css", 1689 "patterns": [ 1690 { 1691 "include": "#escapes" 1692 } 1693 ] 1694 } 1695 }, 1696 "match": "(?x)(?<==)\\s*((?!/\\*)(?:[^\\\\\"'\\s\\]]|\\\\.)+)" 1697 }, 1698 { 1699 "include": "#escapes" 1700 }, 1701 { 1702 "match": "[~|^$*]?=", 1703 "name": "keyword.operator.pattern.css" 1704 }, 1705 { 1706 "match": "\\|", 1707 "name": "punctuation.separator.css" 1708 }, 1709 { 1710 "captures": { 1711 "1": { 1712 "name": "entity.other.namespace-prefix.css", 1713 "patterns": [ 1714 { 1715 "include": "#escapes" 1716 } 1717 ] 1718 } 1719 }, 1720 "match": "(?x)\n# Qualified namespace prefix\n( -?(?!\\d)(?:[\\w-]|[^\\x00-\\x7F]|\\\\(?:[0-9a-fA-F]{1,6}|.))+\n| \\*\n)\n# Lookahead to ensure there's a valid identifier ahead\n(?=\n \\| (?!\\s|=|$|\\])\n (?: -?(?!\\d)\n | [\\\\\\w-]\n | [^\\x00-\\x7F]\n )\n)" 1721 }, 1722 { 1723 "captures": { 1724 "1": { 1725 "name": "entity.other.attribute-name.css", 1726 "patterns": [ 1727 { 1728 "include": "#escapes" 1729 } 1730 ] 1731 } 1732 }, 1733 "match": "(?x)\n(-?(?!\\d)(?>[\\w-]|[^\\x00-\\x7F]|\\\\(?:[0-9a-fA-F]{1,6}|.))+)\n\\s*\n(?=[~|^\\]$*=]|/\\*)" 1734 } 1735 ] 1736 }, 1737 { 1738 "include": "#pseudo-classes" 1739 }, 1740 { 1741 "include": "#pseudo-elements" 1742 }, 1743 { 1744 "include": "#functional-pseudo-classes" 1745 }, 1746 { 1747 "match": "(?x) (?<![@\\w-])\n(?= # Custom element names must:\n [a-z] # - start with a lowercase ASCII letter,\n \\w* - # - contain at least one dash\n)\n(?:\n (?![A-Z]) # No uppercase ASCII letters are allowed\n [\\w-] # Allow any other word character or dash\n)+\n(?![(\\w-])", 1748 "name": "entity.name.tag.custom.css" 1749 } 1750 ] 1751 }, 1752 "string": { 1753 "patterns": [ 1754 { 1755 "begin": "\"", 1756 "beginCaptures": { 1757 "0": { 1758 "name": "punctuation.definition.string.begin.css" 1759 } 1760 }, 1761 "end": "\"|(?<!\\\\)(?=$|\\n)", 1762 "endCaptures": { 1763 "0": { 1764 "name": "punctuation.definition.string.end.css" 1765 } 1766 }, 1767 "name": "string.quoted.double.css", 1768 "patterns": [ 1769 { 1770 "begin": "(?:\\G|^)(?=(?:[^\\\\\"]|\\\\.)+$)", 1771 "end": "$", 1772 "name": "invalid.illegal.unclosed.string.css", 1773 "patterns": [ 1774 { 1775 "include": "#escapes" 1776 } 1777 ] 1778 }, 1779 { 1780 "include": "#escapes" 1781 } 1782 ] 1783 }, 1784 { 1785 "begin": "'", 1786 "beginCaptures": { 1787 "0": { 1788 "name": "punctuation.definition.string.begin.css" 1789 } 1790 }, 1791 "end": "'|(?<!\\\\)(?=$|\\n)", 1792 "endCaptures": { 1793 "0": { 1794 "name": "punctuation.definition.string.end.css" 1795 } 1796 }, 1797 "name": "string.quoted.single.css", 1798 "patterns": [ 1799 { 1800 "begin": "(?:\\G|^)(?=(?:[^\\\\']|\\\\.)+$)", 1801 "end": "$", 1802 "name": "invalid.illegal.unclosed.string.css", 1803 "patterns": [ 1804 { 1805 "include": "#escapes" 1806 } 1807 ] 1808 }, 1809 { 1810 "include": "#escapes" 1811 } 1812 ] 1813 } 1814 ] 1815 }, 1816 "tag-names": { 1817 "match": "(?xi) (?<![\\w:-])\n(?:\n # HTML\n a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdi|bdo|bgsound\n | big|blink|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command\n | content|data|datalist|dd|del|details|dfn|dialog|dir|div|dl|dt|element|em|embed|fieldset\n | figcaption|figure|font|footer|form|frame|frameset|h[1-6]|head|header|hgroup|hr|html|i\n | iframe|image|img|input|ins|isindex|kbd|keygen|label|legend|li|link|listing|main|map|mark\n | marquee|math|menu|menuitem|meta|meter|multicol|nav|nextid|nobr|noembed|noframes|noscript\n | object|ol|optgroup|option|output|p|param|picture|plaintext|pre|progress|q|rb|rp|rt|rtc\n | ruby|s|samp|script|section|select|shadow|slot|small|source|spacer|span|strike|strong\n | style|sub|summary|sup|table|tbody|td|template|textarea|tfoot|th|thead|time|title|tr\n | track|tt|u|ul|var|video|wbr|xmp\n\n # SVG\n | altGlyph|altGlyphDef|altGlyphItem|animate|animateColor|animateMotion|animateTransform\n | circle|clipPath|color-profile|cursor|defs|desc|discard|ellipse|feBlend|feColorMatrix\n | feComponentTransfer|feComposite|feConvolveMatrix|feDiffuseLighting|feDisplacementMap\n | feDistantLight|feDropShadow|feFlood|feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur\n | feImage|feMerge|feMergeNode|feMorphology|feOffset|fePointLight|feSpecularLighting\n | feSpotLight|feTile|feTurbulence|filter|font-face|font-face-format|font-face-name\n | font-face-src|font-face-uri|foreignObject|g|glyph|glyphRef|hatch|hatchpath|hkern\n | line|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|metadata\n | missing-glyph|mpath|path|pattern|polygon|polyline|radialGradient|rect|set|solidcolor\n | stop|svg|switch|symbol|text|textPath|tref|tspan|use|view|vkern\n\n # MathML\n | annotation|annotation-xml|maction|maligngroup|malignmark|math|menclose|merror|mfenced\n | mfrac|mglyph|mi|mlabeledtr|mlongdiv|mmultiscripts|mn|mo|mover|mpadded|mphantom|mroot\n | mrow|ms|mscarries|mscarry|msgroup|msline|mspace|msqrt|msrow|mstack|mstyle|msub|msubsup\n | msup|mtable|mtd|mtext|mtr|munder|munderover|semantics\n)\n(?=[+~>\\s,.\\#|){:\\[]|/\\*|$)", 1818 "name": "entity.name.tag.css" 1819 }, 1820 "unicode-range": { 1821 "captures": { 1822 "0": { 1823 "name": "constant.other.unicode-range.css" 1824 }, 1825 "1": { 1826 "name": "punctuation.separator.dash.unicode-range.css" 1827 } 1828 }, 1829 "match": "(?<![\\w-])[Uu]\\+[0-9A-Fa-f?]{1,6}(?:(-)[0-9A-Fa-f]{1,6})?(?![\\w-])" 1830 }, 1831 "url": { 1832 "begin": "(?i)(?<![\\w@-])(url)(\\()", 1833 "beginCaptures": { 1834 "1": { 1835 "name": "support.function.url.css" 1836 }, 1837 "2": { 1838 "name": "punctuation.section.function.begin.bracket.round.css" 1839 } 1840 }, 1841 "end": "\\)", 1842 "endCaptures": { 1843 "0": { 1844 "name": "punctuation.section.function.end.bracket.round.css" 1845 } 1846 }, 1847 "name": "meta.function.url.css", 1848 "patterns": [ 1849 { 1850 "match": "[^'\")\\s]+", 1851 "name": "variable.parameter.url.css" 1852 }, 1853 { 1854 "include": "#string" 1855 }, 1856 { 1857 "include": "#comment-block" 1858 }, 1859 { 1860 "include": "#escapes" 1861 } 1862 ] 1863 } 1864 } 1865 }