View raw

1 { 2 "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", 3 "name": "Vue", 4 "scopeName": "text.html.vue", 5 "patterns": [ 6 { 7 "include": "#vue-comments" 8 }, 9 { 10 "include": "#self-closing-tag" 11 }, 12 { 13 "begin": "(<)", 14 "beginCaptures": { 15 "1": { 16 "name": "punctuation.definition.tag.begin.html.vue" 17 } 18 }, 19 "end": "(>)", 20 "endCaptures": { 21 "1": { 22 "name": "punctuation.definition.tag.end.html.vue" 23 } 24 }, 25 "patterns": [ 26 { 27 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)md\\b\\2)", 28 "beginCaptures": { 29 "1": { 30 "name": "entity.name.tag.$1.html.vue" 31 } 32 }, 33 "end": "(</)(\\1)\\s*(?=>)", 34 "endCaptures": { 35 "1": { 36 "name": "punctuation.definition.tag.begin.html.vue" 37 }, 38 "2": { 39 "name": "entity.name.tag.$2.html.vue" 40 } 41 }, 42 "patterns": [ 43 { 44 "include": "#tag-stuff" 45 }, 46 { 47 "begin": "(?<=>)", 48 "end": "(?=<\\/)", 49 "name": "text.html.markdown", 50 "patterns": [ 51 { 52 "include": "text.html.markdown" 53 } 54 ] 55 } 56 ] 57 }, 58 { 59 "begin": "(?!template(?![A-Za-z0-9:-]))([A-Za-z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)html\\b\\2)", 60 "beginCaptures": { 61 "1": { 62 "name": "entity.name.tag.$1.html.vue" 63 } 64 }, 65 "end": "(</)(\\1)\\s*(?=>)", 66 "endCaptures": { 67 "1": { 68 "name": "punctuation.definition.tag.begin.html.vue" 69 }, 70 "2": { 71 "name": "entity.name.tag.$2.html.vue" 72 } 73 }, 74 "contentName": "text.html.derivative", 75 "patterns": [ 76 { 77 "include": "#tag-stuff" 78 }, 79 { 80 "include": "#html-stuff" 81 } 82 ] 83 }, 84 { 85 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)pug\\b\\2)", 86 "beginCaptures": { 87 "1": { 88 "name": "entity.name.tag.$1.html.vue" 89 } 90 }, 91 "end": "(</)(\\1)\\s*(?=>)", 92 "endCaptures": { 93 "1": { 94 "name": "punctuation.definition.tag.begin.html.vue" 95 }, 96 "2": { 97 "name": "entity.name.tag.$2.html.vue" 98 } 99 }, 100 "patterns": [ 101 { 102 "include": "#tag-stuff" 103 }, 104 { 105 "begin": "(?<=>)", 106 "end": "(?=<\\/)", 107 "name": "text.pug", 108 "patterns": [ 109 { 110 "include": "text.pug" 111 } 112 ] 113 } 114 ] 115 }, 116 { 117 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)stylus\\b\\2)", 118 "beginCaptures": { 119 "1": { 120 "name": "entity.name.tag.$1.html.vue" 121 } 122 }, 123 "end": "(</)(\\1)\\s*(?=>)", 124 "endCaptures": { 125 "1": { 126 "name": "punctuation.definition.tag.begin.html.vue" 127 }, 128 "2": { 129 "name": "entity.name.tag.$2.html.vue" 130 } 131 }, 132 "patterns": [ 133 { 134 "include": "#tag-stuff" 135 }, 136 { 137 "begin": "(?<=>)", 138 "end": "(?=<\\/)", 139 "name": "source.stylus", 140 "patterns": [ 141 { 142 "include": "source.stylus" 143 } 144 ] 145 } 146 ] 147 }, 148 { 149 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)postcss\\b\\2)", 150 "beginCaptures": { 151 "1": { 152 "name": "entity.name.tag.$1.html.vue" 153 } 154 }, 155 "end": "(</)(\\1)\\s*(?=>)", 156 "endCaptures": { 157 "1": { 158 "name": "punctuation.definition.tag.begin.html.vue" 159 }, 160 "2": { 161 "name": "entity.name.tag.$2.html.vue" 162 } 163 }, 164 "patterns": [ 165 { 166 "include": "#tag-stuff" 167 }, 168 { 169 "begin": "(?<=>)", 170 "end": "(?=<\\/)", 171 "name": "source.postcss", 172 "patterns": [ 173 { 174 "include": "source.postcss" 175 } 176 ] 177 } 178 ] 179 }, 180 { 181 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)sass\\b\\2)", 182 "beginCaptures": { 183 "1": { 184 "name": "entity.name.tag.$1.html.vue" 185 } 186 }, 187 "end": "(</)(\\1)\\s*(?=>)", 188 "endCaptures": { 189 "1": { 190 "name": "punctuation.definition.tag.begin.html.vue" 191 }, 192 "2": { 193 "name": "entity.name.tag.$2.html.vue" 194 } 195 }, 196 "patterns": [ 197 { 198 "include": "#tag-stuff" 199 }, 200 { 201 "begin": "(?<=>)", 202 "end": "(?=<\\/)", 203 "name": "source.sass", 204 "patterns": [ 205 { 206 "include": "source.sass" 207 } 208 ] 209 } 210 ] 211 }, 212 { 213 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)css\\b\\2)", 214 "beginCaptures": { 215 "1": { 216 "name": "entity.name.tag.$1.html.vue" 217 } 218 }, 219 "end": "(</)(\\1)\\s*(?=>)", 220 "endCaptures": { 221 "1": { 222 "name": "punctuation.definition.tag.begin.html.vue" 223 }, 224 "2": { 225 "name": "entity.name.tag.$2.html.vue" 226 } 227 }, 228 "patterns": [ 229 { 230 "include": "#tag-stuff" 231 }, 232 { 233 "begin": "(?<=>)", 234 "end": "(?=<\\/)", 235 "name": "source.css", 236 "patterns": [ 237 { 238 "include": "source.css" 239 } 240 ] 241 } 242 ] 243 }, 244 { 245 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)scss\\b\\2)", 246 "beginCaptures": { 247 "1": { 248 "name": "entity.name.tag.$1.html.vue" 249 } 250 }, 251 "end": "(</)(\\1)\\s*(?=>)", 252 "endCaptures": { 253 "1": { 254 "name": "punctuation.definition.tag.begin.html.vue" 255 }, 256 "2": { 257 "name": "entity.name.tag.$2.html.vue" 258 } 259 }, 260 "patterns": [ 261 { 262 "include": "#tag-stuff" 263 }, 264 { 265 "begin": "(?<=>)", 266 "end": "(?=<\\/)", 267 "name": "source.css.scss", 268 "patterns": [ 269 { 270 "include": "source.css.scss" 271 } 272 ] 273 } 274 ] 275 }, 276 { 277 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)less\\b\\2)", 278 "beginCaptures": { 279 "1": { 280 "name": "entity.name.tag.$1.html.vue" 281 } 282 }, 283 "end": "(</)(\\1)\\s*(?=>)", 284 "endCaptures": { 285 "1": { 286 "name": "punctuation.definition.tag.begin.html.vue" 287 }, 288 "2": { 289 "name": "entity.name.tag.$2.html.vue" 290 } 291 }, 292 "patterns": [ 293 { 294 "include": "#tag-stuff" 295 }, 296 { 297 "begin": "(?<=>)", 298 "end": "(?=<\\/)", 299 "name": "source.css.less", 300 "patterns": [ 301 { 302 "include": "source.css.less" 303 } 304 ] 305 } 306 ] 307 }, 308 { 309 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)js\\b\\2)", 310 "beginCaptures": { 311 "1": { 312 "name": "entity.name.tag.$1.html.vue" 313 } 314 }, 315 "end": "(</)(\\1)\\s*(?=>)", 316 "endCaptures": { 317 "1": { 318 "name": "punctuation.definition.tag.begin.html.vue" 319 }, 320 "2": { 321 "name": "entity.name.tag.$2.html.vue" 322 } 323 }, 324 "patterns": [ 325 { 326 "include": "#tag-stuff" 327 }, 328 { 329 "begin": "(?<=>)", 330 "end": "(?=<\\/)", 331 "name": "source.js", 332 "patterns": [ 333 { 334 "include": "source.js" 335 } 336 ] 337 } 338 ] 339 }, 340 { 341 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)ts\\b\\2)", 342 "beginCaptures": { 343 "1": { 344 "name": "entity.name.tag.$1.html.vue" 345 } 346 }, 347 "end": "(</)(\\1)\\s*(?=>)", 348 "endCaptures": { 349 "1": { 350 "name": "punctuation.definition.tag.begin.html.vue" 351 }, 352 "2": { 353 "name": "entity.name.tag.$2.html.vue" 354 } 355 }, 356 "patterns": [ 357 { 358 "include": "#tag-stuff" 359 }, 360 { 361 "begin": "(?<=>)(?=[^\\n]*<\\/script[\\s>])", 362 "end": "(?=<\\/script[\\s>])", 363 "name": "source.ts", 364 "patterns": [ 365 { 366 "include": "source.ts" 367 } 368 ] 369 }, 370 { 371 "begin": "(?<=>)", 372 "while": "^(?!\\s*<\\/script[\\s>])", 373 "name": "source.ts", 374 "patterns": [ 375 { 376 "include": "source.ts" 377 } 378 ] 379 } 380 ] 381 }, 382 { 383 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)jsx\\b\\2)", 384 "beginCaptures": { 385 "1": { 386 "name": "entity.name.tag.$1.html.vue" 387 } 388 }, 389 "end": "(</)(\\1)\\s*(?=>)", 390 "endCaptures": { 391 "1": { 392 "name": "punctuation.definition.tag.begin.html.vue" 393 }, 394 "2": { 395 "name": "entity.name.tag.$2.html.vue" 396 } 397 }, 398 "patterns": [ 399 { 400 "include": "#tag-stuff" 401 }, 402 { 403 "begin": "(?<=>)", 404 "end": "(?=<\\/)", 405 "name": "source.js.jsx", 406 "patterns": [ 407 { 408 "include": "source.js.jsx" 409 } 410 ] 411 } 412 ] 413 }, 414 { 415 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)tsx\\b\\2)", 416 "beginCaptures": { 417 "1": { 418 "name": "entity.name.tag.$1.html.vue" 419 } 420 }, 421 "end": "(</)(\\1)\\s*(?=>)", 422 "endCaptures": { 423 "1": { 424 "name": "punctuation.definition.tag.begin.html.vue" 425 }, 426 "2": { 427 "name": "entity.name.tag.$2.html.vue" 428 } 429 }, 430 "patterns": [ 431 { 432 "include": "#tag-stuff" 433 }, 434 { 435 "begin": "(?<=>)(?=[^\\n]*<\\/script[\\s>])", 436 "end": "(?=<\\/script[\\s>])", 437 "name": "source.tsx", 438 "patterns": [ 439 { 440 "include": "source.tsx" 441 } 442 ] 443 }, 444 { 445 "begin": "(?<=>)", 446 "while": "^(?!\\s*<\\/script[\\s>])", 447 "name": "source.tsx", 448 "patterns": [ 449 { 450 "include": "source.tsx" 451 } 452 ] 453 } 454 ] 455 }, 456 { 457 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)coffee\\b\\2)", 458 "beginCaptures": { 459 "1": { 460 "name": "entity.name.tag.$1.html.vue" 461 } 462 }, 463 "end": "(</)(\\1)\\s*(?=>)", 464 "endCaptures": { 465 "1": { 466 "name": "punctuation.definition.tag.begin.html.vue" 467 }, 468 "2": { 469 "name": "entity.name.tag.$2.html.vue" 470 } 471 }, 472 "patterns": [ 473 { 474 "include": "#tag-stuff" 475 }, 476 { 477 "begin": "(?<=>)", 478 "end": "(?=<\\/)", 479 "name": "source.coffee", 480 "patterns": [ 481 { 482 "include": "source.coffee" 483 } 484 ] 485 } 486 ] 487 }, 488 { 489 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)json\\b\\2)", 490 "beginCaptures": { 491 "1": { 492 "name": "entity.name.tag.$1.html.vue" 493 } 494 }, 495 "end": "(</)(\\1)\\s*(?=>)", 496 "endCaptures": { 497 "1": { 498 "name": "punctuation.definition.tag.begin.html.vue" 499 }, 500 "2": { 501 "name": "entity.name.tag.$2.html.vue" 502 } 503 }, 504 "patterns": [ 505 { 506 "include": "#tag-stuff" 507 }, 508 { 509 "begin": "(?<=>)", 510 "end": "(?=<\\/)", 511 "name": "source.json", 512 "patterns": [ 513 { 514 "include": "source.json" 515 } 516 ] 517 } 518 ] 519 }, 520 { 521 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)jsonc\\b\\2)", 522 "beginCaptures": { 523 "1": { 524 "name": "entity.name.tag.$1.html.vue" 525 } 526 }, 527 "end": "(</)(\\1)\\s*(?=>)", 528 "endCaptures": { 529 "1": { 530 "name": "punctuation.definition.tag.begin.html.vue" 531 }, 532 "2": { 533 "name": "entity.name.tag.$2.html.vue" 534 } 535 }, 536 "patterns": [ 537 { 538 "include": "#tag-stuff" 539 }, 540 { 541 "begin": "(?<=>)", 542 "end": "(?=<\\/)", 543 "name": "source.json.comments", 544 "patterns": [ 545 { 546 "include": "source.json.comments" 547 } 548 ] 549 } 550 ] 551 }, 552 { 553 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)json5\\b\\2)", 554 "beginCaptures": { 555 "1": { 556 "name": "entity.name.tag.$1.html.vue" 557 } 558 }, 559 "end": "(</)(\\1)\\s*(?=>)", 560 "endCaptures": { 561 "1": { 562 "name": "punctuation.definition.tag.begin.html.vue" 563 }, 564 "2": { 565 "name": "entity.name.tag.$2.html.vue" 566 } 567 }, 568 "patterns": [ 569 { 570 "include": "#tag-stuff" 571 }, 572 { 573 "begin": "(?<=>)", 574 "end": "(?=<\\/)", 575 "name": "source.json5", 576 "patterns": [ 577 { 578 "include": "source.json5" 579 } 580 ] 581 } 582 ] 583 }, 584 { 585 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)yaml\\b\\2)", 586 "beginCaptures": { 587 "1": { 588 "name": "entity.name.tag.$1.html.vue" 589 } 590 }, 591 "end": "(</)(\\1)\\s*(?=>)", 592 "endCaptures": { 593 "1": { 594 "name": "punctuation.definition.tag.begin.html.vue" 595 }, 596 "2": { 597 "name": "entity.name.tag.$2.html.vue" 598 } 599 }, 600 "patterns": [ 601 { 602 "include": "#tag-stuff" 603 }, 604 { 605 "begin": "(?<=>)", 606 "end": "(?=<\\/)", 607 "name": "source.yaml", 608 "patterns": [ 609 { 610 "include": "source.yaml" 611 } 612 ] 613 } 614 ] 615 }, 616 { 617 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)toml\\b\\2)", 618 "beginCaptures": { 619 "1": { 620 "name": "entity.name.tag.$1.html.vue" 621 } 622 }, 623 "end": "(</)(\\1)\\s*(?=>)", 624 "endCaptures": { 625 "1": { 626 "name": "punctuation.definition.tag.begin.html.vue" 627 }, 628 "2": { 629 "name": "entity.name.tag.$2.html.vue" 630 } 631 }, 632 "patterns": [ 633 { 634 "include": "#tag-stuff" 635 }, 636 { 637 "begin": "(?<=>)", 638 "end": "(?=<\\/)", 639 "name": "source.toml", 640 "patterns": [ 641 { 642 "include": "source.toml" 643 } 644 ] 645 } 646 ] 647 }, 648 { 649 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)(gql|graphql)\\b\\2)", 650 "beginCaptures": { 651 "1": { 652 "name": "entity.name.tag.$1.html.vue" 653 } 654 }, 655 "end": "(</)(\\1)\\s*(?=>)", 656 "endCaptures": { 657 "1": { 658 "name": "punctuation.definition.tag.begin.html.vue" 659 }, 660 "2": { 661 "name": "entity.name.tag.$2.html.vue" 662 } 663 }, 664 "patterns": [ 665 { 666 "include": "#tag-stuff" 667 }, 668 { 669 "begin": "(?<=>)", 670 "end": "(?=<\\/)", 671 "name": "source.graphql", 672 "patterns": [ 673 { 674 "include": "source.graphql" 675 } 676 ] 677 } 678 ] 679 }, 680 { 681 "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)vue\\b\\2)", 682 "beginCaptures": { 683 "1": { 684 "name": "entity.name.tag.$1.html.vue" 685 } 686 }, 687 "end": "(</)(\\1)\\s*(?=>)", 688 "endCaptures": { 689 "1": { 690 "name": "punctuation.definition.tag.begin.html.vue" 691 }, 692 "2": { 693 "name": "entity.name.tag.$2.html.vue" 694 } 695 }, 696 "patterns": [ 697 { 698 "include": "#tag-stuff" 699 }, 700 { 701 "begin": "(?<=>)", 702 "end": "(?=<\\/)", 703 "name": "text.html.vue", 704 "patterns": [ 705 { 706 "include": "text.html.vue" 707 } 708 ] 709 } 710 ] 711 }, 712 { 713 "begin": "(template)(?=\\s|\\/?>)", 714 "beginCaptures": { 715 "1": { 716 "name": "entity.name.tag.$1.html.vue" 717 } 718 }, 719 "end": "(</)(\\1)\\s*(?=>)", 720 "endCaptures": { 721 "1": { 722 "name": "punctuation.definition.tag.begin.html.vue" 723 }, 724 "2": { 725 "name": "entity.name.tag.$2.html.vue" 726 } 727 }, 728 "patterns": [ 729 { 730 "include": "#tag-stuff" 731 }, 732 { 733 "begin": "(?<=>)", 734 "end": "(?=<\\/template[\\s>])", 735 "name": "text.html.derivative", 736 "patterns": [ 737 { 738 "include": "#html-stuff" 739 } 740 ] 741 } 742 ] 743 }, 744 { 745 "begin": "(script)(?=\\s|\\/?>)", 746 "beginCaptures": { 747 "1": { 748 "name": "entity.name.tag.$1.html.vue" 749 } 750 }, 751 "end": "(</)(\\1)\\s*(?=>)", 752 "endCaptures": { 753 "1": { 754 "name": "punctuation.definition.tag.begin.html.vue" 755 }, 756 "2": { 757 "name": "entity.name.tag.$2.html.vue" 758 } 759 }, 760 "patterns": [ 761 { 762 "include": "#multi-line-script-tag-stuff" 763 } 764 ] 765 }, 766 { 767 "begin": "(style)(?=\\s|\\/?>)", 768 "beginCaptures": { 769 "1": { 770 "name": "entity.name.tag.$1.html.vue" 771 } 772 }, 773 "end": "(</)(\\1)\\s*(?=>)", 774 "endCaptures": { 775 "1": { 776 "name": "punctuation.definition.tag.begin.html.vue" 777 }, 778 "2": { 779 "name": "entity.name.tag.$2.html.vue" 780 } 781 }, 782 "patterns": [ 783 { 784 "include": "#multi-line-style-tag-stuff" 785 } 786 ] 787 }, 788 { 789 "begin": "([a-zA-Z0-9:-]+)", 790 "beginCaptures": { 791 "1": { 792 "name": "entity.name.tag.$1.html.vue" 793 } 794 }, 795 "end": "(</)(\\1)\\s*(?=>)", 796 "endCaptures": { 797 "1": { 798 "name": "punctuation.definition.tag.begin.html.vue" 799 }, 800 "2": { 801 "name": "entity.name.tag.$2.html.vue" 802 } 803 }, 804 "patterns": [ 805 { 806 "include": "#tag-stuff" 807 }, 808 { 809 "begin": "(?<=>)", 810 "end": "(?=<\\/)", 811 "name": "text" 812 } 813 ] 814 } 815 ] 816 } 817 ], 818 "repository": { 819 "multi-line-script-tag-stuff": { 820 "begin": "\\G", 821 "end": "(?=<\\/script[\\s>])", 822 "patterns": [ 823 { 824 "begin": "\\G(?!\\blang\\s*=\\s*(?:['\"]?)(?:ts|tsx|jsx|coffee)\\b)", 825 "end": "(?=\\blang\\s*=\\s*(?:['\"]?)(?:ts|tsx|jsx|coffee)\\b)|(>)", 826 "endCaptures": { 827 "1": { 828 "name": "punctuation.definition.tag.end.html.vue" 829 } 830 }, 831 "name": "meta.tag-stuff", 832 "patterns": [ 833 { 834 "include": "#vue-directives" 835 }, 836 { 837 "include": "text.html.basic#attribute" 838 } 839 ] 840 }, 841 { 842 "begin": "(?=\\blang\\s*=\\s*(?:['\"]?)ts\\b)", 843 "end": "(?=<\\/script[\\s>])", 844 "patterns": [ 845 { 846 "include": "#tag-stuff" 847 }, 848 { 849 "begin": "(?<=>)(?=[^\\n]*<\\/script[\\s>])", 850 "end": "(?=<\\/script[\\s>])", 851 "name": "source.ts", 852 "patterns": [ 853 { 854 "include": "source.ts" 855 } 856 ] 857 }, 858 { 859 "begin": "(?<=>)", 860 "while": "^(?!\\s*<\\/script[\\s>])", 861 "name": "source.ts", 862 "patterns": [ 863 { 864 "include": "source.ts" 865 } 866 ] 867 } 868 ] 869 }, 870 { 871 "begin": "(?=\\blang\\s*=\\s*(?:['\"]?)tsx\\b)", 872 "end": "(?=<\\/script[\\s>])", 873 "patterns": [ 874 { 875 "include": "#tag-stuff" 876 }, 877 { 878 "begin": "(?<=>)(?=[^\\n]*<\\/script[\\s>])", 879 "end": "(?=<\\/script[\\s>])", 880 "name": "source.tsx", 881 "patterns": [ 882 { 883 "include": "source.tsx" 884 } 885 ] 886 }, 887 { 888 "begin": "(?<=>)", 889 "while": "^(?!\\s*<\\/script[\\s>])", 890 "name": "source.tsx", 891 "patterns": [ 892 { 893 "include": "source.tsx" 894 } 895 ] 896 } 897 ] 898 }, 899 { 900 "begin": "(?=\\blang\\s*=\\s*(?:['\"]?)jsx\\b)", 901 "end": "(?=<\\/script[\\s>])", 902 "patterns": [ 903 { 904 "include": "#tag-stuff" 905 }, 906 { 907 "begin": "(?<=>)", 908 "end": "(?=<\\/script[\\s>])", 909 "name": "source.js.jsx", 910 "patterns": [ 911 { 912 "include": "source.js.jsx" 913 } 914 ] 915 } 916 ] 917 }, 918 { 919 "begin": "(?=\\blang\\s*=\\s*(?:['\"]?)coffee\\b)", 920 "end": "(?=<\\/script[\\s>])", 921 "patterns": [ 922 { 923 "include": "#tag-stuff" 924 }, 925 { 926 "begin": "(?<=>)", 927 "end": "(?=<\\/script[\\s>])", 928 "name": "source.coffee", 929 "patterns": [ 930 { 931 "include": "source.coffee" 932 } 933 ] 934 } 935 ] 936 }, 937 { 938 "begin": "(?<=>)", 939 "end": "(?=<\\/script[\\s>])", 940 "name": "source.js", 941 "patterns": [ 942 { 943 "include": "source.js" 944 } 945 ] 946 } 947 ] 948 }, 949 "multi-line-style-tag-stuff": { 950 "begin": "\\G", 951 "end": "(?=<\\/style[\\s>])", 952 "patterns": [ 953 { 954 "begin": "\\G(?!\\blang\\s*=\\s*(?:['\"]?)(?:scss|stylus|less|postcss)\\b)", 955 "end": "(?=\\blang\\s*=\\s*(?:['\"]?)(?:scss|stylus|less|postcss)\\b)|(>)", 956 "endCaptures": { 957 "1": { 958 "name": "punctuation.definition.tag.end.html.vue" 959 } 960 }, 961 "name": "meta.tag-stuff", 962 "patterns": [ 963 { 964 "include": "#vue-directives" 965 }, 966 { 967 "include": "text.html.basic#attribute" 968 } 969 ] 970 }, 971 { 972 "begin": "(?=\\blang\\s*=\\s*(?:['\"]?)scss\\b)", 973 "end": "(?=<\\/style[\\s>])", 974 "patterns": [ 975 { 976 "include": "#tag-stuff" 977 }, 978 { 979 "begin": "(?<=>)", 980 "end": "(?=<\\/style[\\s>])", 981 "name": "source.css.scss", 982 "patterns": [ 983 { 984 "include": "source.css.scss" 985 } 986 ] 987 } 988 ] 989 }, 990 { 991 "begin": "(?=\\blang\\s*=\\s*(?:['\"]?)stylus\\b)", 992 "end": "(?=<\\/style[\\s>])", 993 "patterns": [ 994 { 995 "include": "#tag-stuff" 996 }, 997 { 998 "begin": "(?<=>)", 999 "end": "(?=<\\/style[\\s>])", 1000 "name": "source.stylus", 1001 "patterns": [ 1002 { 1003 "include": "source.stylus" 1004 } 1005 ] 1006 } 1007 ] 1008 }, 1009 { 1010 "begin": "(?=\\blang\\s*=\\s*(?:['\"]?)less\\b)", 1011 "end": "(?=<\\/style[\\s>])", 1012 "patterns": [ 1013 { 1014 "include": "#tag-stuff" 1015 }, 1016 { 1017 "begin": "(?<=>)", 1018 "end": "(?=<\\/style[\\s>])", 1019 "name": "source.css.less", 1020 "patterns": [ 1021 { 1022 "include": "source.css.less" 1023 } 1024 ] 1025 } 1026 ] 1027 }, 1028 { 1029 "begin": "(?=\\blang\\s*=\\s*(?:['\"]?)postcss\\b)", 1030 "end": "(?=<\\/style[\\s>])", 1031 "patterns": [ 1032 { 1033 "include": "#tag-stuff" 1034 }, 1035 { 1036 "begin": "(?<=>)", 1037 "end": "(?=<\\/style[\\s>])", 1038 "name": "source.postcss", 1039 "patterns": [ 1040 { 1041 "include": "source.postcss" 1042 } 1043 ] 1044 } 1045 ] 1046 }, 1047 { 1048 "begin": "(?<=>)", 1049 "end": "(?=<\\/style[\\s>])", 1050 "name": "source.css", 1051 "patterns": [ 1052 { 1053 "include": "source.css" 1054 } 1055 ] 1056 } 1057 ] 1058 }, 1059 "self-closing-tag": { 1060 "begin": "(<)([a-zA-Z0-9:-]+)(?=([^>]+/>))", 1061 "beginCaptures": { 1062 "1": { 1063 "name": "punctuation.definition.tag.begin.html.vue" 1064 }, 1065 "2": { 1066 "name": "entity.name.tag.$2.html.vue" 1067 } 1068 }, 1069 "end": "(/>)", 1070 "endCaptures": { 1071 "1": { 1072 "name": "punctuation.definition.tag.end.html.vue" 1073 } 1074 }, 1075 "name": "self-closing-tag", 1076 "patterns": [ 1077 { 1078 "include": "#tag-stuff" 1079 } 1080 ] 1081 }, 1082 "capitalized-tag": { 1083 "begin": "(<)([A-Z][a-zA-Z0-9:-]*)(?=\\s|/?>)", 1084 "beginCaptures": { 1085 "1": { 1086 "name": "punctuation.definition.tag.begin.html.vue" 1087 }, 1088 "2": { 1089 "name": "entity.name.tag.html.vue" 1090 } 1091 }, 1092 "end": "/?>", 1093 "endCaptures": { 1094 "0": { 1095 "name": "punctuation.definition.tag.end.html.vue" 1096 } 1097 }, 1098 "name": "meta.tag.structure.$2.start.html.vue", 1099 "patterns": [ 1100 { 1101 "begin": "\\G", 1102 "end": "(?=/?>)", 1103 "patterns": [ 1104 { 1105 "include": "#vue-directives" 1106 }, 1107 { 1108 "include": "text.html.basic#attribute" 1109 } 1110 ] 1111 } 1112 ] 1113 }, 1114 "template-tag": { 1115 "patterns": [ 1116 { 1117 "include": "#template-tag-1" 1118 }, 1119 { 1120 "include": "#template-tag-2" 1121 } 1122 ] 1123 }, 1124 "template-tag-1": { 1125 "begin": "(<)(template)\\b(>)", 1126 "beginCaptures": { 1127 "1": { 1128 "name": "punctuation.definition.tag.begin.html.vue" 1129 }, 1130 "2": { 1131 "name": "entity.name.tag.$2.html.vue" 1132 }, 1133 "3": { 1134 "name": "punctuation.definition.tag.end.html.vue" 1135 } 1136 }, 1137 "end": "(/?>)", 1138 "endCaptures": { 1139 "1": { 1140 "name": "punctuation.definition.tag.end.html.vue" 1141 } 1142 }, 1143 "name": "meta.template-tag.start", 1144 "patterns": [ 1145 { 1146 "begin": "\\G", 1147 "end": "(?=/>)|((</)(template)(?=[\\s>]))", 1148 "endCaptures": { 1149 "2": { 1150 "name": "punctuation.definition.tag.begin.html.vue" 1151 }, 1152 "3": { 1153 "name": "entity.name.tag.$3.html.vue" 1154 } 1155 }, 1156 "name": "meta.template-tag.end", 1157 "patterns": [ 1158 { 1159 "include": "#html-stuff" 1160 } 1161 ] 1162 } 1163 ] 1164 }, 1165 "template-tag-2": { 1166 "begin": "(<)(template)(?=\\s|\\/?>)", 1167 "beginCaptures": { 1168 "1": { 1169 "name": "punctuation.definition.tag.begin.html.vue" 1170 }, 1171 "2": { 1172 "name": "entity.name.tag.$2.html.vue" 1173 } 1174 }, 1175 "end": "(/?>)", 1176 "endCaptures": { 1177 "1": { 1178 "name": "punctuation.definition.tag.end.html.vue" 1179 } 1180 }, 1181 "name": "meta.template-tag.start", 1182 "patterns": [ 1183 { 1184 "begin": "\\G", 1185 "end": "(?=/>)|((</)(template)(?=[\\s>]))", 1186 "endCaptures": { 1187 "2": { 1188 "name": "punctuation.definition.tag.begin.html.vue" 1189 }, 1190 "3": { 1191 "name": "entity.name.tag.$3.html.vue" 1192 } 1193 }, 1194 "name": "meta.template-tag.end", 1195 "patterns": [ 1196 { 1197 "include": "#tag-stuff" 1198 }, 1199 { 1200 "include": "#html-stuff" 1201 } 1202 ] 1203 } 1204 ] 1205 }, 1206 "html-stuff": { 1207 "patterns": [ 1208 { 1209 "include": "#template-tag" 1210 }, 1211 { 1212 "include": "#capitalized-tag" 1213 }, 1214 { 1215 "include": "text.html.derivative" 1216 }, 1217 { 1218 "include": "text.html.basic" 1219 } 1220 ] 1221 }, 1222 "tag-stuff": { 1223 "begin": "\\G", 1224 "end": "(?=/>)|(>)", 1225 "endCaptures": { 1226 "1": { 1227 "name": "punctuation.definition.tag.end.html.vue" 1228 } 1229 }, 1230 "name": "meta.tag-stuff", 1231 "patterns": [ 1232 { 1233 "include": "#vue-directives" 1234 }, 1235 { 1236 "include": "text.html.basic#attribute" 1237 } 1238 ] 1239 }, 1240 "vue-directives": { 1241 "patterns": [ 1242 { 1243 "include": "#vue-directives-control" 1244 }, 1245 { 1246 "include": "#vue-directives-generic-attr" 1247 }, 1248 { 1249 "include": "#vue-directives-style-attr" 1250 }, 1251 { 1252 "include": "#vue-directives-original" 1253 } 1254 ] 1255 }, 1256 "vue-directives-original": { 1257 "begin": "(?:(?:(v-[\\w-]+)(:)?)|([:\\.])|(@)|(#))(?:(?:(\\[)([^\\]]*)(\\]))|([\\w-]+))?", 1258 "beginCaptures": { 1259 "1": { 1260 "name": "entity.other.attribute-name.html.vue" 1261 }, 1262 "2": { 1263 "name": "punctuation.separator.key-value.html.vue" 1264 }, 1265 "3": { 1266 "name": "punctuation.attribute-shorthand.bind.html.vue" 1267 }, 1268 "4": { 1269 "name": "punctuation.attribute-shorthand.event.html.vue" 1270 }, 1271 "5": { 1272 "name": "punctuation.attribute-shorthand.slot.html.vue" 1273 }, 1274 "6": { 1275 "name": "punctuation.separator.key-value.html.vue" 1276 }, 1277 "7": { 1278 "name": "source.ts.embedded.html.vue", 1279 "patterns": [ 1280 { 1281 "include": "source.ts#expression" 1282 } 1283 ] 1284 }, 1285 "8": { 1286 "name": "punctuation.separator.key-value.html.vue" 1287 }, 1288 "9": { 1289 "name": "entity.other.attribute-name.html.vue" 1290 } 1291 }, 1292 "end": "(?=\\s*[^=\\s])", 1293 "name": "meta.attribute.directive.vue", 1294 "patterns": [ 1295 { 1296 "match": "(\\.)([\\w-]*)", 1297 "1": { 1298 "name": "punctuation.separator.key-value.html.vue" 1299 }, 1300 "2": { 1301 "name": "entity.other.attribute-name.html.vue" 1302 } 1303 }, 1304 { 1305 "include": "#vue-directives-expression" 1306 } 1307 ] 1308 }, 1309 "vue-directives-control": { 1310 "begin": "(?:(v-for)|(v-if|v-else-if|v-else))(?=[=/>)\\s])", 1311 "beginCaptures": { 1312 "1": { 1313 "name": "keyword.control.loop.vue" 1314 }, 1315 "2": { 1316 "name": "keyword.control.conditional.vue" 1317 } 1318 }, 1319 "end": "(?=\\s*[^=\\s])", 1320 "name": "meta.attribute.directive.control.vue", 1321 "patterns": [ 1322 { 1323 "include": "#vue-directives-expression" 1324 } 1325 ] 1326 }, 1327 "vue-directives-expression": { 1328 "patterns": [ 1329 { 1330 "begin": "(=)\\s*('|\"|`)", 1331 "beginCaptures": { 1332 "1": { 1333 "name": "punctuation.separator.key-value.html.vue" 1334 }, 1335 "2": { 1336 "name": "punctuation.definition.string.begin.html.vue" 1337 } 1338 }, 1339 "end": "(\\2)", 1340 "endCaptures": { 1341 "1": { 1342 "name": "punctuation.definition.string.end.html.vue" 1343 } 1344 }, 1345 "patterns": [ 1346 { 1347 "begin": "(?<=('|\"|`))", 1348 "end": "(?=\\1)", 1349 "name": "source.ts.embedded.html.vue", 1350 "patterns": [ 1351 { 1352 "include": "source.ts#expression" 1353 } 1354 ] 1355 } 1356 ] 1357 }, 1358 { 1359 "begin": "(=)\\s*(?=[^'\"`])", 1360 "beginCaptures": { 1361 "1": { 1362 "name": "punctuation.separator.key-value.html.vue" 1363 } 1364 }, 1365 "end": "(?=(\\s|>|\\/>))", 1366 "patterns": [ 1367 { 1368 "begin": "(?=[^'\"`])", 1369 "end": "(?=(\\s|>|\\/>))", 1370 "name": "source.ts.embedded.html.vue", 1371 "patterns": [ 1372 { 1373 "include": "source.ts#expression" 1374 } 1375 ] 1376 } 1377 ] 1378 } 1379 ] 1380 }, 1381 "vue-directives-style-attr": { 1382 "begin": "\\b(style)\\s*(=)", 1383 "beginCaptures": { 1384 "1": { 1385 "name": "entity.other.attribute-name.html.vue" 1386 }, 1387 "2": { 1388 "name": "punctuation.separator.key-value.html.vue" 1389 } 1390 }, 1391 "end": "(?<='|\")", 1392 "name": "meta.attribute.style.vue", 1393 "patterns": [ 1394 { 1395 "comment": "Copy from source.css#rule-list-innards", 1396 "begin": "('|\")", 1397 "beginCaptures": { 1398 "1": { 1399 "name": "punctuation.definition.string.begin.html.vue" 1400 } 1401 }, 1402 "end": "(\\1)", 1403 "endCaptures": { 1404 "1": { 1405 "name": "punctuation.definition.string.end.html.vue" 1406 } 1407 }, 1408 "name": "source.css.embedded.html.vue", 1409 "patterns": [ 1410 { 1411 "include": "source.css#comment-block" 1412 }, 1413 { 1414 "include": "source.css#escapes" 1415 }, 1416 { 1417 "include": "source.css#font-features" 1418 }, 1419 { 1420 "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)*", 1421 "name": "variable.css" 1422 }, 1423 { 1424 "begin": "(?<![-a-zA-Z])(?=[-a-zA-Z])", 1425 "end": "$|(?![-a-zA-Z])", 1426 "name": "meta.property-name.css", 1427 "patterns": [ 1428 { 1429 "include": "source.css#property-names" 1430 } 1431 ] 1432 }, 1433 { 1434 "comment": "Modify end to fix #199. TODO: handle ' character.", 1435 "begin": "(:)\\s*", 1436 "beginCaptures": { 1437 "1": { 1438 "name": "punctuation.separator.key-value.css" 1439 } 1440 }, 1441 "end": "\\s*(;)|\\s*(?='|\")", 1442 "endCaptures": { 1443 "1": { 1444 "name": "punctuation.terminator.rule.css" 1445 } 1446 }, 1447 "contentName": "meta.property-value.css", 1448 "patterns": [ 1449 { 1450 "include": "source.css#comment-block" 1451 }, 1452 { 1453 "include": "source.css#property-values" 1454 } 1455 ] 1456 }, 1457 { 1458 "match": ";", 1459 "name": "punctuation.terminator.rule.css" 1460 } 1461 ] 1462 } 1463 ] 1464 }, 1465 "vue-directives-generic-attr": { 1466 "begin": "\\b(generic)\\s*(=)", 1467 "beginCaptures": { 1468 "1": { 1469 "name": "entity.other.attribute-name.html.vue" 1470 }, 1471 "2": { 1472 "name": "punctuation.separator.key-value.html.vue" 1473 } 1474 }, 1475 "end": "(?<='|\")", 1476 "name": "meta.attribute.generic.vue", 1477 "patterns": [ 1478 { 1479 "begin": "('|\")", 1480 "beginCaptures": { 1481 "1": { 1482 "name": "punctuation.definition.string.begin.html.vue" 1483 } 1484 }, 1485 "end": "(\\1)", 1486 "endCaptures": { 1487 "1": { 1488 "name": "punctuation.definition.string.end.html.vue" 1489 } 1490 }, 1491 "name": "meta.type.parameters.vue", 1492 "comment": "https://github.com/microsoft/vscode/blob/fd4346210f59135fad81a8b8c4cea7bf5a9ca6b4/extensions/typescript-basics/syntaxes/TypeScript.tmLanguage.json#L4002-L4020", 1493 "patterns": [ 1494 { 1495 "include": "source.ts#comment" 1496 }, 1497 { 1498 "name": "storage.modifier.ts", 1499 "match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(extends|in|out)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))" 1500 }, 1501 { 1502 "include": "source.ts#type" 1503 }, 1504 { 1505 "include": "source.ts#punctuation-comma" 1506 }, 1507 { 1508 "name": "keyword.operator.assignment.ts", 1509 "match": "(=)(?!>)" 1510 } 1511 ] 1512 } 1513 ] 1514 }, 1515 "vue-interpolations": { 1516 "patterns": [ 1517 { 1518 "begin": "(\\{\\{)", 1519 "beginCaptures": { 1520 "1": { 1521 "name": "punctuation.definition.interpolation.begin.html.vue" 1522 } 1523 }, 1524 "end": "(\\}\\})", 1525 "endCaptures": { 1526 "1": { 1527 "name": "punctuation.definition.interpolation.end.html.vue" 1528 } 1529 }, 1530 "name": "expression.embedded.vue", 1531 "patterns": [ 1532 { 1533 "begin": "\\G", 1534 "end": "(?=\\}\\})", 1535 "name": "source.ts.embedded.html.vue", 1536 "patterns": [ 1537 { 1538 "include": "source.ts#expression" 1539 } 1540 ] 1541 } 1542 ] 1543 } 1544 ] 1545 }, 1546 "vue-comments": { 1547 "patterns": [ 1548 { 1549 "include": "#vue-comments-key-value" 1550 }, 1551 { 1552 "begin": "<!--", 1553 "captures": { 1554 "0": { 1555 "name": "punctuation.definition.comment.vue" 1556 } 1557 }, 1558 "end": "-->", 1559 "name": "comment.block.vue" 1560 } 1561 ] 1562 }, 1563 "vue-comments-key-value": { 1564 "begin": "(<!--)\\s*(@)([\\w$]+)(?=\\s)", 1565 "beginCaptures": { 1566 "1": { 1567 "name": "punctuation.definition.comment.vue" 1568 }, 1569 "2": { 1570 "name": "punctuation.definition.block.tag.comment.vue" 1571 }, 1572 "3": { 1573 "name": "storage.type.class.comment.vue" 1574 } 1575 }, 1576 "end": "(-->)", 1577 "endCaptures": { 1578 "1": { 1579 "name": "punctuation.definition.comment.vue" 1580 } 1581 }, 1582 "name": "comment.block.vue", 1583 "patterns": [ 1584 { 1585 "include": "source.json#value" 1586 } 1587 ] 1588 } 1589 } 1590 } 1591