authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2025-06-15 23:42:10-07:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2025-10-14 02:40:45-07:00
log00306a3d8c31b6a24d62794b40df738acd543577
tree232e59fd389e62315c651b297cff79200bbac7bc
parentfa86e0da8bb2677603cb5bcda64b565a362359a6
signature Commit is signed but in an unrecognized format.

throw in the file viewer


82 files changed, 58218 insertions(+), 5 deletions(-)

meow.txt created
Binary files /dev/null and b/meow.txt differ
package-lock.json+514
......@@ -8,6 +8,7 @@
88 "@hono/node-server": "^1.14.3",
99 "@mdx-js/mdx": "^3.1.0",
1010 "@paperclover/console": "git+https://git.paperclover.net/clo/console.git",
11 "blurhash": "^2.0.5",
1112 "codemirror": "^6.0.1",
1213 "devalue": "^5.1.1",
1314 "esbuild": "^0.25.5",
......@@ -15,6 +16,7 @@
1516 "hono": "^4.7.11",
1617 "marko": "^6.0.20",
1718 "puppeteer": "^24.10.1",
19 "sharp": "^0.34.2",
1820 "unique-names-generator": "^4.7.1"
1921 },
2022 "devDependencies": {
......@@ -487,6 +489,16 @@
487489 "w3c-keyname": "^2.2.4"
488490 }
489491 },
492 "node_modules/@emnapi/runtime": {
493 "version": "1.4.3",
494 "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz",
495 "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==",
496 "license": "MIT",
497 "optional": true,
498 "dependencies": {
499 "tslib": "^2.4.0"
500 }
501 },
490502 "node_modules/@esbuild/aix-ppc64": {
491503 "version": "0.25.5",
492504 "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
......@@ -899,6 +911,402 @@
899911 "hono": "^4"
900912 }
901913 },
914 "node_modules/@img/sharp-darwin-arm64": {
915 "version": "0.34.2",
916 "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz",
917 "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==",
918 "cpu": [
919 "arm64"
920 ],
921 "license": "Apache-2.0",
922 "optional": true,
923 "os": [
924 "darwin"
925 ],
926 "engines": {
927 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
928 },
929 "funding": {
930 "url": "https://opencollective.com/libvips"
931 },
932 "optionalDependencies": {
933 "@img/sharp-libvips-darwin-arm64": "1.1.0"
934 }
935 },
936 "node_modules/@img/sharp-darwin-x64": {
937 "version": "0.34.2",
938 "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz",
939 "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==",
940 "cpu": [
941 "x64"
942 ],
943 "license": "Apache-2.0",
944 "optional": true,
945 "os": [
946 "darwin"
947 ],
948 "engines": {
949 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
950 },
951 "funding": {
952 "url": "https://opencollective.com/libvips"
953 },
954 "optionalDependencies": {
955 "@img/sharp-libvips-darwin-x64": "1.1.0"
956 }
957 },
958 "node_modules/@img/sharp-libvips-darwin-arm64": {
959 "version": "1.1.0",
960 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz",
961 "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==",
962 "cpu": [
963 "arm64"
964 ],
965 "license": "LGPL-3.0-or-later",
966 "optional": true,
967 "os": [
968 "darwin"
969 ],
970 "funding": {
971 "url": "https://opencollective.com/libvips"
972 }
973 },
974 "node_modules/@img/sharp-libvips-darwin-x64": {
975 "version": "1.1.0",
976 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz",
977 "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==",
978 "cpu": [
979 "x64"
980 ],
981 "license": "LGPL-3.0-or-later",
982 "optional": true,
983 "os": [
984 "darwin"
985 ],
986 "funding": {
987 "url": "https://opencollective.com/libvips"
988 }
989 },
990 "node_modules/@img/sharp-libvips-linux-arm": {
991 "version": "1.1.0",
992 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz",
993 "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==",
994 "cpu": [
995 "arm"
996 ],
997 "license": "LGPL-3.0-or-later",
998 "optional": true,
999 "os": [
1000 "linux"
1001 ],
1002 "funding": {
1003 "url": "https://opencollective.com/libvips"
1004 }
1005 },
1006 "node_modules/@img/sharp-libvips-linux-arm64": {
1007 "version": "1.1.0",
1008 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz",
1009 "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==",
1010 "cpu": [
1011 "arm64"
1012 ],
1013 "license": "LGPL-3.0-or-later",
1014 "optional": true,
1015 "os": [
1016 "linux"
1017 ],
1018 "funding": {
1019 "url": "https://opencollective.com/libvips"
1020 }
1021 },
1022 "node_modules/@img/sharp-libvips-linux-ppc64": {
1023 "version": "1.1.0",
1024 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz",
1025 "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==",
1026 "cpu": [
1027 "ppc64"
1028 ],
1029 "license": "LGPL-3.0-or-later",
1030 "optional": true,
1031 "os": [
1032 "linux"
1033 ],
1034 "funding": {
1035 "url": "https://opencollective.com/libvips"
1036 }
1037 },
1038 "node_modules/@img/sharp-libvips-linux-s390x": {
1039 "version": "1.1.0",
1040 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz",
1041 "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==",
1042 "cpu": [
1043 "s390x"
1044 ],
1045 "license": "LGPL-3.0-or-later",
1046 "optional": true,
1047 "os": [
1048 "linux"
1049 ],
1050 "funding": {
1051 "url": "https://opencollective.com/libvips"
1052 }
1053 },
1054 "node_modules/@img/sharp-libvips-linux-x64": {
1055 "version": "1.1.0",
1056 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz",
1057 "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==",
1058 "cpu": [
1059 "x64"
1060 ],
1061 "license": "LGPL-3.0-or-later",
1062 "optional": true,
1063 "os": [
1064 "linux"
1065 ],
1066 "funding": {
1067 "url": "https://opencollective.com/libvips"
1068 }
1069 },
1070 "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
1071 "version": "1.1.0",
1072 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz",
1073 "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==",
1074 "cpu": [
1075 "arm64"
1076 ],
1077 "license": "LGPL-3.0-or-later",
1078 "optional": true,
1079 "os": [
1080 "linux"
1081 ],
1082 "funding": {
1083 "url": "https://opencollective.com/libvips"
1084 }
1085 },
1086 "node_modules/@img/sharp-libvips-linuxmusl-x64": {
1087 "version": "1.1.0",
1088 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz",
1089 "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==",
1090 "cpu": [
1091 "x64"
1092 ],
1093 "license": "LGPL-3.0-or-later",
1094 "optional": true,
1095 "os": [
1096 "linux"
1097 ],
1098 "funding": {
1099 "url": "https://opencollective.com/libvips"
1100 }
1101 },
1102 "node_modules/@img/sharp-linux-arm": {
1103 "version": "0.34.2",
1104 "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz",
1105 "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==",
1106 "cpu": [
1107 "arm"
1108 ],
1109 "license": "Apache-2.0",
1110 "optional": true,
1111 "os": [
1112 "linux"
1113 ],
1114 "engines": {
1115 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1116 },
1117 "funding": {
1118 "url": "https://opencollective.com/libvips"
1119 },
1120 "optionalDependencies": {
1121 "@img/sharp-libvips-linux-arm": "1.1.0"
1122 }
1123 },
1124 "node_modules/@img/sharp-linux-arm64": {
1125 "version": "0.34.2",
1126 "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz",
1127 "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==",
1128 "cpu": [
1129 "arm64"
1130 ],
1131 "license": "Apache-2.0",
1132 "optional": true,
1133 "os": [
1134 "linux"
1135 ],
1136 "engines": {
1137 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1138 },
1139 "funding": {
1140 "url": "https://opencollective.com/libvips"
1141 },
1142 "optionalDependencies": {
1143 "@img/sharp-libvips-linux-arm64": "1.1.0"
1144 }
1145 },
1146 "node_modules/@img/sharp-linux-s390x": {
1147 "version": "0.34.2",
1148 "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz",
1149 "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==",
1150 "cpu": [
1151 "s390x"
1152 ],
1153 "license": "Apache-2.0",
1154 "optional": true,
1155 "os": [
1156 "linux"
1157 ],
1158 "engines": {
1159 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1160 },
1161 "funding": {
1162 "url": "https://opencollective.com/libvips"
1163 },
1164 "optionalDependencies": {
1165 "@img/sharp-libvips-linux-s390x": "1.1.0"
1166 }
1167 },
1168 "node_modules/@img/sharp-linux-x64": {
1169 "version": "0.34.2",
1170 "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz",
1171 "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==",
1172 "cpu": [
1173 "x64"
1174 ],
1175 "license": "Apache-2.0",
1176 "optional": true,
1177 "os": [
1178 "linux"
1179 ],
1180 "engines": {
1181 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1182 },
1183 "funding": {
1184 "url": "https://opencollective.com/libvips"
1185 },
1186 "optionalDependencies": {
1187 "@img/sharp-libvips-linux-x64": "1.1.0"
1188 }
1189 },
1190 "node_modules/@img/sharp-linuxmusl-arm64": {
1191 "version": "0.34.2",
1192 "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz",
1193 "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==",
1194 "cpu": [
1195 "arm64"
1196 ],
1197 "license": "Apache-2.0",
1198 "optional": true,
1199 "os": [
1200 "linux"
1201 ],
1202 "engines": {
1203 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1204 },
1205 "funding": {
1206 "url": "https://opencollective.com/libvips"
1207 },
1208 "optionalDependencies": {
1209 "@img/sharp-libvips-linuxmusl-arm64": "1.1.0"
1210 }
1211 },
1212 "node_modules/@img/sharp-linuxmusl-x64": {
1213 "version": "0.34.2",
1214 "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz",
1215 "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==",
1216 "cpu": [
1217 "x64"
1218 ],
1219 "license": "Apache-2.0",
1220 "optional": true,
1221 "os": [
1222 "linux"
1223 ],
1224 "engines": {
1225 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1226 },
1227 "funding": {
1228 "url": "https://opencollective.com/libvips"
1229 },
1230 "optionalDependencies": {
1231 "@img/sharp-libvips-linuxmusl-x64": "1.1.0"
1232 }
1233 },
1234 "node_modules/@img/sharp-wasm32": {
1235 "version": "0.34.2",
1236 "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz",
1237 "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==",
1238 "cpu": [
1239 "wasm32"
1240 ],
1241 "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
1242 "optional": true,
1243 "dependencies": {
1244 "@emnapi/runtime": "^1.4.3"
1245 },
1246 "engines": {
1247 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1248 },
1249 "funding": {
1250 "url": "https://opencollective.com/libvips"
1251 }
1252 },
1253 "node_modules/@img/sharp-win32-arm64": {
1254 "version": "0.34.2",
1255 "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz",
1256 "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==",
1257 "cpu": [
1258 "arm64"
1259 ],
1260 "license": "Apache-2.0 AND LGPL-3.0-or-later",
1261 "optional": true,
1262 "os": [
1263 "win32"
1264 ],
1265 "engines": {
1266 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1267 },
1268 "funding": {
1269 "url": "https://opencollective.com/libvips"
1270 }
1271 },
1272 "node_modules/@img/sharp-win32-ia32": {
1273 "version": "0.34.2",
1274 "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz",
1275 "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==",
1276 "cpu": [
1277 "ia32"
1278 ],
1279 "license": "Apache-2.0 AND LGPL-3.0-or-later",
1280 "optional": true,
1281 "os": [
1282 "win32"
1283 ],
1284 "engines": {
1285 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1286 },
1287 "funding": {
1288 "url": "https://opencollective.com/libvips"
1289 }
1290 },
1291 "node_modules/@img/sharp-win32-x64": {
1292 "version": "0.34.2",
1293 "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz",
1294 "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==",
1295 "cpu": [
1296 "x64"
1297 ],
1298 "license": "Apache-2.0 AND LGPL-3.0-or-later",
1299 "optional": true,
1300 "os": [
1301 "win32"
1302 ],
1303 "engines": {
1304 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1305 },
1306 "funding": {
1307 "url": "https://opencollective.com/libvips"
1308 }
1309 },
9021310 "node_modules/@jridgewell/gen-mapping": {
9031311 "version": "0.3.8",
9041312 "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
......@@ -1385,6 +1793,12 @@
13851793 "node": ">=10.0.0"
13861794 }
13871795 },
1796 "node_modules/blurhash": {
1797 "version": "2.0.5",
1798 "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz",
1799 "integrity": "sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==",
1800 "license": "MIT"
1801 },
13881802 "node_modules/browserslist": {
13891803 "version": "4.25.0",
13901804 "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz",
......@@ -1596,6 +2010,19 @@
15962010 "url": "https://github.com/sponsors/wooorm"
15972011 }
15982012 },
2013 "node_modules/color": {
2014 "version": "4.2.3",
2015 "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
2016 "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
2017 "license": "MIT",
2018 "dependencies": {
2019 "color-convert": "^2.0.1",
2020 "color-string": "^1.9.0"
2021 },
2022 "engines": {
2023 "node": ">=12.5.0"
2024 }
2025 },
15992026 "node_modules/color-convert": {
16002027 "version": "2.0.1",
16012028 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
......@@ -1614,6 +2041,16 @@
16142041 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
16152042 "license": "MIT"
16162043 },
2044 "node_modules/color-string": {
2045 "version": "1.9.1",
2046 "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
2047 "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
2048 "license": "MIT",
2049 "dependencies": {
2050 "color-name": "^1.0.0",
2051 "simple-swizzle": "^0.2.2"
2052 }
2053 },
16172054 "node_modules/comma-separated-tokens": {
16182055 "version": "2.0.3",
16192056 "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
......@@ -1739,6 +2176,15 @@
17392176 "node": ">=6"
17402177 }
17412178 },
2179 "node_modules/detect-libc": {
2180 "version": "2.0.4",
2181 "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
2182 "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
2183 "license": "Apache-2.0",
2184 "engines": {
2185 "node": ">=8"
2186 }
2187 },
17422188 "node_modules/devalue": {
17432189 "version": "5.1.1",
17442190 "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz",
......@@ -3723,6 +4169,74 @@
37234169 "semver": "bin/semver.js"
37244170 }
37254171 },
4172 "node_modules/sharp": {
4173 "version": "0.34.2",
4174 "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz",
4175 "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==",
4176 "hasInstallScript": true,
4177 "license": "Apache-2.0",
4178 "dependencies": {
4179 "color": "^4.2.3",
4180 "detect-libc": "^2.0.4",
4181 "semver": "^7.7.2"
4182 },
4183 "engines": {
4184 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
4185 },
4186 "funding": {
4187 "url": "https://opencollective.com/libvips"
4188 },
4189 "optionalDependencies": {
4190 "@img/sharp-darwin-arm64": "0.34.2",
4191 "@img/sharp-darwin-x64": "0.34.2",
4192 "@img/sharp-libvips-darwin-arm64": "1.1.0",
4193 "@img/sharp-libvips-darwin-x64": "1.1.0",
4194 "@img/sharp-libvips-linux-arm": "1.1.0",
4195 "@img/sharp-libvips-linux-arm64": "1.1.0",
4196 "@img/sharp-libvips-linux-ppc64": "1.1.0",
4197 "@img/sharp-libvips-linux-s390x": "1.1.0",
4198 "@img/sharp-libvips-linux-x64": "1.1.0",
4199 "@img/sharp-libvips-linuxmusl-arm64": "1.1.0",
4200 "@img/sharp-libvips-linuxmusl-x64": "1.1.0",
4201 "@img/sharp-linux-arm": "0.34.2",
4202 "@img/sharp-linux-arm64": "0.34.2",
4203 "@img/sharp-linux-s390x": "0.34.2",
4204 "@img/sharp-linux-x64": "0.34.2",
4205 "@img/sharp-linuxmusl-arm64": "0.34.2",
4206 "@img/sharp-linuxmusl-x64": "0.34.2",
4207 "@img/sharp-wasm32": "0.34.2",
4208 "@img/sharp-win32-arm64": "0.34.2",
4209 "@img/sharp-win32-ia32": "0.34.2",
4210 "@img/sharp-win32-x64": "0.34.2"
4211 }
4212 },
4213 "node_modules/sharp/node_modules/semver": {
4214 "version": "7.7.2",
4215 "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
4216 "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
4217 "license": "ISC",
4218 "bin": {
4219 "semver": "bin/semver.js"
4220 },
4221 "engines": {
4222 "node": ">=10"
4223 }
4224 },
4225 "node_modules/simple-swizzle": {
4226 "version": "0.2.2",
4227 "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
4228 "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
4229 "license": "MIT",
4230 "dependencies": {
4231 "is-arrayish": "^0.3.1"
4232 }
4233 },
4234 "node_modules/simple-swizzle/node_modules/is-arrayish": {
4235 "version": "0.3.2",
4236 "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
4237 "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
4238 "license": "MIT"
4239 },
37264240 "node_modules/smart-buffer": {
37274241 "version": "4.2.0",
37284242 "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
package.json+2
......@@ -4,6 +4,7 @@
44 "@hono/node-server": "^1.14.3",
55 "@mdx-js/mdx": "^3.1.0",
66 "@paperclover/console": "git+https://git.paperclover.net/clo/console.git",
7 "blurhash": "^2.0.5",
78 "codemirror": "^6.0.1",
89 "devalue": "^5.1.1",
910 "esbuild": "^0.25.5",
......@@ -11,6 +12,7 @@
1112 "hono": "^4.7.11",
1213 "marko": "^6.0.20",
1314 "puppeteer": "^24.10.1",
15 "sharp": "^0.34.2",
1416 "unique-names-generator": "^4.7.1"
1517 },
1618 "devDependencies": {
src/blog/pages/25/marko-intro.markodown+7-1
......@@ -17,7 +17,7 @@ JavaScript into HTML. Attributes are JavaScript expressions.
1717
1818```marko
1919<div>
20 // `input` is like props, but in global scope
20 // `input` is like props, but given in the top-level scope
2121 <time datetime=input.date.toISOString()>
2222 // Interpolation with JS template string syntax
2323 ${formatTimeNicely(input.date)}
......@@ -28,6 +28,12 @@ JavaScript into HTML. Attributes are JavaScript expressions.
2828
2929 // Capital letter variables for imported components
3030 <MarkdownContent message=input.message />
31
32 // Components also can be auto-imported by lowercase.
33 // This will look upwards for a `tags/` folder containing
34 // "custom-footer.marko", similar to how Node.js finds
35 // package names in all upwards `node_modules` folders.
36 <custom-footer />
3137</div>
3238
3339// ESM `import` / `export` just work as expected.
src/file-viewer/backend.tsx created+425
......@@ -0,0 +1,425 @@
1import { type Context, Hono } from "hono";
2import * as path from "node:path";
3import { etagMatches, serveAsset } from "../assets.ts";
4import { FilePermissions, MediaFile } from "../db.ts";
5import { renderDynamicPage } from "../framework/dynamic-pages.ts";
6import { renderToStringSync } from "../framework/render-to-string.ts";
7import { MediaPanel } from "../pages-dynamic/file_viewer.tsx";
8import mimeTypeDb from "./mime.json" with { type: "json" };
9import { Speedbump } from "./cotyledon.tsx";
10import { hasAsset } from "../assets.ts";
11import { CompressionFormat, fetchFile, prefetchFile } from "./cache.ts";
12import { requireFriendAuth } from "../journal/backend.ts";
13
14const app = new Hono();
15
16interface APIDirectoryList {
17 path: string;
18 readme: string | null;
19 files: APIFile[];
20}
21
22interface APIFile {
23 basename: string;
24 dir: boolean;
25 time: number;
26 size: number;
27 duration: number | null;
28}
29
30function checkCotyledonCookie(c: Context) {
31 const cookie = c.req.header("Cookie");
32 if (!cookie) return false;
33 const cookies = cookie.split("; ").map((x) => x.split("="));
34 return cookies.some(
35 (kv) => kv[0].trim() === "cotyledon" && kv[1].trim() === "agree",
36 );
37}
38
39function isCotyledonPath(path: string) {
40 if (path === "/cotyledon") return true;
41 const year = path.match(/^\/(\d{4})($|\/)/);
42 if (!year) return false;
43 const yearInt = parseInt(year[1]);
44 if (yearInt < 2025 && yearInt >= 2017) return true;
45 return false;
46}
47
48app.post("/file/cotyledon", async (c) => {
49 c.res = new Response(null, {
50 status: 200,
51 headers: {
52 "Set-Cookie": "cotyledon=agree; Path=/",
53 },
54 });
55});
56
57app.get("/file/*", async (c, next) => {
58 if (c.req.header("User-Agent")?.toLowerCase()?.includes("discordbot")) {
59 return next();
60 }
61 let rawFilePath = c.req.path.slice(5) || "/";
62 if (rawFilePath.endsWith("$partial")) {
63 return getPartialPage(c, rawFilePath.slice(0, -"$partial".length));
64 }
65 let hasCotyledonCookie = checkCotyledonCookie(c);
66 if (isCotyledonPath(rawFilePath)) {
67 if (!hasCotyledonCookie) {
68 return serveAsset(c, "/file/cotyledon_speedbump", 403);
69 } else if (rawFilePath === "/cotyledon") {
70 return serveAsset(c, "/file/cotyledon_enterance", 200);
71 }
72 }
73 while (rawFilePath.length > 1 && rawFilePath.endsWith("/")) {
74 rawFilePath = rawFilePath.slice(0, -1);
75 }
76 const file = MediaFile.getByPath(rawFilePath);
77 if (!file) {
78 // perhaps a specific 404 page for media files?
79 return next();
80 }
81
82 const permissions = FilePermissions.getByPrefix(rawFilePath);
83 if (permissions !== 0) {
84 const friendAuthChallenge = requireFriendAuth(c);
85 if (friendAuthChallenge) return friendAuthChallenge;
86 }
87
88 // File listings
89 if (file.kind === MediaFile.Kind.directory) {
90 if (c.req.header("Accept")?.includes("application/json")) {
91 const json = {
92 path: file.path,
93 files: file.getPublicChildren().map((f) => ({
94 basename: f.basename,
95 dir: f.kind === MediaFile.Kind.directory,
96 time: f.date.getTime(),
97 size: f.size,
98 duration: f.duration ? f.duration : null,
99 })),
100 readme: file.contents ? file.contents : null,
101 } satisfies APIDirectoryList;
102 return c.json(json);
103 }
104 c.res = await renderDynamicPage(c.req.raw, "file_viewer", {
105 file,
106 hasCotyledonCookie,
107 });
108 return;
109 }
110
111 // Redirect to directory list for regular files if client accepts HTML
112 let viewMode = c.req.query("view");
113 if (c.req.query("dl") !== undefined) {
114 viewMode = "download";
115 }
116 if (viewMode == undefined && c.req.header("Accept")?.includes("text/html")) {
117 prefetchFile(file.path);
118 c.res = await renderDynamicPage(c.req.raw, "file_viewer", {
119 file,
120 hasCotyledonCookie,
121 });
122 return;
123 }
124 const download = viewMode === "download";
125
126 const etag = file.hash;
127 const filePath = file.path;
128 const expectedSize = file.size;
129
130 let encoding = decideEncoding(c.req.header("Accept-Encoding"));
131
132 let sizeHeader = encoding === "raw"
133 ? expectedSize
134 // Size cannot be known because of compression modes
135 : undefined;
136
137 // Etag
138 {
139 const ifNoneMatch = c.req.header("If-None-Match");
140 if (ifNoneMatch && etagMatches(etag, ifNoneMatch)) {
141 c.res = new Response(null, {
142 status: 304,
143 statusText: "Not Modified",
144 headers: fileHeaders(file, download, sizeHeader),
145 });
146 return;
147 }
148 }
149
150 // Head
151 if (c.req.method === "HEAD") {
152 c.res = new Response(null, {
153 headers: fileHeaders(file, download, sizeHeader),
154 });
155 return;
156 }
157
158 // Prevalidate range requests
159 let rangeHeader = c.req.header("Range") ?? null;
160 if (rangeHeader) encoding = "raw";
161
162 const ifRangeHeader = c.req.header("If-Range");
163 if (ifRangeHeader && ifRangeOutdated(file, ifRangeHeader)) {
164 // > If the condition is not fulfilled, the full resource is
165 // > sent back with a 200 OK status.
166 rangeHeader = null;
167 }
168
169 let foundFile;
170 while (true) {
171 let second = false;
172 try {
173 foundFile = await fetchFile(filePath, encoding);
174 if (second) {
175 console.warn(`File ${filePath} has missing compression: ${encoding}`);
176 }
177 break;
178 } catch (error) {
179 if (encoding !== "raw") {
180 encoding = "raw";
181 sizeHeader = file.size;
182 second = true;
183 continue;
184 }
185
186 return c.text(
187 "internal server error: this file is present in the database but could not be fetched",
188 );
189 }
190 }
191 const [streamOrBuffer, actualEncoding, src] = foundFile;
192 encoding = actualEncoding;
193
194 // Range requests
195 // https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests
196 // Compression is skipped because it's a confusing, but solvable problem.
197 // See https://stackoverflow.com/questions/33947562/is-it-possible-to-send-http-response-using-gzip-and-byte-ranges-at-the-same-time
198 if (rangeHeader) {
199 const ranges = parseRange(rangeHeader, file.size);
200 // TODO: multiple ranges
201 if (ranges && ranges.length === 1) {
202 return (c.res = handleRanges(ranges, file, streamOrBuffer, download));
203 }
204 }
205
206 // Respond in a streaming fashion
207 c.res = new Response(streamOrBuffer, {
208 headers: {
209 ...fileHeaders(file, download, sizeHeader),
210 ...(encoding !== "raw" && {
211 "Content-Encoding": encoding,
212 }),
213 "X-Cache": src,
214 },
215 });
216});
217
218app.get("/canvas/:script", async (c, next) => {
219 const script = c.req.param("script");
220 if (!hasAsset(`/js/canvas/${script}.js`)) {
221 return next();
222 }
223 return renderDynamicPage(c.req.raw, "canvas", {
224 script,
225 });
226});
227
228function decideEncoding(encodings: string | undefined): CompressionFormat {
229 if (encodings?.includes("zstd")) return "zstd";
230 if (encodings?.includes("gzip")) return "gzip";
231 return "raw";
232}
233
234function fileHeaders(
235 file: MediaFile,
236 download: boolean,
237 size: number | undefined = file.size,
238) {
239 return {
240 Vary: "Accept-Encoding, Accept",
241 "Content-Type": mimeType(file.path),
242 "Content-Length": size.toString(),
243 ETag: file.hash,
244 "Last-Modified": file.date.toUTCString(),
245 ...(download && {
246 "Content-Disposition": `attachment; filename="${file.basename}"`,
247 }),
248 };
249}
250
251function ifRangeOutdated(file: MediaFile, ifRangeHeader: string) {
252 // etag
253 if (ifRangeHeader[0] === '"') {
254 return ifRangeHeader.slice(1, -1) !== file.hash;
255 }
256 // date
257 return new Date(ifRangeHeader) < file.date;
258}
259
260/** The end is inclusive */
261type Ranges = Array<[start: number, end: number]>;
262
263function parseRange(rangeHeader: string, fileSize: number): Ranges | null {
264 const [unit, ranges] = rangeHeader.split("=");
265 if (unit !== "bytes") return null;
266
267 const result: Array<[start: number, end: number]> = [];
268 const rangeParts = ranges.split(",");
269
270 for (const range of rangeParts) {
271 const split = range.split("-");
272 if (split.length !== 2) return null;
273 const [start, end] = split;
274 if (start === "" && end === "") return null;
275 const parsedRange: [number, number] = [
276 start === "" ? fileSize - +end : +start,
277 end === "" ? fileSize - 1 : +end,
278 ];
279 result.push(parsedRange);
280 }
281
282 // Validate that ranges do not intersect
283 result.sort((a, b) => a[0] - b[0]);
284 for (let i = 1; i < result.length; i++) {
285 if (result[i][0] <= result[i - 1][1]) {
286 return null;
287 }
288 }
289
290 return result;
291}
292
293function handleRanges(
294 ranges: Ranges,
295 file: MediaFile,
296 streamOrBuffer: ReadableStream | Buffer,
297 download: boolean,
298): Response {
299 // TODO: multiple ranges
300 const rangeSize = ranges.reduce((a, b) => a + (b[1] - b[0] + 1), 0);
301 const rangeBody = streamOrBuffer instanceof ReadableStream
302 ? applySingleRangeToStream(streamOrBuffer, ranges)
303 : applyRangesToBuffer(streamOrBuffer, ranges, rangeSize);
304 return new Response(rangeBody, {
305 status: 206,
306 headers: {
307 ...fileHeaders(file, download, rangeSize),
308 "Content-Range": `bytes ${ranges[0][0]}-${ranges[0][1]}/${file.size}`,
309 },
310 });
311}
312
313function applyRangesToBuffer(
314 buffer: Buffer,
315 ranges: Ranges,
316 rangeSize: number,
317): Uint8Array {
318 const result = new Uint8Array(rangeSize);
319 let offset = 0;
320 for (const [start, end] of ranges) {
321 result.set(buffer.slice(start, end + 1), offset);
322 offset += end - start + 1;
323 }
324 return result;
325}
326
327function applySingleRangeToStream(
328 stream: ReadableStream,
329 ranges: Ranges,
330): ReadableStream {
331 let reader: ReadableStreamDefaultReader<Uint8Array>;
332 let position = 0;
333 const [start, end] = ranges[0];
334 return new ReadableStream({
335 async start(controller) {
336 reader = stream.getReader();
337 try {
338 while (position <= end) {
339 const { done, value } = await reader.read();
340
341 if (done) {
342 controller.close();
343 return;
344 }
345
346 const buffer = new Uint8Array(value);
347
348 const bufferStart = position;
349 const bufferEnd = position + buffer.length - 1;
350
351 position += buffer.length;
352
353 if (bufferEnd < start) {
354 continue;
355 }
356
357 if (bufferStart > end) {
358 break;
359 }
360
361 const sendStart = Math.max(0, start - bufferStart);
362 const sendEnd = Math.min(buffer.length - 1, end - bufferStart);
363
364 if (sendStart <= sendEnd) {
365 controller.enqueue(buffer.slice(sendStart, sendEnd + 1));
366 }
367 }
368
369 controller.close();
370 } catch (error) {
371 controller.error(error);
372 } finally {
373 reader.releaseLock();
374 }
375 },
376 cancel() {
377 reader?.releaseLock();
378 },
379 });
380}
381
382function mimeType(file: string) {
383 return (mimeTypeDb as any)[path.extname(file)] ?? "application/octet-stream";
384}
385
386function getPartialPage(c: Context, rawFilePath: string) {
387 if (isCotyledonPath(rawFilePath)) {
388 if (!checkCotyledonCookie(c)) {
389 let root = Speedbump();
390 // Remove the root element, it's created client side!
391 root = root.props.children;
392
393 const html = renderToStringSync(root);
394 c.header("X-Cotyledon", "true");
395 return c.html(html);
396 }
397 }
398
399 const file = MediaFile.getByPath(rawFilePath);
400 const permissions = FilePermissions.getByPrefix(rawFilePath);
401 if (permissions !== 0) {
402 const friendAuthChallenge = requireFriendAuth(c);
403 if (friendAuthChallenge) return friendAuthChallenge;
404 }
405 if (rawFilePath.endsWith("/")) {
406 rawFilePath = rawFilePath.slice(0, -1);
407 }
408 if (!file) {
409 return c.json({ error: "File not found" }, 404);
410 }
411
412 let root = MediaPanel({
413 file,
414 isLast: true,
415 activeFilename: null,
416 hasCotyledonCookie: rawFilePath === "" && checkCotyledonCookie(c),
417 });
418 // Remove the root element, it's created client side!
419 root = root.props.children;
420
421 const html = renderToStringSync(root);
422 return c.html(html);
423}
424
425export { app as mediaApp };
src/file-viewer/bin/extension-stats.ts created+83
......@@ -0,0 +1,83 @@
1import * as path from "node:path";
2import { cache, MediaFile } from "../db";
3
4// Function to get file extension statistics
5function getExtensionStats() {
6 // Get all files (not directories) from the database
7 const query = `
8 SELECT path FROM media_files
9 WHERE kind = ${MediaFile.Kind.file}
10 `;
11
12 // Use raw query to get all file paths
13 const rows = cache.query(query).all() as { path: string }[];
14
15 // Count extensions
16 const extensionCounts: Record<string, number> = {};
17
18 for (const row of rows) {
19 const extension = path.extname(row.path).toLowerCase();
20 extensionCounts[extension] = (extensionCounts[extension] || 0) + 1;
21 }
22
23 // Sort extensions by count (descending)
24 const sortedExtensions = Object.entries(extensionCounts)
25 .sort((a, b) => b[1] - a[1]);
26
27 return {
28 totalFiles: rows.length,
29 extensions: sortedExtensions,
30 };
31}
32
33// Function to print a visual table
34function printExtensionTable() {
35 const stats = getExtensionStats();
36
37 // Calculate column widths
38 const extensionColWidth = Math.max(
39 ...stats.extensions.map(([ext]) => ext.length),
40 "Extension".length,
41 ) + 2;
42
43 const countColWidth = Math.max(
44 ...stats.extensions.map(([_, count]) => count.toString().length),
45 "Count".length,
46 ) + 2;
47
48 const percentColWidth = "Percentage".length + 2;
49
50 // Print header
51 console.log("MediaFile Extension Statistics");
52 console.log(`Total files: ${stats.totalFiles}`);
53 console.log();
54
55 // Print table header
56 console.log(
57 "Extension".padEnd(extensionColWidth) +
58 "Count".padEnd(countColWidth) +
59 "Percentage".padEnd(percentColWidth),
60 );
61
62 // Print separator
63 console.log(
64 "-".repeat(extensionColWidth) +
65 "-".repeat(countColWidth) +
66 "-".repeat(percentColWidth),
67 );
68
69 // Print rows
70 for (const [extension, count] of stats.extensions) {
71 const percentage = ((count / stats.totalFiles) * 100).toFixed(2);
72 const ext = extension || "(no extension)";
73
74 console.log(
75 ext.padEnd(extensionColWidth) +
76 count.toString().padEnd(countColWidth) +
77 `${percentage}%`.padEnd(percentColWidth),
78 );
79 }
80}
81
82// Run the program
83printExtensionTable();
src/file-viewer/bin/scan.ts created+1015
......@@ -0,0 +1,1015 @@
1// This file was started by AI and maintained by hand since.
2import "@paperclover/console/inject";
3import { Progress } from "@paperclover/console/Progress";
4import { Spinner } from "@paperclover/console/Spinner";
5import assert from "node:assert";
6import { execFile } from "node:child_process";
7import { existsSync, Stats } from "node:fs";
8import * as fsp from "node:fs/promises";
9import * as path from "node:path";
10import { promisify } from "node:util";
11import { BlobAsset, cache, FilePermissions, MediaFile } from "../db.ts";
12import { formatDate, formatSize } from "./share.ts";
13import { highlightCode, type Language } from "./highlight.ts";
14
15const execFileAsync = promisify(execFile);
16
17// Configuration
18const FILE_ROOT = process.env.SCAN_FILE_ROOT;
19if (!FILE_ROOT) {
20 throw new Error(
21 "FILE_ROOT environment variable not set (e.g. '/path/to/files')",
22 );
23}
24const LOCAL_DIR = path.resolve(FILE_ROOT);
25const DRY_RUN = process.argv.includes("--dry-run");
26const SHOULD_COMPRESS = true;
27const VERBOSE = process.argv.includes("--verbose");
28const SHOULD_SCRUB = true;
29const COMPRESS_STORE = process.env.COMPRESS_STORE ||
30 path.join(process.cwd(), ".clover/compressed");
31
32// Helper function for logging that respects verbose flag
33function log(message: string, always = false): void {
34 if (always || VERBOSE) {
35 console.log(message);
36 }
37}
38
39// File extensions that need duration metadata
40const MEDIA_EXTENSIONS = new Set([
41 ".mp4",
42 ".mkv",
43 ".webm",
44 ".avi",
45 ".mov",
46 ".mp3",
47 ".flac",
48 ".wav",
49 ".ogg",
50 ".m4a",
51]);
52
53// File extensions that need dimension metadata
54const IMAGE_EXTENSIONS = new Set([
55 ".jpg",
56 ".jpeg",
57 ".png",
58 ".gif",
59 ".webp",
60 ".avif",
61 ".heic",
62 ".svg",
63]);
64
65const VIDEO_EXTENSIONS = new Set([".mp4", ".mkv", ".webm", ".avi", ".mov"]);
66
67// File extensions that need metadata scrubbing
68const SCRUB_EXTENSIONS = new Set([
69 ".jpg",
70 ".jpeg",
71 ".png",
72 ".mov",
73 ".mp4",
74 ".m4a",
75]);
76
77const CODE_EXTENSIONS: Record<string, Language> = {
78 ".json": "json",
79 ".toml": "toml",
80 ".ts": "ts",
81 ".js": "ts",
82 ".tsx": "tsx",
83 ".jsx": "tsx",
84 ".css": "css",
85 ".py": "python",
86 ".lua": "lua",
87 ".sh": "shell",
88 ".bat": "dosbatch",
89 ".ps1": "powershell",
90 ".cmd": "dosbatch",
91 ".yaml": "yaml",
92 ".yml": "yaml",
93 ".zig": "zig",
94 ".astro": "astro",
95 ".mdx": "mdx",
96 ".xml": "xml",
97 ".jsonc": "json",
98 ".php": "php",
99 ".patch": "diff",
100 ".diff": "diff",
101};
102
103const READ_CONTENTS_EXTENSIONS = new Set([".txt", ".chat"]);
104
105// For files that have changed indexing logic, update the date here rescanning
106// will reconstruct the entire file object. This way you can incrementally
107// update new file types without having to reindex everything.
108const lastUpdateTypes: Record<string, Date> = {};
109lastUpdateTypes[".lnk"] = new Date("2025-05-13 13:58:00");
110for (const ext in CODE_EXTENSIONS) {
111 lastUpdateTypes[ext] = new Date("2025-05-13 13:58:00");
112}
113for (const ext of READ_CONTENTS_EXTENSIONS) {
114 lastUpdateTypes[ext] = new Date("2025-05-13 13:58:00");
115}
116lastUpdateTypes[".diff"] = new Date("2025-05-18 13:58:00");
117lastUpdateTypes[".patch"] = new Date("2025-05-18 13:58:00");
118
119// Helper functions for metadata extraction
120async function calculateHash(filePath: string): Promise<string> {
121 try {
122 const hash = await execFileAsync("sha1sum", [filePath]);
123 return hash.stdout.split(" ")[0];
124 } catch (error) {
125 console.error(`Error calculating hash for ${filePath}:`, error);
126 throw error;
127 }
128}
129
130async function calculateDuration(filePath: string): Promise<number> {
131 try {
132 const ext = path.extname(filePath).toLowerCase();
133 if (!MEDIA_EXTENSIONS.has(ext)) return 0;
134
135 const { stdout } = await execFileAsync("ffprobe", [
136 "-v",
137 "error",
138 "-show_entries",
139 "format=duration",
140 "-of",
141 "default=noprint_wrappers=1:nokey=1",
142 filePath,
143 ]);
144 return Math.ceil(parseFloat(stdout.trim()));
145 } catch (error) {
146 console.error(`Error calculating duration for ${filePath}:`, error);
147 return 0; // Return 0 for duration on error
148 }
149}
150
151async function calculateDimensions(filePath: string): Promise<string> {
152 const ext = path.extname(filePath).toLowerCase();
153 if (!IMAGE_EXTENSIONS.has(ext) && !VIDEO_EXTENSIONS.has(ext)) return "";
154
155 try {
156 if (ext === ".svg") {
157 // For SVG files, parse the file and extract width/height
158 const content = await fsp.readFile(filePath, "utf8");
159 const widthMatch = content.match(/width="(\d+)"/);
160 const heightMatch = content.match(/height="(\d+)"/);
161
162 if (widthMatch && heightMatch) {
163 return `${widthMatch[1]}x${heightMatch[1]}`;
164 }
165 } else if (IMAGE_EXTENSIONS.has(ext) || VIDEO_EXTENSIONS.has(ext)) {
166 // Use ffprobe for images and videos
167 const { stdout } = await execFileAsync("ffprobe", [
168 "-v",
169 "error",
170 "-select_streams",
171 "v:0",
172 "-show_entries",
173 "stream=width,height",
174 "-of",
175 "csv=s=x:p=0",
176 filePath,
177 ]);
178 return stdout.trim();
179 }
180 } catch (error) {
181 console.error(`Error calculating dimensions for ${filePath}:`, error);
182 }
183
184 return "";
185}
186
187// Helper function to check and remove location metadata
188async function scrubLocationMetadata(
189 filePath: string,
190 stats: Stats,
191): Promise<boolean> {
192 try {
193 const ext = path.extname(filePath).toLowerCase();
194 if (!SCRUB_EXTENSIONS.has(ext)) return false;
195
196 let hasLocation = false;
197 let args: string[] = [];
198
199 // Check for location metadata based on file type
200 const tempOutput = path.join(
201 path.dirname(filePath),
202 `.tmp.${path.basename(filePath)}`,
203 );
204 switch (ext) {
205 case ".jpg":
206 case ".jpeg":
207 case ".png":
208 // Check for GPS tags in EXIF
209 const { stdout: gpsCheck } = await execFileAsync("exiftool", [
210 "-gps:all",
211 filePath,
212 ]);
213 hasLocation = gpsCheck.trim().length > 0;
214 args = ["-gps:all=", filePath, "-o", tempOutput];
215 break;
216 case ".mov":
217 case ".mp4":
218 // Check for GPS metadata in video files
219 const { stdout: videoCheck } = await execFileAsync("exiftool", [
220 "-ee",
221 "-G3",
222 "-s",
223 filePath,
224 ]);
225 hasLocation = videoCheck.includes("GPS") ||
226 videoCheck.includes("Location");
227 args = ["-gps:all=", "-xmp:all=", filePath, "-o", tempOutput];
228 break;
229 case ".m4a":
230 // Check for location and other metadata in m4a files
231 const { stdout: m4aCheck } = await execFileAsync("exiftool", [
232 "-ee",
233 "-G3",
234 "-s",
235 filePath,
236 ]);
237 hasLocation = m4aCheck.includes("GPS") ||
238 m4aCheck.includes("Location") ||
239 m4aCheck.includes("Filename") ||
240 m4aCheck.includes("Title");
241
242 if (hasLocation) {
243 args = [
244 "-gps:all=",
245 "-location:all=",
246 "-filename:all=",
247 "-title=",
248 "-m4a:all=",
249 filePath,
250 "-o",
251 tempOutput,
252 ];
253 }
254 break;
255 }
256
257 const accessTime = stats.atime;
258 const modTime = stats.mtime;
259
260 let backup: string | null = null;
261 try {
262 if (hasLocation) {
263 if (DRY_RUN) return true;
264
265 // Prepare a backup
266 const tmp = path.join(
267 path.dirname(filePath),
268 `.tmp.backup.${path.basename(filePath)}`,
269 );
270 await fsp.copyFile(filePath, tmp);
271 await fsp.utimes(tmp, accessTime, modTime);
272 backup = tmp;
273
274 // Remove metadata
275 await execFileAsync("exiftool", args);
276 if (!existsSync(tempOutput)) {
277 throw new Error(`Failed to create output file: ${tempOutput}`);
278 }
279
280 // Restore original timestamps
281 await fsp.rename(tempOutput, filePath);
282 await fsp.utimes(filePath, accessTime, modTime);
283
284 // Backup is no longer needed
285 await fsp.unlink(backup);
286
287 log(
288 `Scrubbed location metadata in ${path.relative(LOCAL_DIR, filePath)}`,
289 true,
290 );
291 return true;
292 }
293 } catch (error) {
294 if (backup) {
295 await fsp.rename(backup, filePath);
296 }
297 if (existsSync(tempOutput)) {
298 await fsp.unlink(tempOutput);
299 }
300 throw error;
301 }
302 } catch (error) {
303 console.error(`Error scrubbing metadata for ${filePath}:`, error);
304 }
305
306 return false;
307}
308
309// Queue implementation for parallel processing
310type AsyncQueueProcessor<T> = (s: Spinner, item: T) => Promise<void>;
311class AsyncQueue<T> {
312 private queue: T[] = [];
313 private running = 0;
314 private maxConcurrent: number;
315 private processed = 0;
316 private progress?: Progress<{ active: Spinner[] }>;
317 private name: string;
318 private estimate?: number;
319
320 constructor(name: string, maxConcurrent: number) {
321 this.maxConcurrent = maxConcurrent;
322 this.name = name;
323 }
324
325 setEstimate(estimate: number) {
326 this.estimate = estimate;
327 if (this.progress) {
328 this.progress.total = Math.max(
329 this.processed + this.queue.length,
330 estimate,
331 );
332 }
333 }
334
335 getProgress() {
336 if (!this.progress) {
337 this.progress = new Progress({
338 spinner: null,
339 text: ({ active }) => {
340 const now = performance.now();
341 let text = `[${this.processed}/${
342 this.processed + this.queue.length
343 }] ${this.name}`;
344 let n = 0;
345 for (const item of active) {
346 let itemText = "- " + item.format(now);
347 text += `\n` +
348 itemText.slice(0, Math.max(0, process.stdout.columns - 1));
349 if (n > 10) {
350 text += `\n ... + ${active.length - n} more`;
351 break;
352 }
353 n++;
354 }
355 return text;
356 },
357 props: {
358 active: [] as Spinner[],
359 },
360 });
361 this.progress.total = this.estimate ?? 0;
362 this.progress.value = 0;
363 this.progress.fps = 30;
364 }
365 return this.progress;
366 }
367
368 async add(item: T, processor: AsyncQueueProcessor<T>): Promise<void> {
369 this.queue.push(item);
370 this.getProgress().total = Math.max(
371 this.processed + this.queue.length,
372 this.estimate ?? 0,
373 );
374 return this.processNext(processor);
375 }
376
377 async addBatch(items: T[], processor: AsyncQueueProcessor<T>): Promise<void> {
378 this.queue.push(...items);
379 this.getProgress().total = Math.max(
380 this.processed + this.queue.length,
381 this.estimate ?? 0,
382 );
383 return this.processNext(processor);
384 }
385
386 private async processNext(processor: AsyncQueueProcessor<T>): Promise<void> {
387 if (this.running >= this.maxConcurrent || this.queue.length === 0) {
388 return;
389 }
390
391 const item = this.queue.shift();
392 if (!item) return;
393
394 this.running++;
395
396 try {
397 const progress = this.getProgress();
398
399 let itemText = "";
400 if (typeof item === "string") {
401 itemText = item;
402 } else if (typeof item === "object" && item !== null && "path" in item) {
403 itemText = "" + item.path;
404 } else {
405 itemText = JSON.stringify(item);
406 }
407 if (itemText.startsWith(LOCAL_DIR)) {
408 itemText = path.relative(LOCAL_DIR, itemText);
409 }
410
411 const spinner = new Spinner(itemText);
412 spinner.stop();
413 progress.props.active.unshift(spinner);
414 await processor(spinner, item);
415 progress.props = {
416 active: progress.props.active.filter((s) => s !== spinner),
417 };
418 this.processed++;
419 progress.value = this.processed;
420 } catch (error) {
421 console.error(`Error processing ${this.name} queue item:`, error);
422 this.processed++;
423 this.getProgress().value = this.processed;
424 } finally {
425 this.running--;
426 await this.processNext(processor);
427 }
428 }
429
430 async waitForCompletion(): Promise<void> {
431 if (this.queue.length === 0 && this.running === 0) {
432 if (this.processed > 0) {
433 this.#success();
434 }
435 return;
436 }
437
438 return new Promise((resolve) => {
439 const checkInterval = setInterval(() => {
440 if (this.queue.length === 0 && this.running === 0) {
441 clearInterval(checkInterval);
442 this.#success();
443 resolve();
444 }
445 }, 100);
446 });
447 }
448
449 #success() {
450 this.getProgress().success(`${this.processed} ${this.name}`);
451 }
452}
453
454function skipBasename(basename: string): boolean {
455 // dot files must be incrementally tracked
456 if (basename === ".dirsort") return true;
457 if (basename === ".friends") return true;
458
459 return (
460 basename.startsWith(".") ||
461 basename.startsWith("._") ||
462 basename.startsWith(".tmp") ||
463 basename === ".DS_Store" ||
464 basename.toLowerCase() === "thumbs.db" ||
465 basename.toLowerCase() === "desktop.ini"
466 );
467}
468
469// File system scanner
470class FileSystemScanner {
471 private visitedPaths = new Set<string>();
472 private previousPaths = new Set<string>();
473 private dirQueue = new AsyncQueue<string>("Scan Directories", 10);
474 private fileQueue = new AsyncQueue<{ path: string; stat: any }>(
475 "File metadata",
476 20,
477 );
478 private compressQueue: AsyncQueue<{ file: MediaFile; path: string }> | null =
479 SHOULD_COMPRESS ? new AsyncQueue("Compress Assets", 10) : null;
480
481 private getDbPath(localPath: string): string {
482 // Convert local file system path to database path
483 const relativePath = path.relative(LOCAL_DIR, localPath);
484 return "/" + relativePath.split(path.sep).join(path.posix.sep);
485 }
486
487 private getLocalPath(dbPath: string): string {
488 // Convert database path to local file system path
489 return path.join(LOCAL_DIR, dbPath.slice(1));
490 }
491
492 async scanFile(s: Spinner, filePath: string, stat: any): Promise<void> {
493 const dbPath = this.getDbPath(filePath);
494
495 // Skip hidden files
496 const basename = path.basename(filePath);
497 if (skipBasename(basename)) {
498 return;
499 }
500
501 this.visitedPaths.add(dbPath);
502
503 // Get existing file info from db
504 const existingFile = MediaFile.getByPath(dbPath);
505
506 // Determine which date to use (for date protection)
507 let dateToUse = stat.mtime;
508 const year2025Start = new Date("2025-01-01T00:00:00Z");
509
510 if (
511 existingFile &&
512 existingFile.date < year2025Start &&
513 stat.mtime >= year2025Start
514 ) {
515 console.error(
516 `Error: ${dbPath} is ${
517 formatDate(
518 existingFile.date,
519 )
520 }, got modified to ${formatDate(stat.mtime)}`,
521 );
522 dateToUse = existingFile.date;
523 }
524
525 // Check if we need to reprocess the file
526 if (existingFile && existingFile.size === stat.size && existingFile.hash) {
527 maybe_skip: {
528 const lastUpdateDate = lastUpdateTypes[path.extname(filePath)];
529 if (lastUpdateDate && existingFile.lastUpdateDate < lastUpdateDate) {
530 console.log(
531 `Reprocessing ${dbPath} because indexing logic changed after ${
532 formatDate(
533 lastUpdateDate,
534 )
535 }`,
536 );
537 break maybe_skip;
538 }
539
540 if (SHOULD_COMPRESS && existingFile.processed !== 2) {
541 this.compressQueue!.add(
542 { file: existingFile, path: dbPath },
543 this.compressFile.bind(this),
544 );
545 }
546
547 // File hasn't changed, no need to reprocess
548 MediaFile.createFile({
549 path: dbPath,
550 date: dateToUse,
551 hash: existingFile.hash,
552 size: stat.size,
553 duration: existingFile.duration,
554 dimensions: existingFile.dimensions,
555 content: existingFile.contents,
556 });
557 return;
558 }
559 }
560
561 // Process the file
562 log(`Processing file: ${dbPath}`);
563
564 // Scrub location metadata if needed
565 if (SHOULD_SCRUB) {
566 if (await scrubLocationMetadata(filePath, stat)) {
567 // Re-stat the file in case it was modified
568 const newStat = await fsp.stat(filePath);
569 stat.size = newStat.size;
570 }
571 }
572
573 // Extract content
574 const hash = await calculateHash(filePath);
575 let content = "";
576 if (filePath.endsWith(".lnk")) {
577 content = (await fsp.readFile(filePath, "utf8")).trim();
578 }
579 const language = CODE_EXTENSIONS[path.extname(filePath)];
580 if (language) {
581 read_code: {
582 // An issue is that .ts is an overloaded extension, shared between
583 // 'transport stream' and 'typescript'.
584 //
585 // Filter used here is:
586 // - more than 1mb
587 // - invalid UTF-8
588 if (stat.size > 1_000_000) break read_code;
589 let code;
590 const buf = await fsp.readFile(filePath);
591 try {
592 code = new TextDecoder("utf-8", { fatal: true }).decode(buf);
593 } catch (error) {
594 break read_code;
595 }
596 content = await highlightCode(code, language);
597 }
598 }
599 if (!content && READ_CONTENTS_EXTENSIONS.has(path.extname(filePath))) {
600 content = await fsp.readFile(filePath, "utf8");
601 }
602 // End extract content
603
604 if (hash === existingFile?.hash) {
605 MediaFile.createFile({
606 path: dbPath,
607 date: dateToUse,
608 hash,
609 size: stat.size,
610 duration: existingFile.duration,
611 dimensions: existingFile.dimensions,
612 content,
613 });
614 return;
615 } else if (existingFile) {
616 if (existingFile.processed === 2) {
617 if (BlobAsset.decrementOrDelete(existingFile.hash)) {
618 log(
619 `Deleted compressed asset ${existingFile.hash}.{gzip, zstd}`,
620 true,
621 );
622 await fsp.unlink(
623 path.join(
624 COMPRESS_STORE,
625 existingFile.hash.substring(0, 2),
626 existingFile.hash + ".gz",
627 ),
628 );
629 await fsp.unlink(
630 path.join(
631 COMPRESS_STORE,
632 existingFile.hash.substring(0, 2),
633 existingFile.hash + ".zstd",
634 ),
635 );
636 }
637 }
638 }
639 const [duration, dimensions] = await Promise.all([
640 calculateDuration(filePath),
641 calculateDimensions(filePath),
642 ]);
643
644 // Update database with all metadata
645 MediaFile.createFile({
646 path: dbPath,
647 date: dateToUse,
648 hash,
649 size: stat.size,
650 duration,
651 dimensions,
652 content,
653 });
654
655 if (SHOULD_COMPRESS) {
656 this.compressQueue!.add(
657 {
658 file: MediaFile.getByPath(dbPath)!,
659 path: dbPath,
660 },
661 this.compressFile.bind(this),
662 );
663 }
664 }
665
666 async compressFile(s: Spinner, { file }: { file: MediaFile }): Promise<void> {
667 log(`Compressing file: ${file.path}`);
668 if (DRY_RUN) return;
669
670 const filePath = path.join(FILE_ROOT!, file.path);
671
672 const hash = file.hash;
673 const firstTwoChars = hash.substring(0, 2);
674 const compressDir = `${COMPRESS_STORE}/${firstTwoChars}`;
675 const compressPath = `${compressDir}/${hash}`;
676
677 // Create directory structure if it doesn't exist
678 await fsp.mkdir(compressDir, { recursive: true });
679
680 // Compress the file with gzip
681 const blob = BlobAsset.putOrIncrement(hash);
682 if (blob.refs > 1) {
683 log(
684 `Skipping compression of ${filePath} because it already exists in ${compressPath}`,
685 );
686 return;
687 }
688 // Check if already exists
689 if (existsSync(compressPath + ".gz")) {
690 file.setCompressed(true);
691 return;
692 }
693 try {
694 const gzipProcess = Bun.spawn(["gzip", "-c", filePath, "-9"], {
695 stdout: Bun.file(compressPath + ".gz"),
696 });
697 const zstdProcess = Bun.spawn(["zstd", "-c", filePath, "-9"], {
698 stdout: Bun.file(compressPath + ".zstd"),
699 });
700 const [gzipExited, zstdExited] = await Promise.all([
701 gzipProcess.exited,
702 zstdProcess.exited,
703 ]);
704 assert(gzipExited === 0);
705 assert(zstdExited === 0);
706 assert(existsSync(compressPath + ".gz"));
707 assert(existsSync(compressPath + ".zstd"));
708 file.setCompressed(true);
709 } catch (error) {
710 console.error(`Error compressing file ${filePath}:`, error);
711 BlobAsset.decrementOrDelete(hash);
712 file.setCompressed(false);
713 }
714 }
715
716 async scanDirectory(s: Spinner, dirPath: string): Promise<void> {
717 const dbPath = this.getDbPath(dirPath);
718
719 this.visitedPaths.add(dbPath);
720
721 // Create or update directory entry
722 log(`Scanning directory: ${dbPath}`);
723 if (!DRY_RUN) {
724 MediaFile.createOrUpdateDirectory(dbPath);
725 }
726
727 try {
728 const entries = await fsp.readdir(dirPath, { withFileTypes: true });
729
730 // Process files and subdirectories
731 for (const entry of entries) {
732 const entryPath = path.join(dirPath, entry.name);
733
734 // Skip hidden files and system files
735 if (skipBasename(entry.name)) {
736 continue;
737 }
738
739 if (entry.isDirectory()) {
740 // Queue subdirectory for scanning
741 this.dirQueue.add(entryPath, this.scanDirectory.bind(this));
742 } else if (entry.isFile()) {
743 // Queue file for processing
744 const stat = await fsp.stat(entryPath);
745
746 this.fileQueue.add(
747 { path: entryPath, stat },
748 async (s, item) => await this.scanFile(s, item.path, item.stat),
749 );
750 }
751 }
752 } catch (error) {
753 console.error(`Error scanning directory ${dirPath}:`, error);
754 }
755 }
756
757 async processDirectoryMetadata(dirPath: string): Promise<void> {
758 const dbPath = this.getDbPath(dirPath);
759 const dir = MediaFile.getByPath(dbPath);
760
761 if (!dir || dir.kind !== MediaFile.Kind.directory) {
762 return;
763 }
764
765 if (DRY_RUN) return;
766
767 const children = dir.getChildren();
768
769 // Calculate directory metadata
770 let totalSize = 0;
771 let newestDate = new Date(0);
772 let allHashes = "";
773
774 // Check for readme.txt
775 let readmeContent = "";
776
777 try {
778 readmeContent = await fsp.readFile(
779 path.join(dirPath, "readme.txt"),
780 "utf8",
781 );
782 } catch (error: any) {
783 console.info(`no readme ${dirPath}`);
784 if (error.code !== "ENOENT") {
785 console.error(`Error reading readme.txt in ${dirPath}:`, error);
786 }
787 }
788
789 let dirsort: string[] | null = null;
790 try {
791 dirsort = (await fsp.readFile(path.join(dirPath, ".dirsort"), "utf8"))
792 .split("\n")
793 .map((x) => x.trim())
794 .filter(Boolean);
795 } catch (error: any) {
796 if (error.code !== "ENOENT") {
797 console.error(`Error reading .dirsort in ${dirPath}:`, error);
798 }
799 }
800
801 if (await fsp.exists(path.join(dirPath, ".friends"))) {
802 FilePermissions.setPermissions(dbPath, 1);
803 } else {
804 FilePermissions.setPermissions(dbPath, 0);
805 }
806
807 // Process children
808 for (const child of children) {
809 totalSize += child.size;
810 allHashes += child.hash;
811
812 // Update newest date, ignoring readme.txt
813 if (!child.path.endsWith("/readme.txt") && child.date > newestDate) {
814 newestDate = child.date;
815 }
816 }
817
818 // Create a hash for the directory
819 const dirHash = new Bun.CryptoHasher("sha1")
820 .update(dbPath + allHashes)
821 .digest("hex");
822
823 // Update directory metadata
824 MediaFile.markDirectoryProcessed({
825 id: dir.id,
826 timestamp: newestDate,
827 contents: readmeContent,
828 size: totalSize,
829 hash: dirHash,
830 dirsort,
831 });
832 }
833
834 async findDeletedFiles(): Promise<void> {
835 if (DRY_RUN) return;
836
837 // Find all paths that exist in the DB but not in the filesystem
838 const deletedPaths = Array.from(this.previousPaths).filter(
839 (path) => !this.visitedPaths.has(path),
840 );
841
842 for (const dbPath of deletedPaths) {
843 const file = MediaFile.getByPath(dbPath);
844 if (!file) continue;
845
846 log(`Item Deleted: ${dbPath}`, true);
847 if (file.processed === 2) {
848 if (BlobAsset.decrementOrDelete(file.hash)) {
849 log(`Deleted compressed asset ${file.hash}.{gzip, zstd}`, true);
850 await fsp.unlink(
851 path.join(
852 COMPRESS_STORE,
853 file.hash.substring(0, 2),
854 file.hash + ".gz",
855 ),
856 );
857 await fsp.unlink(
858 path.join(
859 COMPRESS_STORE,
860 file.hash.substring(0, 2),
861 file.hash + ".zstd",
862 ),
863 );
864 }
865 }
866 MediaFile.deleteByPath(dbPath);
867 }
868 }
869
870 async loadPreviousPaths(): Promise<void> {
871 // Get all files and directories from the database
872 // This uses a custom query to get all paths at once
873 const getAllPathsQuery = cache
874 .prepare(`SELECT path, kind FROM media_files`)
875 .all() as {
876 path: string;
877 kind: MediaFile.Kind;
878 }[];
879
880 let dirs = 0;
881 let files = 0;
882 for (const row of getAllPathsQuery) {
883 this.previousPaths.add(row.path);
884 if (row.kind === MediaFile.Kind.directory) {
885 dirs++;
886 } else {
887 files++;
888 }
889 }
890
891 this.dirQueue.setEstimate(dirs);
892 this.fileQueue.setEstimate(files);
893
894 // log(`Loaded ${this.previousPaths.size} paths from database`, true);
895 }
896
897 async scan(): Promise<void> {
898 log(`Starting file system scan in ${LOCAL_DIR}`, true);
899
900 // Check if the root directory exists and is accessible
901 try {
902 const rootStat = await fsp.stat(LOCAL_DIR);
903 if (!rootStat.isDirectory()) {
904 throw new Error(`${LOCAL_DIR} is not a directory`);
905 }
906 } catch (error) {
907 console.error(`Error: Cannot access root directory ${LOCAL_DIR}`, error);
908 console.error(
909 `Aborting scan to prevent database corruption. Please check if the volume is mounted.`,
910 );
911 process.exit(1);
912 }
913
914 await this.loadPreviousPaths();
915
916 await this.dirQueue.add(LOCAL_DIR, this.scanDirectory.bind(this));
917
918 await this.dirQueue.waitForCompletion();
919 await this.fileQueue.waitForCompletion();
920
921 await this.findDeletedFiles();
922
923 const allDirs = Array.from(this.visitedPaths)
924 .filter((path) => {
925 const file = MediaFile.getByPath(path);
926 return file && file.kind === MediaFile.Kind.directory;
927 })
928 .sort((a, b) => b.length - a.length);
929
930 const dirMetadataQueue = new AsyncQueue<string>("Directory Metadata", 10);
931 for (const dirPath of allDirs) {
932 await this.processDirectoryMetadata(this.getLocalPath(dirPath));
933 }
934
935 await dirMetadataQueue.waitForCompletion();
936
937 if (SHOULD_COMPRESS) {
938 await this.compressQueue!.waitForCompletion();
939 }
940
941 log("Scan completed successfully!", true);
942 }
943}
944
945// Main execution
946function showHelp() {
947 console.log(`
948MediaFile Scanner - Index filesystem content for paperclover.net
949
950Environment variables:
951 FILE_ROOT Required. Path to the directory to scan
952 COMPRESS_STORE Optional. Path to store compressed files (default: .clover/compressed)
953
954Options:
955 --help Show this help message
956 --dry-run Don't make any changes to the database
957 --verbose Show detailed output
958
959Usage:
960 bun ./media/scan.ts [options]
961
962`);
963 process.exit(0);
964}
965
966{
967 // Show help if requested
968 if (process.argv.includes("--help")) {
969 showHelp();
970 process.exit(0);
971 }
972
973 // Check if the root directory exists before starting
974 if (!existsSync(LOCAL_DIR)) {
975 console.error(
976 `Error: Root directory ${LOCAL_DIR} does not exist or is not accessible.`,
977 );
978 console.error(`Please check if the volume is mounted correctly.`);
979 process.exit(1);
980 }
981
982 const startTime = Date.now();
983
984 try {
985 const scanner = new FileSystemScanner();
986 await scanner.scan();
987
988 const endTime = Date.now();
989 log(`Scan completed in ${(endTime - startTime) / 1000} seconds`, true);
990
991 const rootDir = MediaFile.getByPath("/")!;
992 const totalEntries = cache
993 .prepare(`SELECT COUNT(*) as count FROM media_files`)
994 .get() as { count: number };
995 const totalDuration = cache
996 .prepare(`SELECT SUM(duration) as duration FROM media_files`)
997 .get() as { duration: number };
998 console.log();
999 console.log("Global Stats");
1000 console.log(` Entry count: ${totalEntries.count}`);
1001 console.log(` Uncompressed size: ${formatSize(rootDir.size)}`);
1002 console.log(
1003 ` Total audio/video duration: ${
1004 (
1005 totalDuration.duration /
1006 60 /
1007 60
1008 ).toFixed(1)
1009 } hours`,
1010 );
1011 } catch (error) {
1012 console.error("Error during scan:", error);
1013 process.exit(1);
1014 }
1015}
src/file-viewer/cache.ts created+418
......@@ -0,0 +1,418 @@
1import { Agent, get } from "node:https";
2import * as fs from "node:fs";
3import * as path from "node:path";
4import { Buffer } from "node:buffer";
5import type { ClientRequest } from "node:http";
6import { LRUCache } from "lru-cache";
7import { open } from "node:fs/promises";
8import { createHash } from "node:crypto";
9import { scoped } from "@paperclover/console";
10import { escapeUri } from "./share.ts";
11
12declare const Deno: any;
13
14const sourceOfTruth = "https://nas.paperclover.net:43250";
15const caCert = fs.readFileSync(path.join(import.meta.dirname, "cert.pem"));
16
17const diskCacheRoot = path.join(import.meta.dirname, "../.clover/filecache/");
18const diskCacheMaxSize = 14 * 1024 * 1024 * 1024; // 14GB
19const ramCacheMaxSize = 1 * 1024 * 1024 * 1024; // 1.5GB
20const loadInProgress = new Map<
21 string,
22 Promise<{ stream: ReadableStream }> | { stream: ReadableStream }
23>();
24// Disk cache serializes the access times
25const diskCacheState: Record<string, [size: number, lastAccess: number]> =
26 loadDiskCacheState();
27const diskCache = new LRUCache<string, number>({
28 maxSize: diskCacheMaxSize,
29 ttl: 0,
30 sizeCalculation: (value) => value,
31 dispose: (_, key) => {
32 delete diskCacheState[key];
33 },
34 onInsert: (size, key) => {
35 diskCacheState[key] = [size, Date.now()];
36 },
37});
38const ramCache = new LRUCache<string, Buffer>({
39 maxSize: ramCacheMaxSize,
40 ttl: 0,
41 sizeCalculation: (value) => value.byteLength,
42});
43let diskCacheFlush: NodeJS.Timeout | undefined;
44
45{
46 // Initialize the disk cache by validating all files exist, and then
47 // inserting them in last to start order. State is repaired pessimistically.
48 const toDelete = new Set(Object.keys(diskCacheState));
49 fs.mkdirSync(diskCacheRoot, { recursive: true });
50 for (
51 const file of fs.readdirSync(diskCacheRoot, {
52 recursive: true,
53 encoding: "utf-8",
54 })
55 ) {
56 const key = file.split("/").pop()!;
57 if (key.length !== 40) continue;
58 const entry = diskCacheState[key];
59 if (!entry) {
60 fs.rmSync(path.join(diskCacheRoot, file), {
61 recursive: true,
62 force: true,
63 });
64 delete diskCacheState[key];
65 continue;
66 }
67 toDelete.delete(key);
68 }
69 for (const key of toDelete) {
70 delete diskCacheState[key];
71 }
72 saveDiskCacheState();
73 const sorted = Object.keys(diskCacheState).sort((a, b) =>
74 diskCacheState[b][1] - diskCacheState[a][1]
75 );
76 for (const key of sorted) {
77 diskCache.set(key, diskCacheState[key][0]);
78 }
79}
80
81export type CacheSource = "ram" | "disk" | "miss" | "lan" | "flight";
82export type CompressionFormat = "gzip" | "zstd" | "raw";
83const compressionFormatMap = {
84 gzip: "gz",
85 zstd: "zstd",
86 raw: "file",
87} as const;
88
89const log = scoped("file_cache");
90
91const lanMount = "/Volumes/clover/Published";
92const hasLanMount = fs.existsSync(lanMount);
93
94/**
95 * Fetches a file with the given compression format.
96 * Uncompressed files are never persisted to disk.
97 *
98 * Returns a promise to either:
99 * - Buffer: the data is from RAM cache
100 * - ReadableStream: the data is being streamed in from disk/server
101 *
102 * Additionally, returns a string indicating the source of the data, for debugging.
103 *
104 * Callers must be able to consume both output types.
105 */
106export async function fetchFile(
107 pathname: string,
108 format: CompressionFormat = "raw",
109): Promise<
110 [Buffer | ReadableStream, encoding: CompressionFormat, src: CacheSource]
111> {
112 // 1. Ram cache
113 const cacheKey = hashKey(`${pathname}:${format}`);
114 const ramCacheHit = ramCache.get(cacheKey);
115 if (ramCacheHit) {
116 log(`ram hit: ${format}${pathname}`);
117 return [ramCacheHit, format, "ram"];
118 }
119
120 // 2. Tee an existing loading stream.
121 const inProgress = loadInProgress.get(cacheKey);
122 if (inProgress) {
123 const stream = await inProgress;
124 const [stream1, stream2] = stream.stream.tee();
125 loadInProgress.set(cacheKey, { stream: stream2 });
126 log(`in-flight copy: ${format}${pathname}`);
127 return [stream1, format, "flight"];
128 }
129
130 // 3. Disk cache + Load into ram cache.
131 if (format !== "raw") {
132 const diskCacheHit = diskCache.get(cacheKey);
133 if (diskCacheHit) {
134 diskCacheState[cacheKey] = [diskCacheHit, Date.now()];
135 saveDiskCacheStateLater();
136 log(`disk hit: ${format}/${pathname}`);
137 return [
138 startInProgress(
139 cacheKey,
140 new ReadableStream({
141 start: async (controller) => {
142 const stream = fs.createReadStream(
143 path.join(diskCacheRoot, cacheKey),
144 );
145 const chunks: Buffer[] = [];
146 stream.on("data", (chunk) => {
147 controller.enqueue(chunk);
148 chunks.push(chunk as Buffer);
149 });
150 stream.on("end", () => {
151 controller.close();
152 ramCache.set(cacheKey, Buffer.concat(chunks));
153 finishInProgress(cacheKey);
154 });
155 stream.on("error", (error) => {
156 controller.error(error);
157 });
158 },
159 }),
160 ),
161 format,
162 "disk",
163 ];
164 }
165 }
166
167 // 4. Lan Mount (access files that prod may not have)
168 if (hasLanMount) {
169 log(`lan hit: ${format}/${pathname}`);
170 return [
171 startInProgress(
172 cacheKey,
173 new ReadableStream({
174 start: async (controller) => {
175 const stream = fs.createReadStream(
176 path.join(lanMount, pathname),
177 );
178 const chunks: Buffer[] = [];
179 stream.on("data", (chunk) => {
180 controller.enqueue(chunk);
181 chunks.push(chunk as Buffer);
182 });
183 stream.on("end", () => {
184 controller.close();
185 ramCache.set(cacheKey, Buffer.concat(chunks));
186 finishInProgress(cacheKey);
187 });
188 stream.on("error", (error) => {
189 controller.error(error);
190 });
191 },
192 }),
193 ),
194 "raw",
195 "lan",
196 ];
197 }
198
199 // 4. Fetch from server
200 const url = `${compressionFormatMap[format]}${escapeUri(pathname)}`;
201 log(`miss: ${format}${pathname}`);
202 const response = await startInProgress(cacheKey, fetchFileUncached(url));
203 const [stream1, stream2] = response.tee();
204 handleDownload(cacheKey, format, stream2);
205 return [stream1, format, "miss"];
206}
207
208export async function prefetchFile(
209 pathname: string,
210 format: CompressionFormat = "zstd",
211) {
212 const cacheKey = hashKey(`${pathname}:${format}`);
213 const ramCacheHit = ramCache.get(cacheKey);
214 if (ramCacheHit) {
215 return;
216 }
217 if (hasLanMount) return;
218 const url = `${compressionFormatMap[format]}${pathname}`;
219 log(`prefetch: ${format}${pathname}`);
220 const stream2 = await startInProgress(cacheKey, fetchFileUncached(url));
221 handleDownload(cacheKey, format, stream2);
222}
223
224async function handleDownload(
225 cacheKey: string,
226 format: CompressionFormat,
227 stream2: ReadableStream,
228) {
229 let chunks: Buffer[] = [];
230 if (format !== "raw") {
231 const file = await open(path.join(diskCacheRoot, cacheKey), "w");
232 try {
233 for await (const chunk of stream2) {
234 await file.write(chunk);
235 chunks.push(chunk);
236 }
237 } finally {
238 file.close();
239 }
240 } else {
241 for await (const chunk of stream2) {
242 chunks.push(chunk);
243 }
244 }
245 const final = Buffer.concat(chunks);
246 chunks.length = 0;
247 ramCache.set(cacheKey, final);
248 if (format !== "raw") {
249 diskCache.set(cacheKey, final.byteLength);
250 }
251 finishInProgress(cacheKey);
252}
253
254function hashKey(key: string): string {
255 return createHash("sha1").update(key).digest("hex");
256}
257
258function startInProgress<T extends Promise<ReadableStream> | ReadableStream>(
259 cacheKey: string,
260 promise: T,
261): T {
262 if (promise instanceof Promise) {
263 let resolve2: (stream: { stream: ReadableStream }) => void;
264 let reject2: (error: Error) => void;
265 const stream2Promise = new Promise<{ stream: ReadableStream }>(
266 (resolve, reject) => {
267 resolve2 = resolve;
268 reject2 = reject;
269 },
270 );
271 const stream1Promise = new Promise<ReadableStream>((resolve, reject) => {
272 promise.then((stream) => {
273 const [stream1, stream2] = stream.tee();
274 const stream2Obj = { stream: stream2 };
275 resolve2(stream2Obj);
276 loadInProgress.set(cacheKey, stream2Obj);
277 resolve(stream1);
278 }, reject);
279 });
280 loadInProgress.set(cacheKey, stream2Promise);
281 return stream1Promise as T;
282 } else {
283 const [stream1, stream2] = promise.tee();
284 loadInProgress.set(cacheKey, { stream: stream2 });
285 return stream1 as T;
286 }
287}
288
289function loadDiskCacheState(): Record<
290 string,
291 [size: number, lastAccess: number]
292> {
293 try {
294 const state = JSON.parse(
295 fs.readFileSync(path.join(diskCacheRoot, "state.json"), "utf-8"),
296 );
297 return state;
298 } catch (error) {
299 return {};
300 }
301}
302
303function saveDiskCacheStateLater() {
304 if (diskCacheFlush) {
305 return;
306 }
307 diskCacheFlush = setTimeout(() => {
308 saveDiskCacheState();
309 }, 60_000) as NodeJS.Timeout;
310 if (diskCacheFlush.unref) {
311 diskCacheFlush.unref();
312 }
313}
314
315process.on("exit", () => {
316 saveDiskCacheState();
317});
318
319function saveDiskCacheState() {
320 fs.writeFileSync(
321 path.join(diskCacheRoot, "state.json"),
322 JSON.stringify(diskCacheState),
323 );
324}
325
326function finishInProgress(cacheKey: string) {
327 loadInProgress.delete(cacheKey);
328}
329
330// Self signed certificate must be trusted to be able to request the above URL.
331//
332// Unfortunately, Bun and Deno are both not node.js compatible, so those two
333// runtimes need fallback implementations. The fallback implementations calls
334// fetch with the `agent` value as the RequestInit. Since `fetch` decompresses
335// the body for you, it must be disabled.
336const agent: any = typeof Bun !== "undefined"
337 ? {
338 // Bun has two non-standard fetch extensions
339 decompress: false,
340 tls: {
341 ca: caCert,
342 },
343 }
344 // TODO: https://github.com/denoland/deno/issues/12291
345 // : typeof Deno !== "undefined"
346 // ? {
347 // // Deno configures through the non-standard `client` extension
348 // client: Deno.createHttpClient({
349 // caCerts: [caCert.toString()],
350 // }),
351 // }
352 // Node.js supports node:http
353 : new Agent({
354 ca: caCert,
355 });
356
357function fetchFileNode(pathname: string): Promise<ReadableStream> {
358 return new Promise((resolve, reject) => {
359 const request: ClientRequest = get(`${sourceOfTruth}/${pathname}`, {
360 agent,
361 });
362 request.on("response", (response) => {
363 if (response.statusCode !== 200) {
364 reject(new Error(`Failed to fetch ${pathname}`));
365 return;
366 }
367
368 const stream = new ReadableStream({
369 start(controller) {
370 response.on("data", (chunk) => {
371 controller.enqueue(chunk);
372 });
373
374 response.on("end", () => {
375 controller.close();
376 });
377
378 response.on("error", (error) => {
379 controller.error(error);
380 reject(error);
381 });
382 },
383 });
384
385 resolve(stream);
386 });
387
388 request.on("error", (error) => {
389 reject(error);
390 });
391 });
392}
393
394async function fetchFileDenoBun(pathname: string): Promise<ReadableStream> {
395 const req = await fetch(`${sourceOfTruth}/${pathname}`, agent);
396 if (!req.ok) {
397 throw new Error(`Failed to fetch ${pathname}`);
398 }
399 return req.body!;
400}
401
402const fetchFileUncached =
403 typeof Bun !== "undefined" || typeof Deno !== "undefined"
404 ? fetchFileDenoBun
405 : fetchFileNode;
406
407export async function toBuffer(
408 stream: ReadableStream | Buffer,
409): Promise<Buffer> {
410 if (!(stream instanceof ReadableStream)) {
411 return stream;
412 }
413 const chunks: Buffer[] = [];
414 for await (const chunk of stream) {
415 chunks.push(chunk);
416 }
417 return Buffer.concat(chunks);
418}
src/file-viewer/cert.pem created+23
......@@ -0,0 +1,23 @@
1-----BEGIN CERTIFICATE-----
2MIIDxTCCAq2gAwIBAgIUBaaOXVkkE+6yarNyvzofETb+WLEwDQYJKoZIhvcNAQEL
3BQAwdzELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVN0YXRlMQ0wCwYDVQQHDARDaXR5
4MRUwEwYDVQQKDAxNZWRpYSBTZXJ2ZXIxDzANBgNVBAMMBnplbml0aDEhMB8GCSqG
5SIb3DQEJARYSbWVAcGFwZXJjbG92ZXIubmV0MB4XDTI1MDQyNzIxNTU0MFoXDTM1
6MDQyNTIxNTU0MFowdzELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVN0YXRlMQ0wCwYD
7VQQHDARDaXR5MRUwEwYDVQQKDAxNZWRpYSBTZXJ2ZXIxDzANBgNVBAMMBnplbml0
8aDEhMB8GCSqGSIb3DQEJARYSbWVAcGFwZXJjbG92ZXIubmV0MIIBIjANBgkqhkiG
99w0BAQEFAAOCAQ8AMIIBCgKCAQEAv7lLwx8XwsuTeaIxTsHDL+Lx7eblsJ0XylVm
100/iIJS1Mrq6Be9St6vDWK/BWqqAn+MdqzSfLMy8EKazuHKtbTm2vlUIkjw28SoWP
116cRSCLx4hFGbF4tmRO+Bo+/4PpHPnheeolkjJ+CLO87tZ752D9JzjVND+WIj1QO+
12bm+JBIi1TFREPh22/fSZBRpaRgqHcUEhICaiXaufvxQ6eihQfGSe00I7zRzGgnMl
1351xjzkKkXd+r/FwTykd8ScJN25FMVDLsfJR59//geAZXYS25gQ4YL6R8u7ijidlS
14IoDG8N+Fzw7W4yI+y8fIN4W1x/HsjiQ665CuWY3TMYo98OaGwwIDAQABo0kwRzAm
15BgNVHREEHzAdggZ6ZW5pdGiCE25hcy5wYXBlcmNsb3Zlci5uZXQwHQYDVR0OBBYE
16FDXkgNsMYZv1Pr+95RCCk7eHACGOMA0GCSqGSIb3DQEBCwUAA4IBAQB6942odKyD
17TudifxRXbvcVe9LxSd7NimxRZzM5wTgA5KkxQT4CBM2wEPH/7e7Q/8scB9HbH2uP
18f2vixoCM+Z3BWiYHFFk+1pf2myUdiFV2BC9g80txEerRkGLc18V6CdYNJ9wNPkiO
19LW/RzXfEv+sqhaXh8dA46Ruz6SAbmscTMMYW4e9VYR+1p4Sm5UpTxrHzeg21YJKn
20ud8kO1r7RhVgUGzkAzNaIMiBuJqGGdD5yV7Ng5C/DlJ9AAeYu1diM5LkIKjf+/8M
21t/3l4eXS3Lda6+21rDvmfoK4Za6CAhcwgXIpqiRixE2MQNsxZ2XiJBVQHPrh8xYk
22L5fq8KTGFwtd
23-----END CERTIFICATE-----
src/file-viewer/cotyledon.tsx created+291
......@@ -0,0 +1,291 @@
1export function Speedbump() {
2 return (
3 <div class="panel last">
4 <div className="header">
5 an interlude
6 </div>
7 <div className="content file-view file-view-text speedbump">
8 <canvas
9 style="linear-gradient(45deg, #111318, #181f20)"
10 data-canvas="cotyledon"
11 >
12 </canvas>
13 <header>
14 <h1>cotyledon</h1>
15 </header>
16 <div id="captcha" style="display: none;">
17 <p style="max-width:480px">
18 please prove you're not a robot by selecting all of the images with
19 four-leaf clovers, until there are only regular clovers.
20 <noscript>
21 this will require javascript enabled on your computer to verify
22 the mouse clicks.
23 </noscript>
24 </p>
25 <div className="enter-container">
26 <div className="image-grid">
27 <button>
28 <img src="/captcha/image/1.jpeg" alt="a four-leaf clover" />
29 </button>
30 <button>
31 <img src="/captcha/image/2.jpeg" alt="a four-leaf clover" />
32 </button>
33 <button>
34 <img src="/captcha/image/3.jpeg" alt="a four-leaf clover" />
35 </button>
36 <button>
37 <img src="/captcha/image/4.jpeg" alt="a four-leaf clover" />
38 </button>
39 <button>
40 <img src="/captcha/image/5.jpeg" alt="a four-leaf clover" />
41 </button>
42 <button>
43 <img src="/captcha/image/6.jpeg" alt="a four-leaf clover" />
44 </button>
45 <button>
46 <img src="/captcha/image/7.jpeg" alt="a four-leaf clover" />
47 </button>
48 <button>
49 <img src="/captcha/image/8.jpeg" alt="a four-leaf clover" />
50 </button>
51 <button>
52 <img src="/captcha/image/9.jpeg" alt="a four-leaf clover" />
53 </button>
54 </div>
55 </div>
56 <div class="enter-container">
57 <button id="enter2">all done</button>
58 </div>
59 </div>
60 <div id="first">
61 <p>
62 this place is sacred, but dangerous. i have to keep visitors to an
63 absolute minimum; you'll get dust on all the artifacts.
64 </p>
65 <p>
66 by entering our museum, you agree not to use your camera. flash off
67 isn't enough; the bits and bytes are alergic even to a camera's
68 sensor
69 </p>
70 <p style="font-size:0.9rem;">
71 (in english: please do not store downloads after you're done viewing
72 them)
73 </p>
74 <div class="enter-container">
75 <button id="enter">break my boundaries</button>
76 </div>
77 </div>
78 </div>
79 </div>
80 );
81}
82
83export function Readme() {
84 return (
85 <div class="panel last">
86 <div className="header">
87 cotyledon
88 </div>
89 <div className="content file-view file-view-text">
90 <div style="max-width: 71ch;padding:3rem;font-family:rmo,monospace">
91 <p style="margin-top:0">
92 welcome to the archive. if this is your first time here, i recommend
93 starting in '<a href="/file/2017">2017</a>' and going
94 chronologically from there. however, there is truly no wrong way to
95 explore.
96 </p>
97 <p>
98 note that there is a blanket trigger warning for everything in this
99 archive: while there is nothing visually offensive, some portions of
100 the text and emotions conveyed through this may hit extremely hard.
101 you are warned.
102 </p>
103 <p>
104 all file dates are real. at least as real as i could figure out.
105 when i moved data across drives over my years, i accidentally had a
106 few points where i stamped over all the dates with the day that
107 moved the files. even fucked it up a final time in february 2025,
108 while in the process of unfucking things.
109 </p>
110 <p>
111 thankfully, my past self knew i'd want to assemble this kind of
112 site, and because of that they were crazy about storing the dates of
113 things inside of html, json/yaml files, and even in fucking
114 databases. i'm glad it was all stored though, but jeez what a nerd.
115 </p>
116 <p>
117 a few files were touched up for privacy, or otherwise re-encoded.
118 some of them i added extra metadata.
119 </p>
120 <p>
121 from the bottom of my heart: i hope you enjoy. it has been a
122 nightmare putting this all together. technically and emotionally
123 speaking. i'm glad we can put this all behind us, mark it as
124 completed, and get started with the good shit.
125 </p>
126 <p>
127 love,<br />clo
128 </p>
129 <br />
130 <p>
131 start here -&gt; <a href="/file/2017">2017</a>
132 </p>
133 </div>
134 </div>
135 </div>
136 );
137}
138
139export function ForEveryone() {
140 // deno-fmt-ignore
141 return <><div class="for_everyone">
142<p>today is my 21st birthday. april 30th, 2025.</p>
143<p>it's been nearly six months starting hormones.</p>
144<p>sometimes i feel great,</p>
145<p>sometimes i get dysphoria.</p>
146<p>with the walls around me gone</p>
147<p>that shit hits way harder than it did before.</p>
148<p>ugh..</p>
149<p>i'm glad the pain i felt is now explained,</p>
150<p>but now rendered in high definition.</p>
151<p>the smallest strands of hair on my face and belly act</p>
152<p>as sharpened nails to pierce my soul.</p>
153<p></p>
154<p>it's all a pathway to better days; the sun had risen.</p>
155<p>one little step at a time for both of us.</p>
156<p>today i quit my job. free falling, it feels so weird.</p>
157<p>like sky diving.</p>
158<p>the only thing i feel is cold wind.</p>
159<p>the only thing i see is everything,</p>
160<p>and it's beautiful.</p>
161<p>i have a month of falling before the parachute activates,</p>
162<p>gonna spend as much time of it on art as i can.</p>
163<p>that was, after all, my life plan:</p>
164<p>i wanted to make art, all the time,</p>
165<p>for everyone.</p>
166<p></p>
167<p>then you see what happened</p>
168<p>to the world and the internet.</p>
169<p>i never really got to live through that golden age,</p>
170<p>it probably sucked back then too.</p>
171<p>but now the big sites definitely stopped being fun.</p>
172<p>they slide their cold hands up my body</p>
173<p>and feel me around. it's unwelcoming, and</p>
174<p>inconsiderate to how sensitive my skin is.</p>
175<p>i'm so fucking glad i broke up with YouTube</p>
176<p>and their devilish friends.</p>
177<p>my NAS is at 5 / 24 TB</p>
178<p>and probably wont fill for the next decade.</p>
179<p></p>
180<p>it took 2 months for me to notice my body changed.</p>
181<p>that day was really nice, but it hurt a lot.</p>
182<p>a sharp, satisfying pain in my chest gave me life.</p>
183<p>learned new instincts for my arms</p>
184<p>so they'd stop poking my new shape.</p>
185<p>when i look at my face</p>
186<p>it's like a different person.</p>
187<p>she was the same as before, but completely new.</p>
188<p>something changed</p>
189<p>or i'm now used to seeing what makes me smile.</p>
190<p>regardless, whatever i see in the mirror, i smile.</p>
191<p>and, i don't hear that old name much anymore</p>
192<p>aside from nightmares. and you'll never repeat it, ok?</p>
193<p>okay.</p>
194<p></p>
195<p>been playing 'new canaan' by 'bill wurtz' on loop</p>
196<p>in the background.</p>
197<p>it kinda just feels right.</p>
198<p>especially when that verse near the end comes on.</p>
199<p></p>
200<p>more people have been allowed to visit me.</p>
201<p>my apartment used to be just for me,</p>
202<p>but the more i felt like a person</p>
203<p>the more i felt like having others over.</p>
204<p>still have to decorate and clean it a little,</p>
205<p>but it isn't a job to do alone.</p>
206<p>we dragged a giant a rug across the city one day,</p>
207<p>and it felt was like anything was possible.</p>
208<p>sometimes i have ten people visit in a day,</p>
209<p>or sometimes i focus my little eyes on just one.</p>
210<p>i never really know what i want to do</p>
211<p>until the time actually comes.</p>
212<p></p>
213{/* FILIP */}
214<p>i think about the times i was by the water with you.</p>
215<p>the sun setting warmly, icy air fell on our shoulders.</p>
216{/* NATALIE */}
217<p>and how we walked up to the top of that hill,</p>
218<p>you picked up and disposed a nail on the ground,</p>
219<p>walking the city thru places i've never been.</p>
220{/* BEN */}
221<p>or hiking through the park talking about compilers,</p>
222<p>tiring me out until i'd fall asleep in your arms.</p>
223{/* ELENA */}
224<p>and the way you held on to my hand as i woke up,</p>
225<p>noticing how i was trying to hide nightmare's tears.</p>
226<p></p>
227{/* HIGH SCHOOL */}
228<p>i remember we were yelling lyrics loudly,</p>
229<p>out of key yet cheered on because it was fun.</p>
230{/* ADVAITH/NATALIE */}
231<p>and when we all toured the big corporate office,</p>
232{/* AYU/HARRIS */}
233<p>then snuck in to some startup's office after hours;</p>
234<p>i don't remember what movie we watched.</p>
235{/* COLLEGE, DAY 1 IN EV's ROOM */}
236<p>i remember laying on the bunk bed,</p>
237<p>while the rest played a card game.</p>
238{/* MEGHAN/MORE */}
239<p>with us all laying on the rug, staring at the TV</p>
240<p>as the ending twist to {/* SEVERANCE */'that show'} was revealed.</p>
241<p></p>
242<p>all the moments i cherish,</p>
243<p>i love because it was always me.</p>
244<p>i didn't have to pretend,</p>
245<p>even if i didn't know who i was at the time.</p>
246<p>you all were there. for me.</p>
247<p></p>
248<p>i don't want to pretend any more</p>
249<p>i want to be myself. for everyone.</p>
250<p></p>
251<p>oh, the song ended. i thought it was on loop?</p>
252<p>it's late... can hear the crickets...</p>
253<p>and i can almost see the moon... mmmm...</p>
254<p>...nah, too much light pollution.</p>
255<p></p>
256<p>one day. one day.</p>
257<p></p>
258<p class="normal">before i go, i want to show the uncensored version of "journal about a girl", because i can trust you at least. keep in mind, i think you're one of the first people to ever see this.</p>
259</div>
260<div class="for_everyone" style="max-width:80ch;">
261<blockquote>
262<p>journal - 2024-09-14</p>
263<p>been at HackMIT today on behalf of the company. it's fun. me and zack were running around looking for people that might be good hires. he had this magic arbitrary criteria to tell "oh this person is probably cracked let's talk to them" and we go to the first one. they were a nerd, perfect. they seemed to be extremely talented with some extreme software projects.<br/>
264okay.. oof... its still clouding my mind<br/>
265i cant shake that feeling away</p>
266<p>hold on...</p>
267<p>at some point they open one of their profiles to navigate to some code, and it displays for a couple of seconds: "pronouns: she/they". i don't actually know anything about this person, but it was my perception that she is trans. their appearance, physique, and age felt similar to me, which tends makes people think you are male.</p>
268<p>but... she was having fun being herself. being a legend of identity and of her skill in computer science. winning the physics major. making cool shit at the hackathon, and probably in life. my perception of her was the exact essence of who i myself wanted to be. i was jealous of her life.</p>
269<p>i tried hard to avoid a breakdown. success. but i was feeling distant. the next hour or so was disorienting, trying not to think about it too hard. i think there was one possibly interesting person we talked to. i don't remember any of the other conversations. they were not important. but i couldn't think through them regardless.</p>
270<p>later, i decided to read some of her code. i either have a huge dislike towards the Rust programming language and/or it was not high quality code. welp, so just is a person studying. my perception was just a perception, inaccurate but impacting. i know i need to become myself, whoever that is. otherwise, i'm just going to feel this shit at higher doses. i think about this every day, and the amount of time i feel being consumed by these problems only grows.</p>
271<p>getting through it all is a lonely feeling. not because no one is around, but because i am isolated emotionally. i know other people hit these feelings, but we all are too afraid to speak up, and it's all lonely.</p>
272<p>waiting on a reply from someone from healthcare. it'll be slow, but it will be okay.</p>
273</blockquote>
274</div>
275<div class="for_everyone">
276<p class="normal">
277i've learned that even when i feel alone, it doesn't have to feel lonely. i know it's hard, dear. i know it's scary. but i promise it's possible. we're all in this together. struggling together. sacrificing together. we dedicate our lives to each you, and our art for everyone.
278</p>
279
280<p class="normal" style="font-size:2rem;color:#9C91FF;font-family:times,serif;font-style:italic">
281 and then we knew,<br/>
282 just like paper airplanes: that we could fly...
283</p>
284<br />
285<p class="normal">
286 <a href="/" style='text-decoration:underline;text-underline-offset:0.2em;'>fin.</a>
287</p>
288</div>
289</>
290}
291ForEveryone.class = "text";
src/file-viewer/format.ts created+264
......@@ -0,0 +1,264 @@
1export function formatSize(bytes: number) {
2 if (bytes < 1024) return `${bytes} bytes`;
3 if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
4 if (bytes < 1024 * 1024 * 1024) {
5 return `${(bytes / 1024 / 1024).toFixed(1)} MB`;
6 }
7 return `${(bytes / 1024 / 1024 / 1024).toFixed(1)} GB`;
8}
9export function formatDate(date: Date) {
10 // YYYY-MM-DD, format in PST timezone
11 return date.toLocaleDateString("sv", { timeZone: "America/Los_Angeles" });
12}
13export function formatShortDate(date: Date) {
14 // YY-MM-DD, format in PST timezone
15 return formatDate(date).slice(2);
16}
17export function formatDuration(seconds: number) {
18 const minutes = Math.floor(seconds / 60);
19 const remainingSeconds = seconds % 60;
20 return `${minutes}:${remainingSeconds.toString().padStart(2, "0")}`;
21}
22export const escapeUri = (uri: string) =>
23 encodeURIComponent(uri)
24 .replace(/%2F/gi, "/")
25 .replace(/%3A/gi, ":")
26 .replace(/%2B/gi, "+")
27 .replace(/%40/gi, "@")
28 .replace(/%2D/gi, "-")
29 .replace(/%5F/gi, "_")
30 .replace(/%2E/gi, ".")
31 .replace(/%2C/gi, ",");
32
33import type { MediaFile } from "../db.ts";
34import { escapeHTML } from "../framework/bun-polyfill.ts";
35const findDomain = "paperclover.net";
36
37// Returns escaped HTML
38// Features:
39// - autolink detection
40// - via \bpaperclover.net/[a-zA-Z0-9_\.+-]+
41// - via \b/file/[a-zA-Z0-9_\.+-]+
42// - via \bhttps://...
43// - via name of a sibling file's basename
44// - reformat (c) into ©
45//
46// This formatter was written with AI.
47export function highlightLinksInTextView(
48 text: string,
49 siblingFiles: MediaFile[] = [],
50) {
51 const siblingLookup = Object.fromEntries(
52 siblingFiles
53 .filter((f) => f.basename !== "readme.txt")
54 .map((f) => [f.basename, f]),
55 );
56
57 // First escape the HTML to prevent XSS
58 let processedText = escapeHTML(text);
59
60 // Replace (c) with ©
61 processedText = processedText.replace(/\(c\)/gi, "©");
62
63 // Process all URL patterns in a single pass to avoid nested links
64 // This regex matches:
65 // 1. https:// or http:// URLs
66 // 2. domain URLs without protocol (e.g., paperclover.net/path)
67 // 3. /file/ URLs
68 // 4. ./ relative paths
69
70 // We'll use a function to determine what kind of URL it is and format accordingly
71 const urlRegex = new RegExp(
72 "(" +
73 // Group 1: https:// or http:// URLs
74 "\\bhttps?:\\/\\/[a-zA-Z0-9_\\.\\-]+\\.[a-zA-Z0-9_\\.\\-]+[a-zA-Z0-9_\\.\\-\\/\\?=&%+#]*" +
75 "|" +
76 // Group 2: domain URLs without protocol
77 findDomain +
78 "\\/\\/[a-zA-Z0-9_\\.\\+\\-]+" +
79 "|" +
80 // Group 3: /file/ URLs
81 "\\/file\\/[a-zA-Z0-9_\\.\\+\\-\\/]+" +
82 ")\\b" +
83 "|" +
84 // Group 4: ./ relative paths (not word-bounded)
85 "(?<=\\s|^)\\.\\/[\\w\\-\\.]+",
86 "g",
87 );
88
89 processedText = processedText.replace(urlRegex, (match: string) => {
90 // Case 1: https:// or http:// URLs
91 if (match.startsWith("http")) {
92 if (match.includes(findDomain)) {
93 return `<a href="${
94 match
95 .replace(/https?:\/\/paperclover\.net\/+/, "/")
96 .replace(/\/\/+/g, "/")
97 }">${match}</a>`;
98 }
99 return `<a href="${
100 match.replace(/\/\/+/g, "/")
101 }" target="_blank" rel="noopener noreferrer">${match}</a>`;
102 }
103
104 // Case 2: domain URLs without protocol
105 if (match.startsWith(findDomain)) {
106 return `<a href="${
107 match.replace(findDomain + "/", "/").replace(/\/\/+/g, "/")
108 }">${match}</a>`;
109 }
110
111 // Case 3: /file/ URLs
112 if (match.startsWith("/file/")) {
113 return `<a href="${match}">${match}</a>`;
114 }
115
116 // Case 4: ./ relative paths
117 if (match.startsWith("./")) {
118 const filename = match.substring(2);
119
120 // Check if the filename exists in sibling files
121 const siblingFile = siblingFiles.find((f) => f.basename === filename);
122 if (siblingFile) {
123 return `<a href="/file/${siblingFile.path}">${match}</a>`;
124 }
125
126 // If no exact match but we have sibling files, try to create a reasonable link
127 if (siblingFiles.length > 0) {
128 const currentDir = siblingFiles[0].path
129 .split("/")
130 .slice(0, -1)
131 .join("/");
132 return `<a href="/file/${currentDir}/${filename}">${match}</a>`;
133 }
134 }
135
136 return match;
137 });
138
139 // Match sibling file names (only if they're not already part of a link)
140 if (siblingFiles.length > 0) {
141 // Create a regex pattern that matches any of the sibling file basenames
142 // We need to escape special regex characters in the filenames
143 const escapedBasenames = siblingFiles.map((f) =>
144 f.basename.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
145 );
146
147 // Join all basenames with | for the regex alternation
148 const pattern = new RegExp(`\\b(${escapedBasenames.join("|")})\\b`, "g");
149
150 // We need to be careful not to replace text that's already in a link
151 // So we'll split the text by HTML tags and only process the text parts
152 const parts = processedText.split(/(<[^>]*>)/);
153
154 for (let i = 0; i < parts.length; i += 2) {
155 // Only process text parts (even indices), not HTML tags (odd indices)
156 if (i < parts.length) {
157 parts[i] = parts[i].replace(pattern, (match: string) => {
158 const file = siblingLookup[match];
159 if (file) {
160 return `<a href="/file/${
161 file.path.replace(/^\//, "").replace(/\/\/+/g, "/")
162 }">${match}</a>`;
163 }
164 return match;
165 });
166 }
167 }
168
169 processedText = parts.join("");
170 }
171
172 return processedText;
173}
174
175export function highlightConvo(text: string) {
176 text = text.replace(/^#mode=convo\n/, "");
177
178 const lines = text.split("\n");
179 const paras: { speaker: string | null; lines: string[] }[] = [];
180 let currentPara: string[] = [];
181 let currentSpeaker: string | null = null;
182 let firstSpeaker = null;
183
184 const speakers: Record<string, string> = {};
185 const getSpeaker = (s: string) => {
186 if (s[1] === " " && speakers[s[0]]) {
187 return s[0];
188 }
189 return null;
190 };
191
192 for (const line of lines) {
193 let trimmed = line.trim();
194 if (line.startsWith("#")) {
195 // parse #X=Y
196 const [_, speaker, color] = trimmed.match(/^#(.)=(.*)$/)!;
197 speakers[speaker] = color;
198 continue;
199 }
200 if (trimmed === "") {
201 continue;
202 }
203 let speaker = getSpeaker(trimmed);
204 if (speaker) {
205 trimmed = trimmed.substring(speaker.length).trimStart();
206 speaker = speakers[speaker];
207 } else {
208 speaker = "me";
209 }
210
211 trimmed = trimmed.replace(
212 /\[IMG:(\/file\/[^\]]+)\]/g,
213 '<img src="$1" alt="attachment" class="convo-img" width="300" />',
214 );
215
216 if (trimmed === "---" && speaker === "me") {
217 trimmed = "<hr/>";
218 }
219
220 if (speaker === currentSpeaker) {
221 currentPara.push(trimmed);
222 } else {
223 if (currentPara.length > 0) {
224 paras.push({
225 speaker: currentSpeaker,
226 lines: currentPara,
227 });
228 currentPara = [];
229 }
230 currentPara = [trimmed];
231 currentSpeaker = speaker;
232 firstSpeaker ??= speaker;
233 }
234 }
235
236 if (currentPara.length > 0) {
237 paras.push({
238 speaker: currentSpeaker,
239 lines: currentPara,
240 });
241 }
242
243 return paras
244 .map(({ speaker, lines }) => {
245 return `<div class="s-${speaker}">${
246 lines
247 .map((line) => `<div class="line">${line}</div>`)
248 .join("\n")
249 }</div>`;
250 })
251 .join("\n");
252}
253
254export function highlightHashComments(text: string) {
255 const lines = text.split("\n");
256 return lines
257 .map((line) => {
258 if (line.startsWith("#")) {
259 return `<div style="color: var(--primary);">${line}</div>`;
260 }
261 return `<div>${line.trimEnd() || "&nbsp;"}</div>`;
262 })
263 .join("\n");
264}
src/file-viewer/highlight-grammar/astro.plist created+1203
......@@ -0,0 +1,1203 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>fileTypes</key>
6 <array>
7 <string>astro</string>
8 </array>
9 <key>foldingStartMarker</key>
10 <string>(?x)
11(&lt;(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|li|form|dl)\b.*?&gt;
12|&lt;!--(?!.*--\s*&gt;)
13|^&lt;!--\ \#tminclude\ (?&gt;.*?--&gt;)$
14|&lt;\?(?:php)?.*\b(if|for(each)?|while)\b.+:
15|\{\{?(if|foreach|capture|literal|foreach|php|section|strip)
16|\{\s*($|\?&gt;\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/)))
17)</string>
18 <key>foldingStopMarker</key>
19 <string>(?x)
20(&lt;/(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|li|form|dl)&gt;
21|^(?!.*?&lt;!--).*?--\s*&gt;
22|^&lt;!--\ end\ tminclude\ --&gt;$
23|&lt;\?(?:php)?.*\bend(if|for(each)?|while)\b
24|\{\{?/(if|foreach|capture|literal|foreach|php|section|strip)
25|^[^{]*\}
26)</string>
27 <key>keyEquivalent</key>
28 <string>^~H</string>
29 <key>name</key>
30 <string>Astro</string>
31 <key>patterns</key>
32 <array>
33 <dict>
34 <key>include</key>
35 <string>#astro-markdown</string>
36 </dict>
37 <dict>
38 <key>include</key>
39 <string>#astro-expressions</string>
40 </dict>
41 <dict>
42 <key>begin</key>
43 <string>(&lt;)([a-zA-Z0-9:-]++)(?=[^&gt;]*&gt;&lt;/\2&gt;)</string>
44 <key>beginCaptures</key>
45 <dict>
46 <key>1</key>
47 <dict>
48 <key>name</key>
49 <string>punctuation.definition.tag.begin.html</string>
50 </dict>
51 <key>2</key>
52 <dict>
53 <key>name</key>
54 <string>entity.name.tag.html</string>
55 </dict>
56 </dict>
57 <key>end</key>
58 <string>(&gt;)(&lt;)(/)(\2)(&gt;)</string>
59 <key>endCaptures</key>
60 <dict>
61 <key>1</key>
62 <dict>
63 <key>name</key>
64 <string>punctuation.definition.tag.end.html</string>
65 </dict>
66 <key>2</key>
67 <dict>
68 <key>name</key>
69 <string>punctuation.definition.tag.begin.html meta.scope.between-tag-pair.html</string>
70 </dict>
71 <key>3</key>
72 <dict>
73 <key>name</key>
74 <string>punctuation.definition.tag.begin.html</string>
75 </dict>
76 <key>4</key>
77 <dict>
78 <key>name</key>
79 <string>entity.name.tag.html</string>
80 </dict>
81 <key>5</key>
82 <dict>
83 <key>name</key>
84 <string>punctuation.definition.tag.end.html</string>
85 </dict>
86 </dict>
87 <key>name</key>
88 <string>meta.tag.any.html</string>
89 <key>patterns</key>
90 <array>
91 <dict>
92 <key>include</key>
93 <string>#tag-stuff</string>
94 </dict>
95 </array>
96 </dict>
97 <dict>
98 <key>begin</key>
99 <string>(&lt;\?)(xml)</string>
100 <key>captures</key>
101 <dict>
102 <key>1</key>
103 <dict>
104 <key>name</key>
105 <string>punctuation.definition.tag.html</string>
106 </dict>
107 <key>2</key>
108 <dict>
109 <key>name</key>
110 <string>entity.name.tag.xml.html</string>
111 </dict>
112 </dict>
113 <key>end</key>
114 <string>(\?&gt;)</string>
115 <key>name</key>
116 <string>meta.tag.preprocessor.xml.html</string>
117 <key>patterns</key>
118 <array>
119 <dict>
120 <key>include</key>
121 <string>#tag-generic-attribute</string>
122 </dict>
123 <dict>
124 <key>include</key>
125 <string>#string-double-quoted</string>
126 </dict>
127 <dict>
128 <key>include</key>
129 <string>#string-single-quoted</string>
130 </dict>
131 </array>
132 </dict>
133 <dict>
134 <key>begin</key>
135 <string>&lt;!--</string>
136 <key>captures</key>
137 <array>
138 <dict>
139 <key>name</key>
140 <string>punctuation.definition.comment.html</string>
141 </dict>
142 </array>
143 <key>end</key>
144 <string>--\s*&gt;</string>
145 <key>name</key>
146 <string>comment.block.html</string>
147 <key>patterns</key>
148 <array>
149 <dict>
150 <key>match</key>
151 <string>--</string>
152 <key>name</key>
153 <string>invalid.illegal.bad-comments-or-CDATA.html</string>
154 </dict>
155 </array>
156 </dict>
157 <dict>
158 <key>begin</key>
159 <string>&lt;!</string>
160 <key>captures</key>
161 <array>
162 <dict>
163 <key>name</key>
164 <string>punctuation.definition.tag.html</string>
165 </dict>
166 </array>
167 <key>end</key>
168 <string>&gt;</string>
169 <key>name</key>
170 <string>meta.tag.sgml.html</string>
171 <key>patterns</key>
172 <array>
173 <dict>
174 <key>begin</key>
175 <string>(?i:DOCTYPE|doctype)</string>
176 <key>captures</key>
177 <dict>
178 <key>1</key>
179 <dict>
180 <key>name</key>
181 <string>entity.name.tag.doctype.html</string>
182 </dict>
183 </dict>
184 <key>end</key>
185 <string>(?=&gt;)</string>
186 <key>name</key>
187 <string>meta.tag.sgml.doctype.html</string>
188 <key>patterns</key>
189 <array>
190 <dict>
191 <key>match</key>
192 <string>"[^"&gt;]*"</string>
193 <key>name</key>
194 <string>string.quoted.double.doctype.identifiers-and-DTDs.html</string>
195 </dict>
196 </array>
197 </dict>
198 <dict>
199 <key>begin</key>
200 <string>\[CDATA\[</string>
201 <key>end</key>
202 <string>]](?=&gt;)</string>
203 <key>name</key>
204 <string>constant.other.inline-data.html</string>
205 </dict>
206 <dict>
207 <key>match</key>
208 <string>(\s*)(?!--|&gt;)\S(\s*)</string>
209 <key>name</key>
210 <string>invalid.illegal.bad-comments-or-CDATA.html</string>
211 </dict>
212 </array>
213 </dict>
214 <dict>
215 <key>begin</key>
216 <string>(?:^\s+)?(&lt;)((?i:style))\b(?=[^&gt;]*lang=(['"])css\1?)</string>
217 <key>captures</key>
218 <dict>
219 <key>1</key>
220 <dict>
221 <key>name</key>
222 <string>punctuation.definition.tag.begin.html</string>
223 </dict>
224 <key>2</key>
225 <dict>
226 <key>name</key>
227 <string>entity.name.tag.style.html</string>
228 </dict>
229 <key>3</key>
230 <dict>
231 <key>name</key>
232 <string>punctuation.definition.tag.html</string>
233 </dict>
234 </dict>
235 <key>end</key>
236 <string>(&lt;/)((?i:style))(&gt;)(?:\s*\n)?</string>
237 <key>name</key>
238 <string>source.css.embedded.html</string>
239 <key>patterns</key>
240 <array>
241 <dict>
242 <key>include</key>
243 <string>#tag-stuff</string>
244 </dict>
245 <dict>
246 <key>begin</key>
247 <string>(&gt;)</string>
248 <key>beginCaptures</key>
249 <dict>
250 <key>1</key>
251 <dict>
252 <key>name</key>
253 <string>punctuation.definition.tag.end.html</string>
254 </dict>
255 </dict>
256 <key>end</key>
257 <string>(?=&lt;/(?i:style))</string>
258 <key>patterns</key>
259 <array>
260 <dict>
261 <key>include</key>
262 <string>source.css</string>
263 </dict>
264 </array>
265 </dict>
266 </array>
267 </dict>
268 <dict>
269 <key>begin</key>
270 <string>(?:^\s+)?(&lt;)((?i:style))\b(?=[^&gt;]*lang=(['"])sass\1?)</string>
271 <key>captures</key>
272 <dict>
273 <key>1</key>
274 <dict>
275 <key>name</key>
276 <string>punctuation.definition.tag.begin.html</string>
277 </dict>
278 <key>2</key>
279 <dict>
280 <key>name</key>
281 <string>entity.name.tag.style.html</string>
282 </dict>
283 <key>3</key>
284 <dict>
285 <key>name</key>
286 <string>punctuation.definition.tag.html</string>
287 </dict>
288 </dict>
289 <key>end</key>
290 <string>(&lt;/)((?i:style))(&gt;)(?:\s*\n)?</string>
291 <key>name</key>
292 <string>source.sass.embedded.html</string>
293 <key>patterns</key>
294 <array>
295 <dict>
296 <key>include</key>
297 <string>#tag-stuff</string>
298 </dict>
299 <dict>
300 <key>begin</key>
301 <string>(&gt;)</string>
302 <key>beginCaptures</key>
303 <dict>
304 <key>1</key>
305 <dict>
306 <key>name</key>
307 <string>punctuation.definition.tag.end.html</string>
308 </dict>
309 </dict>
310 <key>end</key>
311 <string>(?=&lt;/(?i:style))</string>
312 <key>patterns</key>
313 <array>
314 <dict>
315 <key>include</key>
316 <string>source.sass</string>
317 </dict>
318 </array>
319 </dict>
320 </array>
321 </dict>
322 <dict>
323 <key>begin</key>
324 <string>(?:^\s+)?(&lt;)((?i:style))\b(?=[^&gt;]*lang=(['"])scss\1?)</string>
325 <key>captures</key>
326 <dict>
327 <key>1</key>
328 <dict>
329 <key>name</key>
330 <string>punctuation.definition.tag.begin.html</string>
331 </dict>
332 <key>2</key>
333 <dict>
334 <key>name</key>
335 <string>entity.name.tag.style.html</string>
336 </dict>
337 <key>3</key>
338 <dict>
339 <key>name</key>
340 <string>punctuation.definition.tag.html</string>
341 </dict>
342 </dict>
343 <key>end</key>
344 <string>(&lt;/)((?i:style))(&gt;)(?:\s*\n)?</string>
345 <key>name</key>
346 <string>source.scss.embedded.html</string>
347 <key>patterns</key>
348 <array>
349 <dict>
350 <key>include</key>
351 <string>#tag-stuff</string>
352 </dict>
353 <dict>
354 <key>begin</key>
355 <string>(&gt;)</string>
356 <key>beginCaptures</key>
357 <dict>
358 <key>1</key>
359 <dict>
360 <key>name</key>
361 <string>punctuation.definition.tag.end.html</string>
362 </dict>
363 </dict>
364 <key>end</key>
365 <string>(?=&lt;/(?i:style))</string>
366 <key>patterns</key>
367 <array>
368 <dict>
369 <key>include</key>
370 <string>source.css.scss</string>
371 </dict>
372 </array>
373 </dict>
374 </array>
375 </dict>
376 <dict>
377 <key>begin</key>
378 <string>(?:^\s+)?(&lt;)((?i:style))\b(?![^&gt;]*/&gt;)</string>
379 <key>captures</key>
380 <dict>
381 <key>1</key>
382 <dict>
383 <key>name</key>
384 <string>punctuation.definition.tag.begin.html</string>
385 </dict>
386 <key>2</key>
387 <dict>
388 <key>name</key>
389 <string>entity.name.tag.style.html</string>
390 </dict>
391 <key>3</key>
392 <dict>
393 <key>name</key>
394 <string>punctuation.definition.tag.html</string>
395 </dict>
396 </dict>
397 <key>end</key>
398 <string>(&lt;/)((?i:style))(&gt;)(?:\s*\n)?</string>
399 <key>name</key>
400 <string>source.css.embedded.html</string>
401 <key>patterns</key>
402 <array>
403 <dict>
404 <key>include</key>
405 <string>#tag-stuff</string>
406 </dict>
407 <dict>
408 <key>begin</key>
409 <string>(&gt;)</string>
410 <key>beginCaptures</key>
411 <dict>
412 <key>1</key>
413 <dict>
414 <key>name</key>
415 <string>punctuation.definition.tag.end.html</string>
416 </dict>
417 </dict>
418 <key>end</key>
419 <string>(?=&lt;/(?i:style))</string>
420 <key>patterns</key>
421 <array>
422 <dict>
423 <key>include</key>
424 <string>source.css</string>
425 </dict>
426 </array>
427 </dict>
428 </array>
429 </dict>
430 <dict>
431 <key>begin</key>
432 <string>(?:^\s+)?(&lt;)((?i:script))\b(?=[^&gt;]*lang=(['"])tsx\1?)</string>
433 <key>beginCaptures</key>
434 <dict>
435 <key>1</key>
436 <dict>
437 <key>name</key>
438 <string>punctuation.definition.tag.begin.html</string>
439 </dict>
440 <key>2</key>
441 <dict>
442 <key>name</key>
443 <string>entity.name.tag.script.html</string>
444 </dict>
445 </dict>
446 <key>end</key>
447 <string>(?&lt;=&lt;/(script|SCRIPT))(&gt;)(?:\s*\n)?</string>
448 <key>endCaptures</key>
449 <dict>
450 <key>2</key>
451 <dict>
452 <key>name</key>
453 <string>punctuation.definition.tag.html</string>
454 </dict>
455 </dict>
456 <key>name</key>
457 <string>source.tsx.embedded.html</string>
458 <key>patterns</key>
459 <array>
460 <dict>
461 <key>include</key>
462 <string>#tag-stuff</string>
463 </dict>
464 <dict>
465 <key>begin</key>
466 <string>(?&lt;!&lt;/(?:script|SCRIPT))(&gt;)</string>
467 <key>captures</key>
468 <dict>
469 <key>1</key>
470 <dict>
471 <key>name</key>
472 <string>punctuation.definition.tag.begin.html</string>
473 </dict>
474 <key>2</key>
475 <dict>
476 <key>name</key>
477 <string>entity.name.tag.script.html</string>
478 </dict>
479 </dict>
480 <key>end</key>
481 <string>(&lt;/)((?i:script))</string>
482 <key>patterns</key>
483 <array>
484 <dict>
485 <key>include</key>
486 <string>source.tsx</string>
487 </dict>
488 </array>
489 </dict>
490 </array>
491 </dict>
492 <dict>
493 <key>begin</key>
494 <string>(?:^\s+)?(&lt;)((?i:script))\b(?=[^&gt;]*lang=(['"])ts\1?)</string>
495 <key>beginCaptures</key>
496 <dict>
497 <key>1</key>
498 <dict>
499 <key>name</key>
500 <string>punctuation.definition.tag.begin.html</string>
501 </dict>
502 <key>2</key>
503 <dict>
504 <key>name</key>
505 <string>entity.name.tag.script.html</string>
506 </dict>
507 </dict>
508 <key>end</key>
509 <string>(?&lt;=&lt;/(script|SCRIPT))(&gt;)(?:\s*\n)?</string>
510 <key>endCaptures</key>
511 <dict>
512 <key>2</key>
513 <dict>
514 <key>name</key>
515 <string>punctuation.definition.tag.html</string>
516 </dict>
517 </dict>
518 <key>name</key>
519 <string>source.tsx.embedded.html</string>
520 <key>patterns</key>
521 <array>
522 <dict>
523 <key>include</key>
524 <string>#tag-stuff</string>
525 </dict>
526 <dict>
527 <key>begin</key>
528 <string>(?&lt;!&lt;/(?:script|SCRIPT))(&gt;)</string>
529 <key>captures</key>
530 <dict>
531 <key>1</key>
532 <dict>
533 <key>name</key>
534 <string>punctuation.definition.tag.begin.html</string>
535 </dict>
536 <key>2</key>
537 <dict>
538 <key>name</key>
539 <string>entity.name.tag.script.html</string>
540 </dict>
541 </dict>
542 <key>end</key>
543 <string>(&lt;/)((?i:script))</string>
544 <key>patterns</key>
545 <array>
546 <dict>
547 <key>include</key>
548 <string>source.tsx</string>
549 </dict>
550 </array>
551 </dict>
552 </array>
553 </dict>
554 <dict>
555 <key>begin</key>
556 <string>(&lt;)((?i:script))\b(?![^&gt;]*/&gt;)(?![^&gt;]*(?i:type.?=.?text/((?!javascript|babel|ecmascript).*)))</string>
557 <key>beginCaptures</key>
558 <dict>
559 <key>1</key>
560 <dict>
561 <key>name</key>
562 <string>punctuation.definition.tag.begin.html</string>
563 </dict>
564 <key>2</key>
565 <dict>
566 <key>name</key>
567 <string>entity.name.tag.script.html</string>
568 </dict>
569 </dict>
570 <key>end</key>
571 <string>(?&lt;=&lt;/(script|SCRIPT))(&gt;)(?:\s*\n)?</string>
572 <key>endCaptures</key>
573 <dict>
574 <key>2</key>
575 <dict>
576 <key>name</key>
577 <string>punctuation.definition.tag.html</string>
578 </dict>
579 </dict>
580 <key>name</key>
581 <string>source.tsx.embedded.html</string>
582 <key>patterns</key>
583 <array>
584 <dict>
585 <key>include</key>
586 <string>#tag-stuff</string>
587 </dict>
588 <dict>
589 <key>begin</key>
590 <string>(?&lt;!&lt;/(?:script|SCRIPT))(&gt;)</string>
591 <key>captures</key>
592 <dict>
593 <key>1</key>
594 <dict>
595 <key>name</key>
596 <string>punctuation.definition.tag.begin.html</string>
597 </dict>
598 <key>2</key>
599 <dict>
600 <key>name</key>
601 <string>entity.name.tag.script.html</string>
602 </dict>
603 </dict>
604 <key>end</key>
605 <string>(&lt;/)((?i:script))</string>
606 <key>patterns</key>
607 <array>
608 <dict>
609 <key>captures</key>
610 <dict>
611 <key>1</key>
612 <dict>
613 <key>name</key>
614 <string>punctuation.definition.comment.js</string>
615 </dict>
616 </dict>
617 <key>match</key>
618 <string>(//).*?((?=&lt;/script)|$\n?)</string>
619 <key>name</key>
620 <string>comment.line.double-slash.js</string>
621 </dict>
622 <dict>
623 <key>begin</key>
624 <string>/\*</string>
625 <key>captures</key>
626 <array>
627 <dict>
628 <key>name</key>
629 <string>punctuation.definition.comment.js</string>
630 </dict>
631 </array>
632 <key>end</key>
633 <string>\*/|(?=&lt;/script)</string>
634 <key>name</key>
635 <string>comment.block.js</string>
636 </dict>
637 <dict>
638 <key>include</key>
639 <string>source.tsx</string>
640 </dict>
641 </array>
642 </dict>
643 </array>
644 </dict>
645 <dict>
646 <key>begin</key>
647 <string>(&lt;/?)((?i:body|head|html)\b)</string>
648 <key>captures</key>
649 <dict>
650 <key>1</key>
651 <dict>
652 <key>name</key>
653 <string>punctuation.definition.tag.begin.html</string>
654 </dict>
655 <key>2</key>
656 <dict>
657 <key>name</key>
658 <string>entity.name.tag.structure.any.html</string>
659 </dict>
660 </dict>
661 <key>end</key>
662 <string>(&gt;)</string>
663 <key>endCaptures</key>
664 <dict>
665 <key>1</key>
666 <dict>
667 <key>name</key>
668 <string>punctuation.definition.tag.end.html</string>
669 </dict>
670 </dict>
671 <key>name</key>
672 <string>meta.tag.structure.any.html</string>
673 <key>patterns</key>
674 <array>
675 <dict>
676 <key>include</key>
677 <string>#tag-stuff</string>
678 </dict>
679 </array>
680 </dict>
681 <dict>
682 <key>begin</key>
683 <string>(&lt;/?)((?i:address|blockquote|dd|div|dl|dt|fieldset|form|frame|frameset|h1|h2|h3|h4|h5|h6|iframe|noframes|object|ol|p|ul|applet|center|dir|hr|menu|pre)\b)</string>
684 <key>beginCaptures</key>
685 <dict>
686 <key>1</key>
687 <dict>
688 <key>name</key>
689 <string>punctuation.definition.tag.begin.html</string>
690 </dict>
691 <key>2</key>
692 <dict>
693 <key>name</key>
694 <string>entity.name.tag.block.any.html</string>
695 </dict>
696 </dict>
697 <key>end</key>
698 <string>(&gt;)</string>
699 <key>endCaptures</key>
700 <dict>
701 <key>1</key>
702 <dict>
703 <key>name</key>
704 <string>punctuation.definition.tag.end.html</string>
705 </dict>
706 </dict>
707 <key>name</key>
708 <string>meta.tag.block.any.html</string>
709 <key>patterns</key>
710 <array>
711 <dict>
712 <key>include</key>
713 <string>#tag-stuff</string>
714 </dict>
715 </array>
716 </dict>
717 <dict>
718 <key>begin</key>
719 <string>(&lt;/?)((?i:a|abbr|acronym|area|b|base|basefont|bdo|big|br|button|caption|cite|code|col|colgroup|del|dfn|em|font|head|html|i|img|input|ins|isindex|kbd|label|legend|li|link|map|meta|noscript|optgroup|option|param|q|s|samp|script|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|var)\b)</string>
720 <key>beginCaptures</key>
721 <dict>
722 <key>1</key>
723 <dict>
724 <key>name</key>
725 <string>punctuation.definition.tag.begin.html</string>
726 </dict>
727 <key>2</key>
728 <dict>
729 <key>name</key>
730 <string>entity.name.tag.inline.any.html</string>
731 </dict>
732 </dict>
733 <key>end</key>
734 <string>((?: ?/)?&gt;)</string>
735 <key>endCaptures</key>
736 <dict>
737 <key>1</key>
738 <dict>
739 <key>name</key>
740 <string>punctuation.definition.tag.end.html</string>
741 </dict>
742 </dict>
743 <key>name</key>
744 <string>meta.tag.inline.any.html</string>
745 <key>patterns</key>
746 <array>
747 <dict>
748 <key>include</key>
749 <string>#tag-stuff</string>
750 </dict>
751 </array>
752 </dict>
753 <dict>
754 <key>begin</key>
755 <string>(&lt;/?)([A-Z][a-zA-Z0-9-\.]*|[a-z]+\.[a-zA-Z0-9-]+)(\:(load|idle|visible))?</string>
756 <key>beginCaptures</key>
757 <dict>
758 <key>1</key>
759 <dict>
760 <key>name</key>
761 <string>punctuation.definition.tag.begin.html</string>
762 </dict>
763 <key>2</key>
764 <dict>
765 <key>name</key>
766 <string>entity.name.tag.component.astro</string>
767 </dict>
768 <key>3</key>
769 <dict>
770 <key>name</key>
771 <string>keyword.control.loading.astro</string>
772 </dict>
773 </dict>
774 <key>end</key>
775 <string>(/?&gt;)</string>
776 <key>endCaptures</key>
777 <dict>
778 <key>1</key>
779 <dict>
780 <key>name</key>
781 <string>punctuation.definition.tag.end.html</string>
782 </dict>
783 </dict>
784 <key>name</key>
785 <string>meta.tag.component.astro</string>
786 <key>patterns</key>
787 <array>
788 <dict>
789 <key>include</key>
790 <string>#tag-stuff</string>
791 </dict>
792 </array>
793 </dict>
794 <dict>
795 <key>begin</key>
796 <string>(&lt;/?)([a-zA-Z0-9:-]+)</string>
797 <key>beginCaptures</key>
798 <dict>
799 <key>1</key>
800 <dict>
801 <key>name</key>
802 <string>punctuation.definition.tag.begin.html</string>
803 </dict>
804 <key>2</key>
805 <dict>
806 <key>name</key>
807 <string>entity.name.tag.other.html</string>
808 </dict>
809 </dict>
810 <key>end</key>
811 <string>(/?&gt;)</string>
812 <key>endCaptures</key>
813 <dict>
814 <key>1</key>
815 <dict>
816 <key>name</key>
817 <string>punctuation.definition.tag.end.html</string>
818 </dict>
819 </dict>
820 <key>name</key>
821 <string>meta.tag.other.html</string>
822 <key>patterns</key>
823 <array>
824 <dict>
825 <key>include</key>
826 <string>#tag-stuff</string>
827 </dict>
828 </array>
829 </dict>
830 <dict>
831 <key>include</key>
832 <string>#entities</string>
833 </dict>
834 <dict>
835 <key>include</key>
836 <string>#frontmatter</string>
837 </dict>
838 <dict>
839 <key>match</key>
840 <string>&lt;&gt;</string>
841 <key>name</key>
842 <string>invalid.illegal.incomplete.html</string>
843 </dict>
844 <dict>
845 <key>match</key>
846 <string>&lt;</string>
847 <key>name</key>
848 <string>invalid.illegal.bad-angle-bracket.html</string>
849 </dict>
850 </array>
851 <key>repository</key>
852 <dict>
853 <key>astro-expressions</key>
854 <dict>
855 <key>patterns</key>
856 <array>
857 <dict>
858 <key>begin</key>
859 <string>\{</string>
860 <key>beginCaptures</key>
861 <array>
862 <dict>
863 <key>name</key>
864 <string>punctuation.definition.generic.begin.html</string>
865 </dict>
866 </array>
867 <key>end</key>
868 <string>\}</string>
869 <key>endCaptures</key>
870 <array>
871 <dict>
872 <key>name</key>
873 <string>punctuation.definition.generic.end.html</string>
874 </dict>
875 </array>
876 <key>name</key>
877 <string>expression.embbeded.astro</string>
878 <key>patterns</key>
879 <array>
880 <dict>
881 <key>include</key>
882 <string>source.tsx</string>
883 </dict>
884 </array>
885 </dict>
886 </array>
887 </dict>
888 <key>astro-markdown</key>
889 <dict>
890 <key>begin</key>
891 <string>(&lt;)(Markdown)(&gt;)</string>
892 <key>beginCaptures</key>
893 <dict>
894 <key>1</key>
895 <dict>
896 <key>name</key>
897 <string>punctuation.definition.tag.begin.html</string>
898 </dict>
899 <key>2</key>
900 <dict>
901 <key>name</key>
902 <string>entity.name.tag.html</string>
903 </dict>
904 <key>3</key>
905 <dict>
906 <key>name</key>
907 <string>punctuation.definition.tag.end.html</string>
908 </dict>
909 </dict>
910 <key>end</key>
911 <string>(&lt;/)(Markdown)(&gt;)</string>
912 <key>endCaptures</key>
913 <dict>
914 <key>1</key>
915 <dict>
916 <key>name</key>
917 <string>punctuation.definition.tag.begin.html</string>
918 </dict>
919 <key>2</key>
920 <dict>
921 <key>name</key>
922 <string>entity.name.tag.html</string>
923 </dict>
924 <key>3</key>
925 <dict>
926 <key>name</key>
927 <string>punctuation.definition.tag.end.html</string>
928 </dict>
929 </dict>
930 <key>name</key>
931 <string>text.html.astro.markdown</string>
932 <key>patterns</key>
933 <array>
934 <dict>
935 <key>include</key>
936 <string>text.html.markdown.astro</string>
937 </dict>
938 </array>
939 </dict>
940 <key>entities</key>
941 <dict>
942 <key>patterns</key>
943 <array>
944 <dict>
945 <key>captures</key>
946 <dict>
947 <key>1</key>
948 <dict>
949 <key>name</key>
950 <string>punctuation.definition.entity.html</string>
951 </dict>
952 <key>3</key>
953 <dict>
954 <key>name</key>
955 <string>punctuation.definition.entity.html</string>
956 </dict>
957 </dict>
958 <key>match</key>
959 <string>(&amp;)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)</string>
960 <key>name</key>
961 <string>constant.character.entity.html</string>
962 </dict>
963 <dict>
964 <key>match</key>
965 <string>&amp;</string>
966 <key>name</key>
967 <string>invalid.illegal.bad-ampersand.html</string>
968 </dict>
969 </array>
970 </dict>
971 <key>frontmatter</key>
972 <dict>
973 <key>begin</key>
974 <string>\A(-{3})\s*$</string>
975 <key>beginCaptures</key>
976 <dict>
977 <key>1</key>
978 <dict>
979 <key>name</key>
980 <string>comment.block.html</string>
981 </dict>
982 </dict>
983 <key>contentName</key>
984 <string>meta.embedded.block.frontmatter</string>
985 <key>end</key>
986 <string>(^|\G)(-{3})|\.{3}\s*$</string>
987 <key>endCaptures</key>
988 <dict>
989 <key>2</key>
990 <dict>
991 <key>name</key>
992 <string>comment.block.html</string>
993 </dict>
994 </dict>
995 <key>patterns</key>
996 <array>
997 <dict>
998 <key>include</key>
999 <string>source.tsx</string>
1000 </dict>
1001 </array>
1002 </dict>
1003 <key>string-double-quoted</key>
1004 <dict>
1005 <key>begin</key>
1006 <string>"</string>
1007 <key>beginCaptures</key>
1008 <array>
1009 <dict>
1010 <key>name</key>
1011 <string>punctuation.definition.string.begin.html</string>
1012 </dict>
1013 </array>
1014 <key>end</key>
1015 <string>"</string>
1016 <key>endCaptures</key>
1017 <array>
1018 <dict>
1019 <key>name</key>
1020 <string>punctuation.definition.string.end.html</string>
1021 </dict>
1022 </array>
1023 <key>name</key>
1024 <string>string.quoted.double.html</string>
1025 <key>patterns</key>
1026 <array>
1027 <dict>
1028 <key>include</key>
1029 <string>#entities</string>
1030 </dict>
1031 </array>
1032 </dict>
1033 <key>string-single-quoted</key>
1034 <dict>
1035 <key>begin</key>
1036 <string>'</string>
1037 <key>beginCaptures</key>
1038 <array>
1039 <dict>
1040 <key>name</key>
1041 <string>punctuation.definition.string.begin.html</string>
1042 </dict>
1043 </array>
1044 <key>end</key>
1045 <string>'</string>
1046 <key>endCaptures</key>
1047 <array>
1048 <dict>
1049 <key>name</key>
1050 <string>punctuation.definition.string.end.html</string>
1051 </dict>
1052 </array>
1053 <key>name</key>
1054 <string>string.quoted.single.html</string>
1055 <key>patterns</key>
1056 <array>
1057 <dict>
1058 <key>include</key>
1059 <string>#entities</string>
1060 </dict>
1061 </array>
1062 </dict>
1063 <key>tag-generic-attribute</key>
1064 <dict>
1065 <key>match</key>
1066 <string>\b([a-zA-Z\-:]+)</string>
1067 <key>name</key>
1068 <string>entity.other.attribute-name.html</string>
1069 </dict>
1070 <key>tag-id-attribute</key>
1071 <dict>
1072 <key>begin</key>
1073 <string>\b(id)\b\s*(=)</string>
1074 <key>captures</key>
1075 <dict>
1076 <key>1</key>
1077 <dict>
1078 <key>name</key>
1079 <string>entity.other.attribute-name.id.html</string>
1080 </dict>
1081 <key>2</key>
1082 <dict>
1083 <key>name</key>
1084 <string>punctuation.separator.key-value.html</string>
1085 </dict>
1086 </dict>
1087 <key>end</key>
1088 <string>(?&lt;='|")</string>
1089 <key>name</key>
1090 <string>meta.attribute-with-value.id.html</string>
1091 <key>patterns</key>
1092 <array>
1093 <dict>
1094 <key>begin</key>
1095 <string>"</string>
1096 <key>beginCaptures</key>
1097 <array>
1098 <dict>
1099 <key>name</key>
1100 <string>punctuation.definition.string.begin.html</string>
1101 </dict>
1102 </array>
1103 <key>contentName</key>
1104 <string>meta.toc-list.id.html</string>
1105 <key>end</key>
1106 <string>"</string>
1107 <key>endCaptures</key>
1108 <array>
1109 <dict>
1110 <key>name</key>
1111 <string>punctuation.definition.string.end.html</string>
1112 </dict>
1113 </array>
1114 <key>name</key>
1115 <string>string.quoted.double.html</string>
1116 <key>patterns</key>
1117 <array>
1118 <dict>
1119 <key>include</key>
1120 <string>#astro-expressions</string>
1121 </dict>
1122 <dict>
1123 <key>include</key>
1124 <string>#entities</string>
1125 </dict>
1126 </array>
1127 </dict>
1128 <dict>
1129 <key>begin</key>
1130 <string>'</string>
1131 <key>beginCaptures</key>
1132 <array>
1133 <dict>
1134 <key>name</key>
1135 <string>punctuation.definition.string.begin.html</string>
1136 </dict>
1137 </array>
1138 <key>contentName</key>
1139 <string>meta.toc-list.id.html</string>
1140 <key>end</key>
1141 <string>'</string>
1142 <key>endCaptures</key>
1143 <array>
1144 <dict>
1145 <key>name</key>
1146 <string>punctuation.definition.string.end.html</string>
1147 </dict>
1148 </array>
1149 <key>name</key>
1150 <string>string.quoted.single.html</string>
1151 <key>patterns</key>
1152 <array>
1153 <dict>
1154 <key>include</key>
1155 <string>#astro-expressions</string>
1156 </dict>
1157 <dict>
1158 <key>include</key>
1159 <string>#entities</string>
1160 </dict>
1161 </array>
1162 </dict>
1163 </array>
1164 </dict>
1165 <key>tag-stuff</key>
1166 <dict>
1167 <key>patterns</key>
1168 <array>
1169 <dict>
1170 <key>include</key>
1171 <string>#tag-id-attribute</string>
1172 </dict>
1173 <dict>
1174 <key>include</key>
1175 <string>#tag-generic-attribute</string>
1176 </dict>
1177 <dict>
1178 <key>include</key>
1179 <string>#string-double-quoted</string>
1180 </dict>
1181 <dict>
1182 <key>include</key>
1183 <string>#string-single-quoted</string>
1184 </dict>
1185 <dict>
1186 <key>include</key>
1187 <string>#astro-load-directive</string>
1188 </dict>
1189 <dict>
1190 <key>include</key>
1191 <string>#astro-expressions</string>
1192 </dict>
1193 <dict>
1194 <key>include</key>
1195 <string>#astro-markdown</string>
1196 </dict>
1197 </array>
1198 </dict>
1199 </dict>
1200 <key>scopeName</key>
1201 <string>text.html.astro</string>
1202</dict>
1203</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/css.plist created+1036
......@@ -0,0 +1,1036 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>fileTypes</key>
6 <array>
7 <string>css</string>
8 <string>css.erb</string>
9 </array>
10 <key>keyEquivalent</key>
11 <string>^~C</string>
12 <key>name</key>
13 <string>CSS</string>
14 <key>patterns</key>
15 <array>
16 <dict>
17 <key>include</key>
18 <string>#comment-block</string>
19 </dict>
20 <dict>
21 <key>include</key>
22 <string>#selector</string>
23 </dict>
24 <dict>
25 <key>begin</key>
26 <string>\s*((@)charset\b)\s*</string>
27 <key>captures</key>
28 <dict>
29 <key>1</key>
30 <dict>
31 <key>name</key>
32 <string>keyword.control.at-rule.charset.css</string>
33 </dict>
34 <key>2</key>
35 <dict>
36 <key>name</key>
37 <string>punctuation.definition.keyword.css</string>
38 </dict>
39 </dict>
40 <key>end</key>
41 <string>\s*((?=;|$))</string>
42 <key>name</key>
43 <string>meta.at-rule.charset.css</string>
44 <key>patterns</key>
45 <array>
46 <dict>
47 <key>include</key>
48 <string>#string-double</string>
49 </dict>
50 <dict>
51 <key>include</key>
52 <string>#string-single</string>
53 </dict>
54 </array>
55 </dict>
56 <dict>
57 <key>begin</key>
58 <string>\s*((@)import\b)\s*</string>
59 <key>captures</key>
60 <dict>
61 <key>1</key>
62 <dict>
63 <key>name</key>
64 <string>keyword.control.at-rule.import.css</string>
65 </dict>
66 <key>2</key>
67 <dict>
68 <key>name</key>
69 <string>punctuation.definition.keyword.css</string>
70 </dict>
71 </dict>
72 <key>end</key>
73 <string>\s*((?=;|\}))</string>
74 <key>name</key>
75 <string>meta.at-rule.import.css</string>
76 <key>patterns</key>
77 <array>
78 <dict>
79 <key>include</key>
80 <string>#string-double</string>
81 </dict>
82 <dict>
83 <key>include</key>
84 <string>#string-single</string>
85 </dict>
86 <dict>
87 <key>begin</key>
88 <string>\s*(url)\s*(\()\s*</string>
89 <key>beginCaptures</key>
90 <dict>
91 <key>1</key>
92 <dict>
93 <key>name</key>
94 <string>support.function.url.css</string>
95 </dict>
96 <key>2</key>
97 <dict>
98 <key>name</key>
99 <string>punctuation.section.function.css</string>
100 </dict>
101 </dict>
102 <key>end</key>
103 <string>\s*(\))\s*</string>
104 <key>endCaptures</key>
105 <dict>
106 <key>1</key>
107 <dict>
108 <key>name</key>
109 <string>punctuation.section.function.css</string>
110 </dict>
111 </dict>
112 <key>patterns</key>
113 <array>
114 <dict>
115 <key>match</key>
116 <string>[^'") \t]+</string>
117 <key>name</key>
118 <string>variable.parameter.url.css</string>
119 </dict>
120 <dict>
121 <key>include</key>
122 <string>#string-single</string>
123 </dict>
124 <dict>
125 <key>include</key>
126 <string>#string-double</string>
127 </dict>
128 </array>
129 </dict>
130 <dict>
131 <key>include</key>
132 <string>#media-query-list</string>
133 </dict>
134 </array>
135 </dict>
136 <dict>
137 <key>begin</key>
138 <string>^\s*((@)font-face)\s*(?=\{)</string>
139 <key>beginCaptures</key>
140 <dict>
141 <key>1</key>
142 <dict>
143 <key>name</key>
144 <string>keyword.control.at-rule.font-face.css</string>
145 </dict>
146 <key>2</key>
147 <dict>
148 <key>name</key>
149 <string>punctuation.definition.keyword.css</string>
150 </dict>
151 </dict>
152 <key>end</key>
153 <string>(?!\G)</string>
154 <key>name</key>
155 <string>meta.at-rule.font-face.css</string>
156 <key>patterns</key>
157 <array>
158 <dict>
159 <key>include</key>
160 <string>#rule-list</string>
161 </dict>
162 </array>
163 </dict>
164 <dict>
165 <key>begin</key>
166 <string>(?=^\s*@media\s*.*?\{)</string>
167 <key>end</key>
168 <string>\s*(\})</string>
169 <key>endCaptures</key>
170 <dict>
171 <key>1</key>
172 <dict>
173 <key>name</key>
174 <string>punctuation.section.property-list.end.css</string>
175 </dict>
176 </dict>
177 <key>patterns</key>
178 <array>
179 <dict>
180 <key>begin</key>
181 <string>^\s*((@)media)(?=.*?\{)</string>
182 <key>beginCaptures</key>
183 <dict>
184 <key>1</key>
185 <dict>
186 <key>name</key>
187 <string>keyword.control.at-rule.media.css</string>
188 </dict>
189 <key>2</key>
190 <dict>
191 <key>name</key>
192 <string>punctuation.definition.keyword.css</string>
193 </dict>
194 <key>3</key>
195 <dict>
196 <key>name</key>
197 <string>support.constant.media.css</string>
198 </dict>
199 </dict>
200 <key>end</key>
201 <string>\s*(?=\{)</string>
202 <key>name</key>
203 <string>meta.at-rule.media.css</string>
204 <key>patterns</key>
205 <array>
206 <dict>
207 <key>include</key>
208 <string>#media-query-list</string>
209 </dict>
210 </array>
211 </dict>
212 <dict>
213 <key>begin</key>
214 <string>\s*(\{)</string>
215 <key>beginCaptures</key>
216 <dict>
217 <key>1</key>
218 <dict>
219 <key>name</key>
220 <string>punctuation.section.property-list.begin.css</string>
221 </dict>
222 </dict>
223 <key>end</key>
224 <string>(?=\})</string>
225 <key>patterns</key>
226 <array>
227 <dict>
228 <key>include</key>
229 <string>$self</string>
230 </dict>
231 </array>
232 </dict>
233 </array>
234 </dict>
235 <dict>
236 <key>begin</key>
237 <string>(?=\{)</string>
238 <key>end</key>
239 <string>(?!\G)</string>
240 <key>patterns</key>
241 <array>
242 <dict>
243 <key>include</key>
244 <string>#rule-list</string>
245 </dict>
246 </array>
247 </dict>
248 </array>
249 <key>repository</key>
250 <dict>
251 <key>color-values</key>
252 <dict>
253 <key>patterns</key>
254 <array>
255 <dict>
256 <key>comment</key>
257 <string>http://www.w3.org/TR/CSS21/syndata.html#value-def-color</string>
258 <key>match</key>
259 <string>\b(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)\b</string>
260 <key>name</key>
261 <string>support.constant.color.w3c-standard-color-name.css</string>
262 </dict>
263 <dict>
264 <key>comment</key>
265 <string>These colours are mostly recognised but will not validate. ref: http://www.w3schools.com/css/css_colornames.asp</string>
266 <key>match</key>
267 <string>\b(aliceblue|antiquewhite|aquamarine|azure|beige|bisque|blanchedalmond|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|gainsboro|ghostwhite|gold|goldenrod|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|limegreen|linen|magenta|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|oldlace|olivedrab|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|thistle|tomato|turquoise|violet|wheat|whitesmoke|yellowgreen)\b</string>
268 <key>name</key>
269 <string>invalid.deprecated.color.w3c-non-standard-color-name.css</string>
270 </dict>
271 <dict>
272 <key>begin</key>
273 <string>(hsla?|rgba?)\s*(\()</string>
274 <key>beginCaptures</key>
275 <dict>
276 <key>1</key>
277 <dict>
278 <key>name</key>
279 <string>support.function.misc.css</string>
280 </dict>
281 <key>2</key>
282 <dict>
283 <key>name</key>
284 <string>punctuation.section.function.css</string>
285 </dict>
286 </dict>
287 <key>end</key>
288 <string>(\))</string>
289 <key>endCaptures</key>
290 <dict>
291 <key>1</key>
292 <dict>
293 <key>name</key>
294 <string>punctuation.section.function.css</string>
295 </dict>
296 </dict>
297 <key>patterns</key>
298 <array>
299 <dict>
300 <key>match</key>
301 <string>(?x)\b
302 (0*((1?[0-9]{1,2})|(2([0-4][0-9]|5[0-5])))\s*,\s*){2}
303 (0*((1?[0-9]{1,2})|(2([0-4][0-9]|5[0-5])))\b)
304 (\s*,\s*((0?\.[0-9]+)|[0-1]))?
305 </string>
306 <key>name</key>
307 <string>constant.other.color.rgb-value.css</string>
308 </dict>
309 <dict>
310 <key>match</key>
311 <string>\b([0-9]{1,2}|100)\s*%,\s*([0-9]{1,2}|100)\s*%,\s*([0-9]{1,2}|100)\s*%</string>
312 <key>name</key>
313 <string>constant.other.color.rgb-percentage.css</string>
314 </dict>
315 <dict>
316 <key>include</key>
317 <string>#numeric-values</string>
318 </dict>
319 </array>
320 </dict>
321 </array>
322 </dict>
323 <key>comment-block</key>
324 <dict>
325 <key>begin</key>
326 <string>/\*</string>
327 <key>captures</key>
328 <dict>
329 <key>0</key>
330 <dict>
331 <key>name</key>
332 <string>punctuation.definition.comment.css</string>
333 </dict>
334 </dict>
335 <key>end</key>
336 <string>\*/</string>
337 <key>name</key>
338 <string>comment.block.css</string>
339 </dict>
340 <key>media-query</key>
341 <dict>
342 <key>begin</key>
343 <string>(?i)\s*(only|not)?\s*(all|aural|braille|embossed|handheld|print|projection|screen|tty|tv)?</string>
344 <key>beginCaptures</key>
345 <dict>
346 <key>1</key>
347 <dict>
348 <key>name</key>
349 <string>keyword.operator.logic.media.css</string>
350 </dict>
351 <key>2</key>
352 <dict>
353 <key>name</key>
354 <string>support.constant.media.css</string>
355 </dict>
356 </dict>
357 <key>end</key>
358 <string>\s*(?:(,)|(?=[{;]))</string>
359 <key>endCaptures</key>
360 <dict>
361 <key>1</key>
362 <dict>
363 <key>name</key>
364 <string>punctuation.definition.arbitrary-repitition.css</string>
365 </dict>
366 </dict>
367 <key>patterns</key>
368 <array>
369 <dict>
370 <key>begin</key>
371 <string>\s*(and)?\s*(\()\s*</string>
372 <key>beginCaptures</key>
373 <dict>
374 <key>1</key>
375 <dict>
376 <key>name</key>
377 <string>keyword.operator.logic.media.css</string>
378 </dict>
379 </dict>
380 <key>end</key>
381 <string>\)</string>
382 <key>patterns</key>
383 <array>
384 <dict>
385 <key>begin</key>
386 <string>(?x)
387 (
388 ((min|max)-)?
389 (
390 ((device-)?(height|width|aspect-ratio))|
391 (color(-index)?)|monochrome|resolution
392 )
393 )|grid|scan|orientation
394 \s*(?=[:)])</string>
395 <key>beginCaptures</key>
396 <dict>
397 <key>0</key>
398 <dict>
399 <key>name</key>
400 <string>support.type.property-name.media.css</string>
401 </dict>
402 </dict>
403 <key>end</key>
404 <string>(:)|(?=\))</string>
405 <key>endCaptures</key>
406 <dict>
407 <key>1</key>
408 <dict>
409 <key>name</key>
410 <string>punctuation.separator.key-value.css</string>
411 </dict>
412 </dict>
413 </dict>
414 <dict>
415 <key>match</key>
416 <string>\b(portrait|landscape|progressive|interlace)</string>
417 <key>name</key>
418 <string>support.constant.property-value.css</string>
419 </dict>
420 <dict>
421 <key>captures</key>
422 <dict>
423 <key>1</key>
424 <dict>
425 <key>name</key>
426 <string>constant.numeric.css</string>
427 </dict>
428 <key>2</key>
429 <dict>
430 <key>name</key>
431 <string>keyword.operator.arithmetic.css</string>
432 </dict>
433 <key>3</key>
434 <dict>
435 <key>name</key>
436 <string>constant.numeric.css</string>
437 </dict>
438 </dict>
439 <key>match</key>
440 <string>\s*(\d+)(/)(\d+)</string>
441 </dict>
442 <dict>
443 <key>include</key>
444 <string>#numeric-values</string>
445 </dict>
446 </array>
447 </dict>
448 </array>
449 </dict>
450 <key>media-query-list</key>
451 <dict>
452 <key>begin</key>
453 <string>\s*(?=[^{;])</string>
454 <key>end</key>
455 <string>\s*(?=[{;])</string>
456 <key>patterns</key>
457 <array>
458 <dict>
459 <key>include</key>
460 <string>#media-query</string>
461 </dict>
462 </array>
463 </dict>
464 <key>numeric-values</key>
465 <dict>
466 <key>patterns</key>
467 <array>
468 <dict>
469 <key>captures</key>
470 <dict>
471 <key>1</key>
472 <dict>
473 <key>name</key>
474 <string>punctuation.definition.constant.css</string>
475 </dict>
476 </dict>
477 <key>match</key>
478 <string>(#)([0-9a-fA-F]{3}|[0-9a-fA-F]{6})\b</string>
479 <key>name</key>
480 <string>constant.other.color.rgb-value.css</string>
481 </dict>
482 <dict>
483 <key>captures</key>
484 <dict>
485 <key>1</key>
486 <dict>
487 <key>name</key>
488 <string>keyword.other.unit.css</string>
489 </dict>
490 </dict>
491 <key>match</key>
492 <string>(?x)
493 (?:-|\+)?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+))
494 ((?:px|pt|ch|cm|mm|in|r?em|ex|pc|deg|g?rad|dpi|dpcm|s)\b|%)?
495 </string>
496 <key>name</key>
497 <string>constant.numeric.css</string>
498 </dict>
499 </array>
500 </dict>
501 <key>property-values</key>
502 <dict>
503 <key>patterns</key>
504 <array>
505 <dict>
506 <key>match</key>
507 <string>\b(absolute|all(-scroll)?|always|armenian|auto|avoid|baseline|below|bidi-override|block|bold|bolder|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|flat|geometricPrecision|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|initial|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|optimize(Legibility|Quality|Speed)|outset|outside|overline|pointer|pre(-(wrap|line))?|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|sub|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical(-(ideographic|text))|visible(Painted|Fill|Stroke)?|w-resize|wait|whitespace|zero|smaller|larger|((xx?-)?(small|large))|painted|fill|stroke|column|column-reverse|contain|cover|fill|flex-end|flex-start|row|row-reverse|scale-down|space-around|space-between|stretch|wrap|wrap-reverse|reverse|alternate-reverse|alternate|forwards|backwards|infinite|ease|ease-in|ease-out|ease-in-out|linear|step-start|step-end|steps|cubic-bezier|running|paused|sticky|page|soft-light|screen|saturation|overlay|multiply|luminosity|lighten|hue|hard-light|exclusion|difference|darken|color-dodge|color-burn|color|view-box|stroke-box|fill-box|border-box|padding-box|content-box|round|space|currentColor|subgrid|auto-fill|min-content|max-content|row|column|dense|minmax|calc|translate|translateX|translateY|translateZ|scale|scaleX|scaleY|scaleZ|rotate|rotateX|rotateY|rotateZ|skew|skewX|skewY|skewZ|linear-gradient|repeating-linear-gradient|radial-gradient|repeating-radial-gradient|farthest-side|closest-side|farthest-corner|closest-corner|ellipse|circle)\b</string>
508 <key>name</key>
509 <string>support.constant.property-value.css</string>
510 </dict>
511 <dict>
512 <key>match</key>
513 <string>(\b(?i:arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace)\b)</string>
514 <key>name</key>
515 <string>support.constant.font-name.css</string>
516 </dict>
517 <dict>
518 <key>include</key>
519 <string>#numeric-values</string>
520 </dict>
521 <dict>
522 <key>include</key>
523 <string>#color-values</string>
524 </dict>
525 <dict>
526 <key>include</key>
527 <string>#string-double</string>
528 </dict>
529 <dict>
530 <key>include</key>
531 <string>#string-single</string>
532 </dict>
533 <dict>
534 <key>begin</key>
535 <string>(rect)\s*(\()</string>
536 <key>beginCaptures</key>
537 <dict>
538 <key>1</key>
539 <dict>
540 <key>name</key>
541 <string>support.function.misc.css</string>
542 </dict>
543 <key>2</key>
544 <dict>
545 <key>name</key>
546 <string>punctuation.section.function.css</string>
547 </dict>
548 </dict>
549 <key>end</key>
550 <string>(\))</string>
551 <key>endCaptures</key>
552 <dict>
553 <key>1</key>
554 <dict>
555 <key>name</key>
556 <string>punctuation.section.function.css</string>
557 </dict>
558 </dict>
559 <key>patterns</key>
560 <array>
561 <dict>
562 <key>include</key>
563 <string>#numeric-values</string>
564 </dict>
565 </array>
566 </dict>
567 <dict>
568 <key>begin</key>
569 <string>(format|local|url|attr|counter|counters)\s*(\()</string>
570 <key>beginCaptures</key>
571 <dict>
572 <key>1</key>
573 <dict>
574 <key>name</key>
575 <string>support.function.misc.css</string>
576 </dict>
577 <key>2</key>
578 <dict>
579 <key>name</key>
580 <string>punctuation.section.function.css</string>
581 </dict>
582 </dict>
583 <key>end</key>
584 <string>(\))</string>
585 <key>endCaptures</key>
586 <dict>
587 <key>1</key>
588 <dict>
589 <key>name</key>
590 <string>punctuation.section.function.css</string>
591 </dict>
592 </dict>
593 <key>patterns</key>
594 <array>
595 <dict>
596 <key>include</key>
597 <string>#string-single</string>
598 </dict>
599 <dict>
600 <key>include</key>
601 <string>#string-double</string>
602 </dict>
603 <dict>
604 <key>match</key>
605 <string>[^'") \t]+</string>
606 <key>name</key>
607 <string>variable.parameter.misc.css</string>
608 </dict>
609 </array>
610 </dict>
611 <dict>
612 <key>begin</key>
613 <string>(matrix(3d)?|perspective|(rotate|scale|translate)([XYZ]|3d)?|skew[XY]?)\s*(\()</string>
614 <key>beginCaptures</key>
615 <dict>
616 <key>1</key>
617 <dict>
618 <key>name</key>
619 <string>support.function.transform.css</string>
620 </dict>
621 <key>2</key>
622 <dict>
623 <key>name</key>
624 <string>punctuation.section.function.css</string>
625 </dict>
626 </dict>
627 <key>end</key>
628 <string>(\))</string>
629 <key>endCaptures</key>
630 <dict>
631 <key>1</key>
632 <dict>
633 <key>name</key>
634 <string>punctuation.section.function.css</string>
635 </dict>
636 </dict>
637 <key>patterns</key>
638 <array>
639 <dict>
640 <key>include</key>
641 <string>#numeric-values</string>
642 </dict>
643 </array>
644 </dict>
645 <dict>
646 <key>match</key>
647 <string>\!\s*important</string>
648 <key>name</key>
649 <string>keyword.other.important.css</string>
650 </dict>
651 </array>
652 </dict>
653 <key>rule-list</key>
654 <dict>
655 <key>begin</key>
656 <string>\{</string>
657 <key>beginCaptures</key>
658 <dict>
659 <key>0</key>
660 <dict>
661 <key>name</key>
662 <string>punctuation.section.property-list.begin.css</string>
663 </dict>
664 </dict>
665 <key>end</key>
666 <string>\}</string>
667 <key>endCaptures</key>
668 <dict>
669 <key>0</key>
670 <dict>
671 <key>name</key>
672 <string>punctuation.section.property-list.end.css</string>
673 </dict>
674 </dict>
675 <key>name</key>
676 <string>meta.property-list.css</string>
677 <key>patterns</key>
678 <array>
679 <dict>
680 <key>include</key>
681 <string>#comment-block</string>
682 </dict>
683 <dict>
684 <key>begin</key>
685 <string>(?&lt;![-a-z])(?=[-a-z])</string>
686 <key>end</key>
687 <string>$|(?![-a-z])</string>
688 <key>name</key>
689 <string>meta.property-name.css</string>
690 <key>patterns</key>
691 <array>
692 <dict>
693 <key>match</key>
694 <string>-(webkit|moz|o|ms|khtml)(-[A-Za-z]+)+\b</string>
695 <key>name</key>
696 <string>support.type.property-name.css</string>
697 </dict>
698 <dict>
699 <key>match</key>
700 <string>\b(zoom|z-index|y|x|writing-mode|wrap-through|wrap-flow|wrap|word-wrap|word-spacing|word-break|word|will-change|width|widows|white-space-collapse|white-space|white|weight|volume|voice-volume|voice-stress|voice-rate|voice-range|voice-pitch-range|voice-pitch|voice-family|voice-duration|voice-balance|voice|visibility|vertical-align|variant|user-select|up|unicode-bidi|unicode|trim|transition-timing-function|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|timing-function|text-wrap|text-underline-position|text-transform|text-space-collapse|text-shadow|text-replace|text-overflow|text-outline|text-orientation|text-justify|text-indent|text-height|text-emphasis-style|text-emphasis-position|text-emphasis-color|text-emphasis|text-decoration-style|text-decoration-skip|text-decoration-line|text-decoration-color|text-decoration|text-combine-upright|text-align-last|text-align|text|target-position|target-new|target-name|target|table-layout|tab-size|style-type|style-position|style-image|style|stroke|string-set|stretch|stress|stacking-strategy|stacking-shift|stacking-ruby|stacking|src|speed|speech-rate|speech|speak-punctuation|speak-numeral|speak-header|speak-as|speak|span|spacing|space-collapse|space|sizing|size-adjust|size|shape-outside|shape-margin|shape-inside|shape-image-threshold|shadow|setting-named-strings-string-set-pro|scroll-snap-type|scroll-snap-stop|scroll-snap-margin-top|scroll-snap-margin-right|scroll-snap-margin-left|scroll-snap-margin-inline-start|scroll-snap-margin-inline-end|scroll-snap-margin-inline|scroll-snap-margin-bottom|scroll-snap-margin-block-start|scroll-snap-margin-block-end|scroll-snap-margin-block|scroll-snap-margin|scroll-snap-align|scroll-padding-top|scroll-padding-right|scroll-padding-left|scroll-padding-inline-start|scroll-padding-inline-end|scroll-padding-inline|scroll-padding-bottom|scroll-padding-block-start|scroll-padding-block-end|scroll-padding-block|scroll-padding|rule-width|rule-style|rule-color|rule|ruby-span|ruby-position|ruby-overhang|ruby-merge|ruby-align|ruby|rows|row-gap|rotation-point|rotation|rotating|role|right|richness|rest-before|rest-after|rest|respond-to|resource|resolution|resize|reset|replace|repeat|rendering-intent|region-fragment|rate|radius|quotes|punctuation-trim|punctuation|property|profile|presentation-level|presentation|position|polar-origin|polar-distance|polar-angle|polar-anchor|pointer-events|point|play-state|play-during|play-count|pitch-range|pitch|phonemes|perspective-origin|perspective|pause-before|pause-after|pause|page-policy|page-break-inside|page-break-before|page-break-after|page|padding-top|padding-right|padding-left|padding-bottom|padding|pack|overhang|overflow-y|overflow-x|overflow-wrap|overflow-style|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|origin|orientation|orient|ordinal-group|order|opacity|offset|object-position|object-fit|numeral|new|nav-up|nav-right|nav-left|nav-index|nav-down|nav-dir|nav|name|moving|move-to|model|min-width|min-height|min|max-width|max-lines|max-height|max|mask-type|mask-source-type|mask-size|mask-repeat|mask-position|mask-origin|mask-image|mask-clip|mask-box-width|mask-box-source|mask-box-slice|mask-box-repeat|mask-box-outset|mask-box|mask|marquee-style|marquee-speed|marquee-play-count|marquee-direction|marquee|marks|marker-side|mark-before|mark-after|mark|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|list|lines|line-stacking-strategy|line-stacking-shift|line-stacking-ruby|line-stacking|line-snap|line-height|line-grid|line-break|line|lighting-color|level|letter-spacing|length|left|label|justify-self|justify-items|justify-content|justify|iteration-count|input-method-editor|inline-box-align|initial-value|initial-size|initial-letter|initial-before-align|initial-before-adjust|initial-after-align|initial-after-adjust|index|indent|increment|image-resolution|image-rendering|image-orientation|image|icon|hyphens|hyphenate-resource|hyphenate-lines|hyphenate-character|hyphenate-before|hyphenate-after|hyphenate|height|header|hanging-punctuation|grid-template-rows|grid-template-columns|grid-template-areas|grid-template|grid-rows|grid-row-start|grid-row-end|grid-row|grid-columns|grid-column-start|grid-column-end|grid-column|grid-auto-rows|grid-auto-flow|grid-auto-columns|grid-area|grid|gap|font-weight|font-variant-position|font-variant-numeric|font-variant-ligatures|font-variant-east-asian|font-variant-caps|font-variant-alternates|font-variant|font-synthesis|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|flow-into|flow-from|flood-opacity|flood-color|float-offset|float|flex-wrap|flex-shrink|flex-grow|flex-group|flex-flow|flex-direction|flex-basis|flex|fit-position|fit|filter|fill|family|empty-cells|emphasis|elevation|duration|drop-initial-value|drop-initial-size|drop-initial-before-align|drop-initial-before-adjust|drop-initial-after-align|drop-initial-after-adjust|drop|down|dominant-baseline|display-role|display-outside|display-model|display-list|display-inside|display|direction|delay|decoration-break|decoration|cursor|cue-before|cue-after|cue|crop|counter-set|counter-reset|counter-increment|counter|count|content|contain|columns|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|column-break-before|column-break-after|column|color-profile|color-interpolation-filters|color|collapse|clip-rule|clip-path|clip|clear|character|chains|caption-side|break-inside|break-before|break-after|break|box-suppress|box-snap|box-sizing|box-shadow|box-pack|box-orient|box-ordinal-group|box-lines|box-flex-group|box-flex|box-direction|box-decoration-break|box-align|box|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-length|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-boundary|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|bookmark-target|bookmark-state|bookmark-level|bookmark-label|bookmark|bleed|binding|bidi|before|baseline-shift|baseline|balance|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-break|background-attachment|background|backface-visibility|azimuth|attachment|appearance|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|all|alignment-baseline|alignment-adjust|alignment|align-self|align-last|align-items|align-content|align|after|adjust)\b</string>
701 <key>name</key>
702 <string>support.type.property-name.css</string>
703 </dict>
704 </array>
705 </dict>
706 <dict>
707 <key>begin</key>
708 <string>(:)\s*</string>
709 <key>beginCaptures</key>
710 <dict>
711 <key>1</key>
712 <dict>
713 <key>name</key>
714 <string>punctuation.separator.key-value.css</string>
715 </dict>
716 </dict>
717 <key>end</key>
718 <string>\s*(;|(?=\}))</string>
719 <key>endCaptures</key>
720 <dict>
721 <key>1</key>
722 <dict>
723 <key>name</key>
724 <string>punctuation.terminator.rule.css</string>
725 </dict>
726 </dict>
727 <key>name</key>
728 <string>meta.property-value.css</string>
729 <key>patterns</key>
730 <array>
731 <dict>
732 <key>include</key>
733 <string>#property-values</string>
734 </dict>
735 </array>
736 </dict>
737 </array>
738 </dict>
739 <key>selector</key>
740 <dict>
741 <key>begin</key>
742 <string>\s*(?=[:.*#a-zA-Z])</string>
743 <key>end</key>
744 <string>(?=[/@{)])</string>
745 <key>name</key>
746 <string>meta.selector.css</string>
747 <key>patterns</key>
748 <array>
749 <dict>
750 <key>match</key>
751 <string>\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|main|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\b</string>
752 <key>name</key>
753 <string>entity.name.tag.css</string>
754 </dict>
755 <dict>
756 <key>captures</key>
757 <dict>
758 <key>1</key>
759 <dict>
760 <key>name</key>
761 <string>punctuation.definition.entity.css</string>
762 </dict>
763 </dict>
764 <key>match</key>
765 <string>(\.)[a-zA-Z0-9_-]+</string>
766 <key>name</key>
767 <string>entity.other.attribute-name.class.css</string>
768 </dict>
769 <dict>
770 <key>captures</key>
771 <dict>
772 <key>1</key>
773 <dict>
774 <key>name</key>
775 <string>punctuation.definition.entity.css</string>
776 </dict>
777 </dict>
778 <key>match</key>
779 <string>(#)[a-zA-Z][a-zA-Z0-9_-]*</string>
780 <key>name</key>
781 <string>entity.other.attribute-name.id.css</string>
782 </dict>
783 <dict>
784 <key>match</key>
785 <string>\*</string>
786 <key>name</key>
787 <string>entity.name.tag.wildcard.css</string>
788 </dict>
789 <dict>
790 <key>captures</key>
791 <dict>
792 <key>1</key>
793 <dict>
794 <key>name</key>
795 <string>punctuation.definition.entity.css</string>
796 </dict>
797 </dict>
798 <key>match</key>
799 <string>(:+)(after|before|first-letter|first-line|selection)\b</string>
800 <key>name</key>
801 <string>entity.other.attribute-name.pseudo-element.css</string>
802 </dict>
803 <dict>
804 <key>captures</key>
805 <dict>
806 <key>1</key>
807 <dict>
808 <key>name</key>
809 <string>punctuation.definition.entity.css</string>
810 </dict>
811 </dict>
812 <key>match</key>
813 <string>(:)((first|last)-child|(first|last|only)-of-type|empty|root|target|first|left|right)\b</string>
814 <key>name</key>
815 <string>entity.other.attribute-name.pseudo-class.css</string>
816 </dict>
817 <dict>
818 <key>captures</key>
819 <dict>
820 <key>1</key>
821 <dict>
822 <key>name</key>
823 <string>punctuation.definition.entity.css</string>
824 </dict>
825 </dict>
826 <key>match</key>
827 <string>(:)(checked|enabled|default|disabled|indeterminate|invalid|optional|required|valid)\b</string>
828 <key>name</key>
829 <string>entity.other.attribute-name.pseudo-class.ui-state.css</string>
830 </dict>
831 <dict>
832 <key>begin</key>
833 <string>((:)not)(\()</string>
834 <key>beginCaptures</key>
835 <dict>
836 <key>1</key>
837 <dict>
838 <key>name</key>
839 <string>entity.other.attribute-name.pseudo-class.css</string>
840 </dict>
841 <key>2</key>
842 <dict>
843 <key>name</key>
844 <string>punctuation.definition.entity.css</string>
845 </dict>
846 <key>3</key>
847 <dict>
848 <key>name</key>
849 <string>punctuation.section.function.css</string>
850 </dict>
851 </dict>
852 <key>end</key>
853 <string>\)</string>
854 <key>endCaptures</key>
855 <dict>
856 <key>0</key>
857 <dict>
858 <key>name</key>
859 <string>punctuation.section.function.css</string>
860 </dict>
861 </dict>
862 <key>patterns</key>
863 <array>
864 <dict>
865 <key>include</key>
866 <string>#selector</string>
867 </dict>
868 </array>
869 </dict>
870 <dict>
871 <key>captures</key>
872 <dict>
873 <key>1</key>
874 <dict>
875 <key>name</key>
876 <string>entity.other.attribute-name.pseudo-class.css</string>
877 </dict>
878 <key>2</key>
879 <dict>
880 <key>name</key>
881 <string>punctuation.definition.entity.css</string>
882 </dict>
883 <key>3</key>
884 <dict>
885 <key>name</key>
886 <string>punctuation.section.function.css</string>
887 </dict>
888 <key>4</key>
889 <dict>
890 <key>name</key>
891 <string>constant.numeric.css</string>
892 </dict>
893 <key>5</key>
894 <dict>
895 <key>name</key>
896 <string>punctuation.section.function.css</string>
897 </dict>
898 </dict>
899 <key>match</key>
900 <string>((:)nth-(?:(?:last-)?child|(?:last-)?of-type))(\()(\-?(?:\d+n?|n)(?:\+\d+)?|even|odd)(\))</string>
901 </dict>
902 <dict>
903 <key>captures</key>
904 <dict>
905 <key>1</key>
906 <dict>
907 <key>name</key>
908 <string>punctuation.definition.entity.css</string>
909 </dict>
910 </dict>
911 <key>match</key>
912 <string>(:)(active|hover|link|visited|focus)\b</string>
913 <key>name</key>
914 <string>entity.other.attribute-name.pseudo-class.css</string>
915 </dict>
916 <dict>
917 <key>captures</key>
918 <dict>
919 <key>1</key>
920 <dict>
921 <key>name</key>
922 <string>punctuation.definition.entity.css</string>
923 </dict>
924 <key>2</key>
925 <dict>
926 <key>name</key>
927 <string>entity.other.attribute-name.attribute.css</string>
928 </dict>
929 <key>3</key>
930 <dict>
931 <key>name</key>
932 <string>punctuation.separator.operator.css</string>
933 </dict>
934 <key>4</key>
935 <dict>
936 <key>name</key>
937 <string>string.unquoted.attribute-value.css</string>
938 </dict>
939 <key>5</key>
940 <dict>
941 <key>name</key>
942 <string>string.quoted.double.attribute-value.css</string>
943 </dict>
944 <key>6</key>
945 <dict>
946 <key>name</key>
947 <string>punctuation.definition.string.begin.css</string>
948 </dict>
949 <key>7</key>
950 <dict>
951 <key>name</key>
952 <string>punctuation.definition.string.end.css</string>
953 </dict>
954 </dict>
955 <key>match</key>
956 <string>(?i)(\[)\s*(-?[_a-z\\[[:^ascii:]]][_a-z0-9\-\\[[:^ascii:]]]*)(?:\s*([~|^$*]?=)\s*(?:(-?[_a-z\\[[:^ascii:]]][_a-z0-9\-\\[[:^ascii:]]]*)|((?&gt;(['"])(?:[^\\]|\\.)*?(\6)))))?\s*(\])</string>
957 <key>name</key>
958 <string>meta.attribute-selector.css</string>
959 </dict>
960 </array>
961 </dict>
962 <key>string-double</key>
963 <dict>
964 <key>begin</key>
965 <string>"</string>
966 <key>beginCaptures</key>
967 <dict>
968 <key>0</key>
969 <dict>
970 <key>name</key>
971 <string>punctuation.definition.string.begin.css</string>
972 </dict>
973 </dict>
974 <key>end</key>
975 <string>"</string>
976 <key>endCaptures</key>
977 <dict>
978 <key>0</key>
979 <dict>
980 <key>name</key>
981 <string>punctuation.definition.string.end.css</string>
982 </dict>
983 </dict>
984 <key>name</key>
985 <string>string.quoted.double.css</string>
986 <key>patterns</key>
987 <array>
988 <dict>
989 <key>match</key>
990 <string>\\.</string>
991 <key>name</key>
992 <string>constant.character.escape.css</string>
993 </dict>
994 </array>
995 </dict>
996 <key>string-single</key>
997 <dict>
998 <key>begin</key>
999 <string>'</string>
1000 <key>beginCaptures</key>
1001 <dict>
1002 <key>0</key>
1003 <dict>
1004 <key>name</key>
1005 <string>punctuation.definition.string.begin.css</string>
1006 </dict>
1007 </dict>
1008 <key>end</key>
1009 <string>'</string>
1010 <key>endCaptures</key>
1011 <dict>
1012 <key>0</key>
1013 <dict>
1014 <key>name</key>
1015 <string>punctuation.definition.string.end.css</string>
1016 </dict>
1017 </dict>
1018 <key>name</key>
1019 <string>string.quoted.single.css</string>
1020 <key>patterns</key>
1021 <array>
1022 <dict>
1023 <key>match</key>
1024 <string>\\.</string>
1025 <key>name</key>
1026 <string>constant.character.escape.css</string>
1027 </dict>
1028 </array>
1029 </dict>
1030 </dict>
1031 <key>scopeName</key>
1032 <string>source.css</string>
1033 <key>uuid</key>
1034 <string>69AA0917-B7BB-11D9-A7E2-000D93C8BE28</string>
1035</dict>
1036</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/diff.plist created+268
......@@ -0,0 +1,268 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>fileTypes</key>
6 <array>
7 <string>patch</string>
8 <string>diff</string>
9 <string>rej</string>
10 </array>
11 <key>firstLineMatch</key>
12 <string>(?x)^
13 (===\ modified\ file
14 |==== \s* // .+ \s - \s .+ \s+ ====
15 |Index:\
16 |---\ [^%\n]
17 |\*\*\*.*\d{4}\s*$
18 |\d+(,\d+)* (a|d|c) \d+(,\d+)* $
19 |diff\ --git\
20 |commit\ [0-9a-f]{40}$
21 )</string>
22 <key>keyEquivalent</key>
23 <string>^~D</string>
24 <key>name</key>
25 <string>Diff</string>
26 <key>patterns</key>
27 <array>
28 <dict>
29 <key>captures</key>
30 <dict>
31 <key>1</key>
32 <dict>
33 <key>name</key>
34 <string>punctuation.definition.separator.diff</string>
35 </dict>
36 </dict>
37 <key>match</key>
38 <string>^((\*{15})|(={67})|(-{3}))$\n?</string>
39 <key>name</key>
40 <string>meta.separator.diff</string>
41 </dict>
42 <dict>
43 <key>match</key>
44 <string>^\d+(,\d+)*(a|d|c)\d+(,\d+)*$\n?</string>
45 <key>name</key>
46 <string>meta.diff.range.normal</string>
47 </dict>
48 <dict>
49 <key>captures</key>
50 <dict>
51 <key>1</key>
52 <dict>
53 <key>name</key>
54 <string>punctuation.definition.range.diff</string>
55 </dict>
56 <key>2</key>
57 <dict>
58 <key>name</key>
59 <string>meta.toc-list.line-number.diff</string>
60 </dict>
61 <key>3</key>
62 <dict>
63 <key>name</key>
64 <string>punctuation.definition.range.diff</string>
65 </dict>
66 </dict>
67 <key>match</key>
68 <string>^(@@)\s*(.+?)\s*(@@.*)($\n?)?</string>
69 <key>name</key>
70 <string>meta.diff.range.unified</string>
71 </dict>
72 <dict>
73 <key>captures</key>
74 <dict>
75 <key>3</key>
76 <dict>
77 <key>name</key>
78 <string>punctuation.definition.range.diff</string>
79 </dict>
80 <key>4</key>
81 <dict>
82 <key>name</key>
83 <string>punctuation.definition.range.diff</string>
84 </dict>
85 <key>6</key>
86 <dict>
87 <key>name</key>
88 <string>punctuation.definition.range.diff</string>
89 </dict>
90 <key>7</key>
91 <dict>
92 <key>name</key>
93 <string>punctuation.definition.range.diff</string>
94 </dict>
95 </dict>
96 <key>match</key>
97 <string>^(((\-{3}) .+ (\-{4}))|((\*{3}) .+ (\*{4})))$\n?</string>
98 <key>name</key>
99 <string>meta.diff.range.context</string>
100 </dict>
101 <dict>
102 <key>match</key>
103 <string>^diff --git a/.*$\n?</string>
104 <key>name</key>
105 <string>meta.diff.header.git</string>
106 </dict>
107 <dict>
108 <key>match</key>
109 <string>^diff (-|\S+\s+\S+).*$\n?</string>
110 <key>name</key>
111 <string>meta.diff.header.command</string>
112 </dict>
113 <dict>
114 <key>captures</key>
115 <dict>
116 <key>4</key>
117 <dict>
118 <key>name</key>
119 <string>punctuation.definition.from-file.diff</string>
120 </dict>
121 <key>6</key>
122 <dict>
123 <key>name</key>
124 <string>punctuation.definition.from-file.diff</string>
125 </dict>
126 <key>7</key>
127 <dict>
128 <key>name</key>
129 <string>punctuation.definition.from-file.diff</string>
130 </dict>
131 </dict>
132 <key>match</key>
133 <string>(^(((-{3}) .+)|((\*{3}) .+))$\n?|^(={4}) .+(?= - ))</string>
134 <key>name</key>
135 <string>meta.diff.header.from-file</string>
136 </dict>
137 <dict>
138 <key>captures</key>
139 <dict>
140 <key>2</key>
141 <dict>
142 <key>name</key>
143 <string>punctuation.definition.to-file.diff</string>
144 </dict>
145 <key>3</key>
146 <dict>
147 <key>name</key>
148 <string>punctuation.definition.to-file.diff</string>
149 </dict>
150 <key>4</key>
151 <dict>
152 <key>name</key>
153 <string>punctuation.definition.to-file.diff</string>
154 </dict>
155 </dict>
156 <key>match</key>
157 <string>(^(\+{3}) .+$\n?| (-) .* (={4})$\n?)</string>
158 <key>name</key>
159 <string>meta.diff.header.to-file</string>
160 </dict>
161 <dict>
162 <key>captures</key>
163 <dict>
164 <key>3</key>
165 <dict>
166 <key>name</key>
167 <string>punctuation.definition.inserted.diff</string>
168 </dict>
169 <key>6</key>
170 <dict>
171 <key>name</key>
172 <string>punctuation.definition.inserted.diff</string>
173 </dict>
174 </dict>
175 <key>match</key>
176 <string>^(((&gt;)( .*)?)|((\+).*))$\n?</string>
177 <key>name</key>
178 <string>markup.inserted.diff</string>
179 </dict>
180 <dict>
181 <key>captures</key>
182 <dict>
183 <key>1</key>
184 <dict>
185 <key>name</key>
186 <string>punctuation.definition.changed.diff</string>
187 </dict>
188 </dict>
189 <key>match</key>
190 <string>^(!).*$\n?</string>
191 <key>name</key>
192 <string>markup.changed.diff</string>
193 </dict>
194 <dict>
195 <key>captures</key>
196 <dict>
197 <key>3</key>
198 <dict>
199 <key>name</key>
200 <string>punctuation.definition.deleted.diff</string>
201 </dict>
202 <key>6</key>
203 <dict>
204 <key>name</key>
205 <string>punctuation.definition.deleted.diff</string>
206 </dict>
207 </dict>
208 <key>match</key>
209 <string>^(((&lt;)( .*)?)|((-).*))$\n?</string>
210 <key>name</key>
211 <string>markup.deleted.diff</string>
212 </dict>
213 <dict>
214 <key>begin</key>
215 <string>^(#)</string>
216 <key>captures</key>
217 <dict>
218 <key>1</key>
219 <dict>
220 <key>name</key>
221 <string>punctuation.definition.comment.diff</string>
222 </dict>
223 </dict>
224 <key>comment</key>
225 <string>Git produces unified diffs with embedded comments"</string>
226 <key>end</key>
227 <string>\n</string>
228 <key>name</key>
229 <string>comment.line.number-sign.diff</string>
230 </dict>
231 <dict>
232 <key>match</key>
233 <string>^index [0-9a-f]{7,40}\.\.[0-9a-f]{7,40}.*$\n?</string>
234 <key>name</key>
235 <string>meta.diff.index.git</string>
236 </dict>
237 <dict>
238 <key>captures</key>
239 <dict>
240 <key>1</key>
241 <dict>
242 <key>name</key>
243 <string>punctuation.separator.key-value.diff</string>
244 </dict>
245 <key>2</key>
246 <dict>
247 <key>name</key>
248 <string>meta.toc-list.file-name.diff</string>
249 </dict>
250 </dict>
251 <key>match</key>
252 <string>^Index(:) (.+)$\n?</string>
253 <key>name</key>
254 <string>meta.diff.index</string>
255 </dict>
256 <dict>
257 <key>match</key>
258 <string>^Only in .*: .*$\n?</string>
259 <key>name</key>
260 <string>meta.diff.only-in</string>
261 </dict>
262 </array>
263 <key>scopeName</key>
264 <string>source.diff</string>
265 <key>uuid</key>
266 <string>7E848FF4-708E-11D9-97B4-0011242E4184</string>
267</dict>
268</plist>
src/file-viewer/highlight-grammar/dosbatch.plist created+169
......@@ -0,0 +1,169 @@
1<?xml version="1.0" encoding="UTF-8" ?>
2<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4 <dict>
5 <key>uuid</key>
6 <string>E07EC438-7B75-4437-8AA1-DA94C1E6EACC</string>
7 <key>patterns</key>
8 <array>
9 <dict>
10 <key>name</key>
11 <string>keyword.command.dosbatch</string>
12 <key>match</key>
13 <string>\b(?i)(?:append|assoc|at|attrib|break|cacls|cd|chcp|chdir|chkdsk|chkntfs|cls|cmd|color|comp|compact|convert|copy|date|del|dir|diskcomp|diskcopy|doskey|echo|endlocal|erase|fc|find|findstr|format|ftype|graftabl|help|keyb|label|md|mkdir|mode|more|move|path|pause|popd|print|prompt|pushd|rd|recover|ren|rename|replace|restore|rmdir|set|setlocal|shift|sort|start|subst|time|title|tree|type|ver|verify|vol|xcopy)\b</string>
14 </dict>
15 <dict>
16 <key>name</key>
17 <string>keyword.control.statement.dosbatch</string>
18 <key>match</key>
19 <string>\b(?i)(?:goto|call|exit)\b</string>
20 </dict>
21 <dict>
22 <key>name</key>
23 <string>keyword.control.conditional.if.dosbatch</string>
24 <key>match</key>
25 <string>\b(?i)if\s+((not)\s+)(exist|defined|errorlevel|cmdextversion)\b</string>
26 </dict>
27 <dict>
28 <key>name</key>
29 <string>keyword.control.conditional.dosbatch</string>
30 <key>match</key>
31 <string>\b(?i)(?:if|else)\b</string>
32 </dict>
33 <dict>
34 <key>name</key>
35 <string>keyword.control.repeat.dosbatch</string>
36 <key>match</key>
37 <string>\b(?i)for\b</string>
38 </dict>
39 <dict>
40 <key>name</key>
41 <string>keyword.operator.dosbatch</string>
42 <key>match</key>
43 <string>\b(?:EQU|NEQ|LSS|LEQ|GTR|GEQ)\b</string>
44 </dict>
45 <dict>
46 <key>name</key>
47 <string>comment.line.rem.dosbatch</string>
48 <key>match</key>
49 <string>\b(?i)rem(?:$|\s.*$)</string>
50 </dict>
51 <dict>
52 <key>name</key>
53 <string>comment.line.colons.dosbatch</string>
54 <key>match</key>
55 <string>\s*:\s*:.*$</string>
56 </dict>
57 <dict>
58 <key>captures</key>
59 <dict>
60 <key>1</key>
61 <dict>
62 <key>name</key>
63 <string>variable.parameter.function.begin.shell</string>
64 </dict>
65 </dict>
66 <key>name</key>
67 <string>variable.parameter.function.dosbatch</string>
68 <key>match</key>
69 <string>(?i)(%)(~(?:f|d|p|n|x|s|a|t|z|\$[^:]*:)*)?\d</string>
70 </dict>
71 <dict>
72 <key>captures</key>
73 <dict>
74 <key>1</key>
75 <dict>
76 <key>name</key>
77 <string>variable.parameter.loop.begin.shell</string>
78 </dict>
79 </dict>
80 <key>name</key>
81 <string>variable.parameter.loop.dosbatch</string>
82 <key>match</key>
83 <string>(?i)(%%)(~(?:f|d|p|n|x|s|a|t|z|\$[^:]*:)*)?[a-z]</string>
84 </dict>
85 <dict>
86 <key>captures</key>
87 <dict>
88 <key>1</key>
89 <dict>
90 <key>name</key>
91 <string>variable.other.parsetime.begin.shell</string>
92 </dict>
93 <key>2</key>
94 <dict>
95 <key>name</key>
96 <string>variable.other.parsetime.end.shell</string>
97 </dict>
98 </dict>
99 <key>name</key>
100 <string>variable.other.parsetime.dosbatch</string>
101 <key>match</key>
102 <string>(%)[^%]+(%)</string>
103 </dict>
104 <dict>
105 <key>captures</key>
106 <dict>
107 <key>1</key>
108 <dict>
109 <key>name</key>
110 <string>variable.other.delayed.begin.shell</string>
111 </dict>
112 <key>2</key>
113 <dict>
114 <key>name</key>
115 <string>variable.other.delayed.end.shell</string>
116 </dict>
117 </dict>
118 <key>name</key>
119 <string>variable.other.delayed.dosbatch</string>
120 <key>match</key>
121 <string>(!)[^!]+(!)</string>
122 </dict>
123 <dict>
124 <key>begin</key>
125 <string>"</string>
126 <key>endCaptures</key>
127 <dict>
128 <key>0</key>
129 <dict>
130 <key>name</key>
131 <string>punctuation.definition.string.end.shell</string>
132 </dict>
133 </dict>
134 <key>beginCaptures</key>
135 <dict>
136 <key>0</key>
137 <dict>
138 <key>name</key>
139 <string>punctuation.definition.string.begin.shell</string>
140 </dict>
141 </dict>
142 <key>name</key>
143 <string>string.quoted.double.dosbatch</string>
144 <key>end</key>
145 <string>"|$</string>
146 </dict>
147 <dict>
148 <key>name</key>
149 <string>keyword.operator.pipe.dosbatch</string>
150 <key>match</key>
151 <string>[|]</string>
152 </dict>
153 <dict>
154 <key>name</key>
155 <string>keyword.operator.redirect.shell</string>
156 <key>match</key>
157 <string>&amp;&gt;|\d*&gt;&amp;\d*|\d*(&gt;&gt;|&gt;|&lt;)|\d*&lt;&amp;|\d*&lt;&gt;</string>
158 </dict>
159 </array>
160 <key>name</key>
161 <string>Batch File</string>
162 <key>scopeName</key>
163 <string>source.dosbatch</string>
164 <key>fileTypes</key>
165 <array>
166 <string>bat</string>
167 </array>
168 </dict>
169</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/json.plist created+386
......@@ -0,0 +1,386 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>fileTypes</key>
6 <array>
7 <string>json</string>
8 <string>sublime-settings</string>
9 <string>sublime-menu</string>
10 <string>sublime-keymap</string>
11 <string>sublime-mousemap</string>
12 <string>sublime-theme</string>
13 <string>sublime-build</string>
14 <string>sublime-project</string>
15 <string>sublime-completions</string>
16 </array>
17 <key>foldingStartMarker</key>
18 <string>(?x) # turn on extended mode
19 ^ # a line beginning with
20 \s* # some optional space
21 [{\[] # the start of an object or array
22 (?! # but not followed by
23 .* # whatever
24 [}\]] # and the close of an object or array
25 ,? # an optional comma
26 \s* # some optional space
27 $ # at the end of the line
28 )
29 | # ...or...
30 [{\[] # the start of an object or array
31 \s* # some optional space
32 $ # at the end of the line</string>
33 <key>foldingStopMarker</key>
34 <string>(?x) # turn on extended mode
35 ^ # a line beginning with
36 \s* # some optional space
37 [}\]] # and the close of an object or array</string>
38 <key>keyEquivalent</key>
39 <string>^~J</string>
40 <key>name</key>
41 <string>JSON (Javascript Next)</string>
42 <key>patterns</key>
43 <array>
44 <dict>
45 <key>include</key>
46 <string>#value</string>
47 </dict>
48 </array>
49 <key>repository</key>
50 <dict>
51 <key>array</key>
52 <dict>
53 <key>begin</key>
54 <string>\[</string>
55 <key>beginCaptures</key>
56 <dict>
57 <key>0</key>
58 <dict>
59 <key>name</key>
60 <string>punctuation.definition.array.begin.json</string>
61 </dict>
62 </dict>
63 <key>end</key>
64 <string>\]</string>
65 <key>endCaptures</key>
66 <dict>
67 <key>0</key>
68 <dict>
69 <key>name</key>
70 <string>punctuation.definition.array.end.json</string>
71 </dict>
72 </dict>
73 <key>name</key>
74 <string>meta.structure.array.json</string>
75 <key>patterns</key>
76 <array>
77 <dict>
78 <key>include</key>
79 <string>#value</string>
80 </dict>
81 <dict>
82 <key>match</key>
83 <string>,</string>
84 <key>name</key>
85 <string>punctuation.separator.array.json</string>
86 </dict>
87 <dict>
88 <key>match</key>
89 <string>[^\s\]]</string>
90 <key>name</key>
91 <string>invalid.illegal.expected-array-separator.json</string>
92 </dict>
93 </array>
94 </dict>
95 <key>comments</key>
96 <dict>
97 <key>patterns</key>
98 <array>
99 <dict>
100 <key>begin</key>
101 <string>/\*\*(?!/)</string>
102 <key>captures</key>
103 <dict>
104 <key>0</key>
105 <dict>
106 <key>name</key>
107 <string>punctuation.definition.comment.json</string>
108 </dict>
109 </dict>
110 <key>end</key>
111 <string>\*/</string>
112 <key>name</key>
113 <string>comment.block.documentation.json</string>
114 </dict>
115 <dict>
116 <key>begin</key>
117 <string>/\*</string>
118 <key>captures</key>
119 <dict>
120 <key>0</key>
121 <dict>
122 <key>name</key>
123 <string>punctuation.definition.comment.json</string>
124 </dict>
125 </dict>
126 <key>end</key>
127 <string>\*/</string>
128 <key>name</key>
129 <string>comment.block.json</string>
130 </dict>
131 <dict>
132 <key>captures</key>
133 <dict>
134 <key>1</key>
135 <dict>
136 <key>name</key>
137 <string>punctuation.definition.comment.json</string>
138 </dict>
139 </dict>
140 <key>match</key>
141 <string>(//).*$\n?</string>
142 <key>name</key>
143 <string>comment.line.double-slash.js</string>
144 </dict>
145 </array>
146 </dict>
147 <key>constant</key>
148 <dict>
149 <key>match</key>
150 <string>\b(?:true|false|null)\b</string>
151 <key>name</key>
152 <string>constant.language.json</string>
153 </dict>
154 <key>number</key>
155 <dict>
156 <key>match</key>
157 <string>(?x) # turn on extended mode
158 -? # an optional minus
159 (?:
160 0 # a zero
161 | # ...or...
162 [1-9] # a 1-9 character
163 \d* # followed by zero or more digits
164 )
165 (?:
166 (?:
167 \. # a period
168 \d+ # followed by one or more digits
169 )?
170 (?:
171 [eE] # an e character
172 [+-]? # followed by an option +/-
173 \d+ # followed by one or more digits
174 )? # make exponent optional
175 )? # make decimal portion optional</string>
176 <key>name</key>
177 <string>constant.numeric.json</string>
178 </dict>
179 <key>object</key>
180 <dict>
181 <key>begin</key>
182 <string>\{</string>
183 <key>beginCaptures</key>
184 <dict>
185 <key>0</key>
186 <dict>
187 <key>name</key>
188 <string>punctuation.definition.dictionary.begin.json</string>
189 </dict>
190 </dict>
191 <key>end</key>
192 <string>\}</string>
193 <key>endCaptures</key>
194 <dict>
195 <key>0</key>
196 <dict>
197 <key>name</key>
198 <string>punctuation.definition.dictionary.end.json</string>
199 </dict>
200 </dict>
201 <key>name</key>
202 <string>meta.structure.dictionary.json</string>
203 <key>patterns</key>
204 <array>
205 <dict>
206 <key>comment</key>
207 <string>the JSON object key</string>
208 <key>include</key>
209 <string>#objectkey</string>
210 </dict>
211 <dict>
212 <key>include</key>
213 <string>#comments</string>
214 </dict>
215 <dict>
216 <key>begin</key>
217 <string>:</string>
218 <key>beginCaptures</key>
219 <dict>
220 <key>0</key>
221 <dict>
222 <key>name</key>
223 <string>punctuation.separator.dictionary.key-value.json</string>
224 </dict>
225 </dict>
226 <key>end</key>
227 <string>(,)|(?=\})</string>
228 <key>endCaptures</key>
229 <dict>
230 <key>1</key>
231 <dict>
232 <key>name</key>
233 <string>punctuation.separator.dictionary.pair.json</string>
234 </dict>
235 </dict>
236 <key>name</key>
237 <string>meta.structure.dictionary.value.json</string>
238 <key>patterns</key>
239 <array>
240 <dict>
241 <key>comment</key>
242 <string>the JSON object value</string>
243 <key>include</key>
244 <string>#value</string>
245 </dict>
246 <dict>
247 <key>match</key>
248 <string>[^\s,]</string>
249 <key>name</key>
250 <string>invalid.illegal.expected-dictionary-separator.json</string>
251 </dict>
252 </array>
253 </dict>
254 <dict>
255 <key>match</key>
256 <string>[^\s\}]</string>
257 <key>name</key>
258 <string>invalid.illegal.expected-dictionary-separator.json</string>
259 </dict>
260 </array>
261 </dict>
262 <key>string</key>
263 <dict>
264 <key>begin</key>
265 <string>"</string>
266 <key>beginCaptures</key>
267 <dict>
268 <key>0</key>
269 <dict>
270 <key>name</key>
271 <string>punctuation.definition.string.begin.json</string>
272 </dict>
273 </dict>
274 <key>end</key>
275 <string>"</string>
276 <key>endCaptures</key>
277 <dict>
278 <key>0</key>
279 <dict>
280 <key>name</key>
281 <string>punctuation.definition.string.end.json</string>
282 </dict>
283 </dict>
284 <key>name</key>
285 <string>string.quoted.double.json</string>
286 <key>patterns</key>
287 <array>
288 <dict>
289 <key>include</key>
290 <string>#stringcontent</string>
291 </dict>
292 </array>
293 </dict>
294 <key>objectkey</key>
295 <dict>
296 <key>begin</key>
297 <string>"</string>
298 <key>beginCaptures</key>
299 <dict>
300 <key>0</key>
301 <dict>
302 <key>name</key>
303 <string>punctuation.support.type.property-name.begin.json</string>
304 </dict>
305 </dict>
306 <key>end</key>
307 <string>"</string>
308 <key>endCaptures</key>
309 <dict>
310 <key>0</key>
311 <dict>
312 <key>name</key>
313 <string>punctuation.support.type.property-name.end.json</string>
314 </dict>
315 </dict>
316 <key>name</key>
317 <string>string.json support.type.property-name.json</string>
318 <key>patterns</key>
319 <array>
320 <dict>
321 <key>include</key>
322 <string>#stringcontent</string>
323 </dict>
324 </array>
325 </dict>
326 <key>stringcontent</key>
327 <dict>
328 <key>patterns</key>
329 <array>
330 <dict>
331 <key>match</key>
332 <string>(?x) # turn on extended mode
333 \\ # a literal backslash
334 (?: # ...followed by...
335 ["\\/bfnrt] # one of these characters
336 | # ...or...
337 u # a u
338 [0-9a-fA-F]{4}) # and four hex digits</string>
339 <key>name</key>
340 <string>constant.character.escape.json</string>
341 </dict>
342 <dict>
343 <key>match</key>
344 <string>\\.</string>
345 <key>name</key>
346 <string>invalid.illegal.unrecognized-string-escape.json</string>
347 </dict>
348 </array>
349 </dict>
350 <key>value</key>
351 <dict>
352 <key>patterns</key>
353 <array>
354 <dict>
355 <key>include</key>
356 <string>#constant</string>
357 </dict>
358 <dict>
359 <key>include</key>
360 <string>#number</string>
361 </dict>
362 <dict>
363 <key>include</key>
364 <string>#string</string>
365 </dict>
366 <dict>
367 <key>include</key>
368 <string>#array</string>
369 </dict>
370 <dict>
371 <key>include</key>
372 <string>#object</string>
373 </dict>
374 <dict>
375 <key>include</key>
376 <string>#comments</string>
377 </dict>
378 </array>
379 </dict>
380 </dict>
381 <key>scopeName</key>
382 <string>source.json</string>
383 <key>uuid</key>
384 <string>8f97457b-516e-48ce-83c7-08ae12fb327a</string>
385</dict>
386</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/lua.plist created+1462
......@@ -0,0 +1,1462 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4 <dict>
5 <key>name</key>
6 <string>Lua</string>
7 <key>scopeName</key>
8 <string>source.lua</string>
9 <key>patterns</key>
10 <array>
11 <dict>
12 <key>begin</key>
13 <string>\b(?:(local)\s+)?(function)\b(?![,:])</string>
14 <key>beginCaptures</key>
15 <dict>
16 <key>1</key>
17 <dict>
18 <key>name</key>
19 <string>keyword.local.lua</string>
20 </dict>
21 <key>2</key>
22 <dict>
23 <key>name</key>
24 <string>keyword.control.lua</string>
25 </dict>
26 </dict>
27 <key>end</key>
28 <string>(?&lt;=[\)\-{}\[\]"'])</string>
29 <key>name</key>
30 <string>meta.function.lua</string>
31 <key>patterns</key>
32 <array>
33 <dict>
34 <key>include</key>
35 <string>#comment</string>
36 </dict>
37 <dict>
38 <key>begin</key>
39 <string>(\()</string>
40 <key>beginCaptures</key>
41 <dict>
42 <key>1</key>
43 <dict>
44 <key>name</key>
45 <string>punctuation.definition.parameters.begin.lua</string>
46 </dict>
47 </dict>
48 <key>end</key>
49 <string>(\))|(?=[\-\.{}\[\]"'])</string>
50 <key>endCaptures</key>
51 <dict>
52 <key>1</key>
53 <dict>
54 <key>name</key>
55 <string>punctuation.definition.parameters.finish.lua</string>
56 </dict>
57 </dict>
58 <key>name</key>
59 <string>meta.parameter.lua</string>
60 <key>patterns</key>
61 <array>
62 <dict>
63 <key>include</key>
64 <string>#comment</string>
65 </dict>
66 <dict>
67 <key>match</key>
68 <string>[a-zA-Z_][a-zA-Z0-9_]*</string>
69 <key>name</key>
70 <string>variable.parameter.function.lua</string>
71 </dict>
72 <dict>
73 <key>match</key>
74 <string>,</string>
75 <key>name</key>
76 <string>punctuation.separator.arguments.lua</string>
77 </dict>
78 <dict>
79 <key>begin</key>
80 <string>:</string>
81 <key>beginCaptures</key>
82 <dict>
83 <key>0</key>
84 <dict>
85 <key>name</key>
86 <string>punctuation.separator.arguments.lua</string>
87 </dict>
88 </dict>
89 <key>end</key>
90 <string>(?=[\),])</string>
91 <key>patterns</key>
92 <array>
93 <dict>
94 <key>include</key>
95 <string>#emmydoc.type</string>
96 </dict>
97 </array>
98 </dict>
99 </array>
100 </dict>
101 <dict>
102 <key>match</key>
103 <string>\b([a-zA-Z_][a-zA-Z0-9_]*)\b\s*(?=:)</string>
104 <key>name</key>
105 <string>entity.name.class.lua</string>
106 </dict>
107 <dict>
108 <key>match</key>
109 <string>\b([a-zA-Z_][a-zA-Z0-9_]*)\b</string>
110 <key>name</key>
111 <string>entity.name.function.lua</string>
112 </dict>
113 </array>
114 </dict>
115 <dict>
116 <key>match</key>
117 <string>(?&lt;![\w\d.])0[xX][0-9A-Fa-f]+(\.[0-9A-Fa-f]*)?([eE]-?\d*)?([pP][-+]\d+)?</string>
118 <key>name</key>
119 <string>constant.numeric.float.hexadecimal.lua</string>
120 </dict>
121 <dict>
122 <key>match</key>
123 <string>(?&lt;![\w\d.])0[xX]\.[0-9A-Fa-f]+([eE]-?\d*)?([pP][-+]\d+)?</string>
124 <key>name</key>
125 <string>constant.numeric.float.hexadecimal.lua</string>
126 </dict>
127 <dict>
128 <key>match</key>
129 <string>(?&lt;![\w\d.])0[xX][0-9A-Fa-f]+(?![pPeE.0-9])</string>
130 <key>name</key>
131 <string>constant.numeric.integer.hexadecimal.lua</string>
132 </dict>
133 <dict>
134 <key>match</key>
135 <string>(?&lt;![\w\d.])\d+(\.\d*)?([eE]-?\d*)?</string>
136 <key>name</key>
137 <string>constant.numeric.float.lua</string>
138 </dict>
139 <dict>
140 <key>match</key>
141 <string>(?&lt;![\w\d.])\.\d+([eE]-?\d*)?</string>
142 <key>name</key>
143 <string>constant.numeric.float.lua</string>
144 </dict>
145 <dict>
146 <key>match</key>
147 <string>(?&lt;![\w\d.])\d+(?![pPeE.0-9])</string>
148 <key>name</key>
149 <string>constant.numeric.integer.lua</string>
150 </dict>
151 <dict>
152 <key>include</key>
153 <string>#string</string>
154 </dict>
155 <dict>
156 <key>captures</key>
157 <dict>
158 <key>1</key>
159 <dict>
160 <key>name</key>
161 <string>punctuation.definition.comment.lua</string>
162 </dict>
163 </dict>
164 <key>match</key>
165 <string>\A(#!).*$\n?</string>
166 <key>name</key>
167 <string>comment.line.shebang.lua</string>
168 </dict>
169 <dict>
170 <key>include</key>
171 <string>#comment</string>
172 </dict>
173 <dict>
174 <key>captures</key>
175 <dict>
176 <key>1</key>
177 <dict>
178 <key>name</key>
179 <string>keyword.control.goto.lua</string>
180 </dict>
181 <key>2</key>
182 <dict>
183 <key>name</key>
184 <string>string.tag.lua</string>
185 </dict>
186 </dict>
187 <key>match</key>
188 <string>\b(goto)\s+([a-zA-Z_][a-zA-Z0-9_]*)</string>
189 </dict>
190 <dict>
191 <key>captures</key>
192 <dict>
193 <key>1</key>
194 <dict>
195 <key>name</key>
196 <string>punctuation.section.embedded.begin.lua</string>
197 </dict>
198 <key>2</key>
199 <dict>
200 <key>name</key>
201 <string>punctuation.section.embedded.end.lua</string>
202 </dict>
203 </dict>
204 <key>match</key>
205 <string>(::)\s*[a-zA-Z_][a-zA-Z0-9_]*\s*(::)</string>
206 <key>name</key>
207 <string>string.tag.lua</string>
208 </dict>
209 <dict>
210 <key>match</key>
211 <string>&lt;\s*(const|close)\s*&gt;</string>
212 <key>captures</key>
213 <dict>
214 <key>0</key>
215 <dict>
216 <key>name</key>
217 <string>storage.type.attribute.lua</string>
218 </dict>
219 </dict>
220 </dict>
221 <dict>
222 <key>match</key>
223 <string>\&lt;[a-zA-Z_\*][a-zA-Z0-9_\.\*\-]*\&gt;</string>
224 <key>name</key>
225 <string>storage.type.generic.lua</string>
226 </dict>
227 <dict>
228 <key>match</key>
229 <string>\b(break|do|else|for|if|elseif|goto|return|then|repeat|while|until|end|in)\b</string>
230 <key>name</key>
231 <string>keyword.control.lua</string>
232 </dict>
233 <dict>
234 <key>match</key>
235 <string>\b(local)\b</string>
236 <key>name</key>
237 <string>keyword.local.lua</string>
238 </dict>
239 <dict>
240 <key>match</key>
241 <string>\b(function)\b(?![,:])</string>
242 <key>name</key>
243 <string>keyword.control.lua</string>
244 </dict>
245 <dict>
246 <key>match</key>
247 <string>(?&lt;![^.]\.|:)\b(false|nil(?!:)|true|_ENV|_G|_VERSION|math\.(pi|huge|maxinteger|mininteger)|utf8\.charpattern|io\.(stdin|stdout|stderr)|package\.(config|cpath|loaded|loaders|path|preload|searchers))\b|(?&lt;![.])\.{3}(?!\.)</string>
248 <key>name</key>
249 <string>constant.language.lua</string>
250 </dict>
251 <dict>
252 <key>match</key>
253 <string>(?&lt;![^.]\.|:)\b(self)\b</string>
254 <key>name</key>
255 <string>variable.language.self.lua</string>
256 </dict>
257 <dict>
258 <key>match</key>
259 <string>(?&lt;![^.]\.|:)\b(assert|collectgarbage|dofile|error|getfenv|getmetatable|ipairs|load|loadfile|loadstring|module|next|pairs|pcall|print|rawequal|rawget|rawlen|rawset|require|select|setfenv|setmetatable|tonumber|tostring|type|unpack|xpcall)\b(?!\s*=(?!=))</string>
260 <key>name</key>
261 <string>support.function.lua</string>
262 </dict>
263 <dict>
264 <key>match</key>
265 <string>(?&lt;![^.]\.|:)\b(async)\b(?!\s*=(?!=))</string>
266 <key>name</key>
267 <string>entity.name.tag.lua</string>
268 </dict>
269 <dict>
270 <key>match</key>
271 <string>(?&lt;![^.]\.|:)\b(coroutine\.(create|isyieldable|close|resume|running|status|wrap|yield)|string\.(byte|char|dump|find|format|gmatch|gsub|len|lower|match|pack|packsize|rep|reverse|sub|unpack|upper)|table\.(concat|insert|maxn|move|pack|remove|sort|unpack)|math\.(abs|acos|asin|atan2?|ceil|cosh?|deg|exp|floor|fmod|frexp|ldexp|log|log10|max|min|modf|pow|rad|random|randomseed|sinh?|sqrt|tanh?|tointeger|type)|io\.(close|flush|input|lines|open|output|popen|read|tmpfile|type|write)|os\.(clock|date|difftime|execute|exit|getenv|remove|rename|setlocale|time|tmpname)|package\.(loadlib|seeall|searchpath)|debug\.(debug|[gs]etfenv|[gs]ethook|getinfo|[gs]etlocal|[gs]etmetatable|getregistry|[gs]etupvalue|[gs]etuservalue|set[Cc]stacklimit|traceback|upvalueid|upvaluejoin)|bit32\.(arshift|band|bnot|bor|btest|bxor|extract|replace|lrotate|lshift|rrotate|rshift)|utf8\.(char|codes|codepoint|len|offset))\b(?!\s*=(?!=))</string>
272 <key>name</key>
273 <string>support.function.library.lua</string>
274 </dict>
275 <dict>
276 <key>match</key>
277 <string>\b(and|or|not|\|\||\&amp;\&amp;|\!)\b</string>
278 <key>name</key>
279 <string>keyword.operator.lua</string>
280 </dict>
281 <dict>
282 <key>match</key>
283 <string>\b([a-zA-Z_][a-zA-Z0-9_]*)\b(?=\s*(?:[({"']|\[\[))</string>
284 <key>name</key>
285 <string>support.function.any-method.lua</string>
286 </dict>
287 <dict>
288 <key>match</key>
289 <string>\b([a-zA-Z_][a-zA-Z0-9_]*)\b(?=\s*\??:)</string>
290 <key>name</key>
291 <string>entity.name.class.lua</string>
292 </dict>
293 <dict>
294 <key>match</key>
295 <string>(?&lt;=[^.]\.|:)\b([a-zA-Z_][a-zA-Z0-9_]*)\b(?!\s*=\s*\b(function)\b)</string>
296 <key>name</key>
297 <string>entity.other.attribute.lua</string>
298 </dict>
299 <dict>
300 <key>match</key>
301 <string>\b([a-zA-Z_][a-zA-Z0-9_]*)\b(?!\s*=\s*\b(function)\b)</string>
302 <key>name</key>
303 <string>variable.other.lua</string>
304 </dict>
305 <dict>
306 <key>match</key>
307 <string>\b([a-zA-Z_][a-zA-Z0-9_]*)\b(?=\s*=\s*\b(function)\b)</string>
308 <key>name</key>
309 <string>entity.name.function.lua</string>
310 </dict>
311 <dict>
312 <key>match</key>
313 <string>\+|-|%|#|\*|\/|\^|==?|~=|!=|&lt;=?|&gt;=?|(?&lt;!\.)\.{2}(?!\.)</string>
314 <key>name</key>
315 <string>keyword.operator.lua</string>
316 </dict>
317 </array>
318 <key>repository</key>
319 <dict>
320 <key>escaped_char</key>
321 <dict>
322 <key>patterns</key>
323 <array>
324 <dict>
325 <key>match</key>
326 <string>\\[abfnrtv\\"'\n]</string>
327 <key>name</key>
328 <string>constant.character.escape.lua</string>
329 </dict>
330 <dict>
331 <key>match</key>
332 <string>\\z[\n\t ]*</string>
333 <key>name</key>
334 <string>constant.character.escape.lua</string>
335 </dict>
336 <dict>
337 <key>match</key>
338 <string>\\\d{1,3}</string>
339 <key>name</key>
340 <string>constant.character.escape.byte.lua</string>
341 </dict>
342 <dict>
343 <key>match</key>
344 <string>\\x[0-9A-Fa-f][0-9A-Fa-f]</string>
345 <key>name</key>
346 <string>constant.character.escape.byte.lua</string>
347 </dict>
348 <dict>
349 <key>match</key>
350 <string>\\u\{[0-9A-Fa-f]+\}</string>
351 <key>name</key>
352 <string>constant.character.escape.unicode.lua</string>
353 </dict>
354 <dict>
355 <key>match</key>
356 <string>\\.</string>
357 <key>name</key>
358 <string>invalid.illegal.character.escape.lua</string>
359 </dict>
360 </array>
361 </dict>
362 <key>string</key>
363 <dict>
364 <key>patterns</key>
365 <array>
366 <dict>
367 <key>begin</key>
368 <string>'</string>
369 <key>beginCaptures</key>
370 <dict>
371 <key>0</key>
372 <dict>
373 <key>name</key>
374 <string>punctuation.definition.string.begin.lua</string>
375 </dict>
376 </dict>
377 <key>end</key>
378 <string>'[ \t]*|(?=\n)</string>
379 <key>endCaptures</key>
380 <dict>
381 <key>0</key>
382 <dict>
383 <key>name</key>
384 <string>punctuation.definition.string.end.lua</string>
385 </dict>
386 </dict>
387 <key>name</key>
388 <string>string.quoted.single.lua</string>
389 <key>patterns</key>
390 <array>
391 <dict>
392 <key>include</key>
393 <string>#escaped_char</string>
394 </dict>
395 </array>
396 </dict>
397 <dict>
398 <key>begin</key>
399 <string>"</string>
400 <key>beginCaptures</key>
401 <dict>
402 <key>0</key>
403 <dict>
404 <key>name</key>
405 <string>punctuation.definition.string.begin.lua</string>
406 </dict>
407 </dict>
408 <key>end</key>
409 <string>"[ \t]*|(?=\n)</string>
410 <key>endCaptures</key>
411 <dict>
412 <key>0</key>
413 <dict>
414 <key>name</key>
415 <string>punctuation.definition.string.end.lua</string>
416 </dict>
417 </dict>
418 <key>name</key>
419 <string>string.quoted.double.lua</string>
420 <key>patterns</key>
421 <array>
422 <dict>
423 <key>include</key>
424 <string>#escaped_char</string>
425 </dict>
426 </array>
427 </dict>
428 <dict>
429 <key>begin</key>
430 <string>`</string>
431 <key>beginCaptures</key>
432 <dict>
433 <key>0</key>
434 <dict>
435 <key>name</key>
436 <string>punctuation.definition.string.begin.lua</string>
437 </dict>
438 </dict>
439 <key>end</key>
440 <string>`[ \t]*|(?=\n)</string>
441 <key>endCaptures</key>
442 <dict>
443 <key>0</key>
444 <dict>
445 <key>name</key>
446 <string>punctuation.definition.string.end.lua</string>
447 </dict>
448 </dict>
449 <key>name</key>
450 <string>string.quoted.double.lua</string>
451 </dict>
452 <dict>
453 <key>begin</key>
454 <string>(?&lt;=\.cdef)\s*(\[(=*)\[)</string>
455 <key>beginCaptures</key>
456 <dict>
457 <key>0</key>
458 <dict>
459 <key>name</key>
460 <string>string.quoted.other.multiline.lua</string>
461 </dict>
462 <key>1</key>
463 <dict>
464 <key>name</key>
465 <string>punctuation.definition.string.begin.lua</string>
466 </dict>
467 </dict>
468 <key>contentName</key>
469 <string>meta.embedded.lua</string>
470 <key>end</key>
471 <string>(\]\2\])[ \t]*</string>
472 <key>endCaptures</key>
473 <dict>
474 <key>0</key>
475 <dict>
476 <key>name</key>
477 <string>string.quoted.other.multiline.lua</string>
478 </dict>
479 <key>1</key>
480 <dict>
481 <key>name</key>
482 <string>punctuation.definition.string.end.lua</string>
483 </dict>
484 </dict>
485 <key>patterns</key>
486 <array>
487 <dict>
488 <key>include</key>
489 <string>source.c</string>
490 </dict>
491 </array>
492 </dict>
493 <dict>
494 <key>begin</key>
495 <string>(?&lt;!--)\[(=*)\[</string>
496 <key>beginCaptures</key>
497 <dict>
498 <key>0</key>
499 <dict>
500 <key>name</key>
501 <string>punctuation.definition.string.begin.lua</string>
502 </dict>
503 </dict>
504 <key>end</key>
505 <string>\]\1\][ \t]*</string>
506 <key>endCaptures</key>
507 <dict>
508 <key>0</key>
509 <dict>
510 <key>name</key>
511 <string>punctuation.definition.string.end.lua</string>
512 </dict>
513 </dict>
514 <key>name</key>
515 <string>string.quoted.other.multiline.lua</string>
516 </dict>
517 </array>
518 </dict>
519 <key>comment</key>
520 <dict>
521 <key>patterns</key>
522 <array>
523 <dict>
524 <key>begin</key>
525 <string>(^[ \t]+)?(?=--)</string>
526 <key>beginCaptures</key>
527 <dict>
528 <key>1</key>
529 <dict>
530 <key>name</key>
531 <string>punctuation.whitespace.comment.leading.lua</string>
532 </dict>
533 </dict>
534 <key>end</key>
535 <string>(?!\G)((?!^)[ \t]+\n)?</string>
536 <key>endCaptures</key>
537 <dict>
538 <key>1</key>
539 <dict>
540 <key>name</key>
541 <string>punctuation.whitespace.comment.trailing.lua</string>
542 </dict>
543 </dict>
544 <key>patterns</key>
545 <array>
546 <dict>
547 <key>begin</key>
548 <string>--\[(=*)\[@@@</string>
549 <key>beginCaptures</key>
550 <dict>
551 <key>0</key>
552 <dict>
553 <key>name</key>
554 <string>punctuation.definition.comment.begin.lua</string>
555 </dict>
556 </dict>
557 <key>end</key>
558 <string>(--)?\]\1\]</string>
559 <key>endCaptures</key>
560 <dict>
561 <key>0</key>
562 <dict>
563 <key>name</key>
564 <string>punctuation.definition.comment.end.lua</string>
565 </dict>
566 </dict>
567 <key>name</key>
568 <string/>
569 <key>patterns</key>
570 <array>
571 <dict>
572 <key>include</key>
573 <string>source.lua</string>
574 </dict>
575 </array>
576 </dict>
577 <dict>
578 <key>begin</key>
579 <string>--\[(=*)\[</string>
580 <key>beginCaptures</key>
581 <dict>
582 <key>0</key>
583 <dict>
584 <key>name</key>
585 <string>punctuation.definition.comment.begin.lua</string>
586 </dict>
587 </dict>
588 <key>end</key>
589 <string>(--)?\]\1\]</string>
590 <key>endCaptures</key>
591 <dict>
592 <key>0</key>
593 <dict>
594 <key>name</key>
595 <string>punctuation.definition.comment.end.lua</string>
596 </dict>
597 </dict>
598 <key>name</key>
599 <string>comment.block.lua</string>
600 <key>patterns</key>
601 <array>
602 <dict>
603 <key>include</key>
604 <string>#emmydoc</string>
605 </dict>
606 <dict>
607 <key>include</key>
608 <string>#ldoc_tag</string>
609 </dict>
610 </array>
611 </dict>
612 <dict>
613 <key>begin</key>
614 <string>----</string>
615 <key>beginCaptures</key>
616 <dict>
617 <key>0</key>
618 <dict>
619 <key>name</key>
620 <string>punctuation.definition.comment.lua</string>
621 </dict>
622 </dict>
623 <key>end</key>
624 <string>\n</string>
625 <key>name</key>
626 <string>comment.line.double-dash.lua</string>
627 </dict>
628 <dict>
629 <key>begin</key>
630 <string>---</string>
631 <key>beginCaptures</key>
632 <dict>
633 <key>0</key>
634 <dict>
635 <key>name</key>
636 <string>punctuation.definition.comment.lua</string>
637 </dict>
638 </dict>
639 <key>end</key>
640 <string>\n</string>
641 <key>name</key>
642 <string>comment.line.double-dash.documentation.lua</string>
643 <key>patterns</key>
644 <array>
645 <dict>
646 <key>include</key>
647 <string>#emmydoc</string>
648 </dict>
649 <dict>
650 <key>include</key>
651 <string>#ldoc_tag</string>
652 </dict>
653 </array>
654 </dict>
655 <dict>
656 <key>begin</key>
657 <string>--</string>
658 <key>beginCaptures</key>
659 <dict>
660 <key>0</key>
661 <dict>
662 <key>name</key>
663 <string>punctuation.definition.comment.lua</string>
664 </dict>
665 </dict>
666 <key>end</key>
667 <string>\n</string>
668 <key>name</key>
669 <string>comment.line.double-dash.lua</string>
670 <key>patterns</key>
671 <array>
672 <dict>
673 <key>include</key>
674 <string>#ldoc_tag</string>
675 </dict>
676 </array>
677 </dict>
678 </array>
679 </dict>
680 <dict>
681 <key>begin</key>
682 <string>\/\*</string>
683 <key>beginCaptures</key>
684 <dict>
685 <key>0</key>
686 <dict>
687 <key>name</key>
688 <string>punctuation.definition.comment.begin.lua</string>
689 </dict>
690 </dict>
691 <key>end</key>
692 <string>\*\/</string>
693 <key>endCaptures</key>
694 <dict>
695 <key>0</key>
696 <dict>
697 <key>name</key>
698 <string>punctuation.definition.comment.end.lua</string>
699 </dict>
700 </dict>
701 <key>name</key>
702 <string>comment.block.lua</string>
703 <key>patterns</key>
704 <array>
705 <dict>
706 <key>include</key>
707 <string>#emmydoc</string>
708 </dict>
709 <dict>
710 <key>include</key>
711 <string>#ldoc_tag</string>
712 </dict>
713 </array>
714 </dict>
715 </array>
716 </dict>
717 <key>emmydoc</key>
718 <dict>
719 <key>patterns</key>
720 <array>
721 <dict>
722 <key>begin</key>
723 <string>(?&lt;=---)[ \t]*@class</string>
724 <key>beginCaptures</key>
725 <dict>
726 <key>0</key>
727 <dict>
728 <key>name</key>
729 <string>storage.type.annotation.lua</string>
730 </dict>
731 </dict>
732 <key>end</key>
733 <string>(?=[\n@#])</string>
734 <key>patterns</key>
735 <array>
736 <dict>
737 <key>match</key>
738 <string>\b([a-zA-Z_\*][a-zA-Z0-9_\.\*\-]*)</string>
739 <key>name</key>
740 <string>support.class.lua</string>
741 </dict>
742 <dict>
743 <key>match</key>
744 <string>:|,</string>
745 <key>name</key>
746 <string>keyword.operator.lua</string>
747 </dict>
748 </array>
749 </dict>
750 <dict>
751 <key>begin</key>
752 <string>(?&lt;=---)[ \t]*@enum</string>
753 <key>beginCaptures</key>
754 <dict>
755 <key>0</key>
756 <dict>
757 <key>name</key>
758 <string>storage.type.annotation.lua</string>
759 </dict>
760 </dict>
761 <key>end</key>
762 <string>(?=[\n@#])</string>
763 <key>patterns</key>
764 <array>
765 <dict>
766 <key>begin</key>
767 <string>\b([a-zA-Z_\*][a-zA-Z0-9_\.\*\-]*)</string>
768 <key>beginCaptures</key>
769 <dict>
770 <key>0</key>
771 <dict>
772 <key>name</key>
773 <string>variable.lua</string>
774 </dict>
775 </dict>
776 <key>end</key>
777 <string>(?=\n)</string>
778 </dict>
779 </array>
780 </dict>
781 <dict>
782 <key>begin</key>
783 <string>(?&lt;=---)[ \t]*@type</string>
784 <key>beginCaptures</key>
785 <dict>
786 <key>0</key>
787 <dict>
788 <key>name</key>
789 <string>storage.type.annotation.lua</string>
790 </dict>
791 </dict>
792 <key>end</key>
793 <string>(?=[\n@#])</string>
794 <key>patterns</key>
795 <array>
796 <dict>
797 <key>include</key>
798 <string>#emmydoc.type</string>
799 </dict>
800 </array>
801 </dict>
802 <dict>
803 <key>begin</key>
804 <string>(?&lt;=---)[ \t]*@alias</string>
805 <key>beginCaptures</key>
806 <dict>
807 <key>0</key>
808 <dict>
809 <key>name</key>
810 <string>storage.type.annotation.lua</string>
811 </dict>
812 </dict>
813 <key>end</key>
814 <string>(?=[\n@#])</string>
815 <key>patterns</key>
816 <array>
817 <dict>
818 <key>begin</key>
819 <string>\b([a-zA-Z_\*][a-zA-Z0-9_\.\*\-]*)</string>
820 <key>beginCaptures</key>
821 <dict>
822 <key>0</key>
823 <dict>
824 <key>name</key>
825 <string>variable.lua</string>
826 </dict>
827 </dict>
828 <key>end</key>
829 <string>(?=[\n#])</string>
830 <key>patterns</key>
831 <array>
832 <dict>
833 <key>include</key>
834 <string>#emmydoc.type</string>
835 </dict>
836 </array>
837 </dict>
838 </array>
839 </dict>
840 <dict>
841 <key>begin</key>
842 <string>(?&lt;=---)[ \t]*(@operator)\s*(\b[a-z]+)?</string>
843 <key>beginCaptures</key>
844 <dict>
845 <key>1</key>
846 <dict>
847 <key>name</key>
848 <string>storage.type.annotation.lua</string>
849 </dict>
850 <key>2</key>
851 <dict>
852 <key>name</key>
853 <string>support.function.library.lua</string>
854 </dict>
855 </dict>
856 <key>end</key>
857 <string>(?=[\n@#])</string>
858 <key>patterns</key>
859 <array>
860 <dict>
861 <key>include</key>
862 <string>#emmydoc.type</string>
863 </dict>
864 </array>
865 </dict>
866 <dict>
867 <key>begin</key>
868 <string>(?&lt;=---)[ \t]*@cast</string>
869 <key>beginCaptures</key>
870 <dict>
871 <key>0</key>
872 <dict>
873 <key>name</key>
874 <string>storage.type.annotation.lua</string>
875 </dict>
876 </dict>
877 <key>end</key>
878 <string>(?=[\n@#])</string>
879 <key>patterns</key>
880 <array>
881 <dict>
882 <key>begin</key>
883 <string>\b([a-zA-Z_\*][a-zA-Z0-9_\.\*\-]*)</string>
884 <key>beginCaptures</key>
885 <dict>
886 <key>0</key>
887 <dict>
888 <key>name</key>
889 <string>variable.other.lua</string>
890 </dict>
891 </dict>
892 <key>end</key>
893 <string>(?=\n)</string>
894 <key>patterns</key>
895 <array>
896 <dict>
897 <key>include</key>
898 <string>#emmydoc.type</string>
899 </dict>
900 <dict>
901 <key>match</key>
902 <string>([+-|])</string>
903 <key>name</key>
904 <string>keyword.operator.lua</string>
905 </dict>
906 </array>
907 </dict>
908 </array>
909 </dict>
910 <dict>
911 <key>begin</key>
912 <string>(?&lt;=---)[ \t]*@param</string>
913 <key>beginCaptures</key>
914 <dict>
915 <key>0</key>
916 <dict>
917 <key>name</key>
918 <string>storage.type.annotation.lua</string>
919 </dict>
920 </dict>
921 <key>end</key>
922 <string>(?=[\n@#])</string>
923 <key>patterns</key>
924 <array>
925 <dict>
926 <key>begin</key>
927 <string>\b([a-zA-Z_][a-zA-Z0-9_]*)\b(\??)</string>
928 <key>beginCaptures</key>
929 <dict>
930 <key>1</key>
931 <dict>
932 <key>name</key>
933 <string>entity.name.variable.lua</string>
934 </dict>
935 <key>2</key>
936 <dict>
937 <key>name</key>
938 <string>keyword.operator.lua</string>
939 </dict>
940 </dict>
941 <key>end</key>
942 <string>(?=[\n#])</string>
943 <key>patterns</key>
944 <array>
945 <dict>
946 <key>include</key>
947 <string>#emmydoc.type</string>
948 </dict>
949 </array>
950 </dict>
951 </array>
952 </dict>
953 <dict>
954 <key>begin</key>
955 <string>(?&lt;=---)[ \t]*@return</string>
956 <key>beginCaptures</key>
957 <dict>
958 <key>0</key>
959 <dict>
960 <key>name</key>
961 <string>storage.type.annotation.lua</string>
962 </dict>
963 </dict>
964 <key>end</key>
965 <string>(?=[\n@#])</string>
966 <key>patterns</key>
967 <array>
968 <dict>
969 <key>match</key>
970 <string>\?</string>
971 <key>name</key>
972 <string>keyword.operator.lua</string>
973 </dict>
974 <dict>
975 <key>include</key>
976 <string>#emmydoc.type</string>
977 </dict>
978 </array>
979 </dict>
980 <dict>
981 <key>begin</key>
982 <string>(?&lt;=---)[ \t]*@field</string>
983 <key>beginCaptures</key>
984 <dict>
985 <key>0</key>
986 <dict>
987 <key>name</key>
988 <string>storage.type.annotation.lua</string>
989 </dict>
990 </dict>
991 <key>end</key>
992 <string>(?=[\n@#])</string>
993 <key>patterns</key>
994 <array>
995 <dict>
996 <key>begin</key>
997 <string>(\b([a-zA-Z_][a-zA-Z0-9_]*)\b|(\[))(\??)</string>
998 <key>beginCaptures</key>
999 <dict>
1000 <key>2</key>
1001 <dict>
1002 <key>name</key>
1003 <string>entity.name.variable.lua</string>
1004 </dict>
1005 <key>3</key>
1006 <dict>
1007 <key>name</key>
1008 <string>keyword.operator.lua</string>
1009 </dict>
1010 </dict>
1011 <key>end</key>
1012 <string>(?=[\n#])</string>
1013 <key>patterns</key>
1014 <array>
1015 <dict>
1016 <key>include</key>
1017 <string>#string</string>
1018 </dict>
1019 <dict>
1020 <key>include</key>
1021 <string>#emmydoc.type</string>
1022 </dict>
1023 <dict>
1024 <key>match</key>
1025 <string>\]</string>
1026 <key>name</key>
1027 <string>keyword.operator.lua</string>
1028 </dict>
1029 </array>
1030 </dict>
1031 </array>
1032 </dict>
1033 <dict>
1034 <key>begin</key>
1035 <string>(?&lt;=---)[ \t]*@generic</string>
1036 <key>beginCaptures</key>
1037 <dict>
1038 <key>0</key>
1039 <dict>
1040 <key>name</key>
1041 <string>storage.type.annotation.lua</string>
1042 </dict>
1043 </dict>
1044 <key>end</key>
1045 <string>(?=[\n@#])</string>
1046 <key>patterns</key>
1047 <array>
1048 <dict>
1049 <key>begin</key>
1050 <string>\b([a-zA-Z_][a-zA-Z0-9_]*)\b</string>
1051 <key>beginCaptures</key>
1052 <dict>
1053 <key>0</key>
1054 <dict>
1055 <key>name</key>
1056 <string>storage.type.generic.lua</string>
1057 </dict>
1058 </dict>
1059 <key>end</key>
1060 <string>(?=\n)|(,)</string>
1061 <key>endCaptures</key>
1062 <dict>
1063 <key>0</key>
1064 <dict>
1065 <key>name</key>
1066 <string>keyword.operator.lua</string>
1067 </dict>
1068 </dict>
1069 <key>patterns</key>
1070 <array>
1071 <dict>
1072 <key>match</key>
1073 <string>:</string>
1074 <key>name</key>
1075 <string>keyword.operator.lua</string>
1076 </dict>
1077 <dict>
1078 <key>include</key>
1079 <string>#emmydoc.type</string>
1080 </dict>
1081 </array>
1082 </dict>
1083 </array>
1084 </dict>
1085 <dict>
1086 <key>begin</key>
1087 <string>(?&lt;=---)[ \t]*@vararg</string>
1088 <key>beginCaptures</key>
1089 <dict>
1090 <key>0</key>
1091 <dict>
1092 <key>name</key>
1093 <string>storage.type.annotation.lua</string>
1094 </dict>
1095 </dict>
1096 <key>end</key>
1097 <string>(?=[\n@#])</string>
1098 <key>patterns</key>
1099 <array>
1100 <dict>
1101 <key>include</key>
1102 <string>#emmydoc.type</string>
1103 </dict>
1104 </array>
1105 </dict>
1106 <dict>
1107 <key>begin</key>
1108 <string>(?&lt;=---)[ \t]*@overload</string>
1109 <key>beginCaptures</key>
1110 <dict>
1111 <key>0</key>
1112 <dict>
1113 <key>name</key>
1114 <string>storage.type.annotation.lua</string>
1115 </dict>
1116 </dict>
1117 <key>end</key>
1118 <string>(?=[\n@#])</string>
1119 <key>patterns</key>
1120 <array>
1121 <dict>
1122 <key>include</key>
1123 <string>#emmydoc.type</string>
1124 </dict>
1125 </array>
1126 </dict>
1127 <dict>
1128 <key>begin</key>
1129 <string>(?&lt;=---)[ \t]*@deprecated</string>
1130 <key>beginCaptures</key>
1131 <dict>
1132 <key>0</key>
1133 <dict>
1134 <key>name</key>
1135 <string>storage.type.annotation.lua</string>
1136 </dict>
1137 </dict>
1138 <key>end</key>
1139 <string>(?=[\n@#])</string>
1140 </dict>
1141 <dict>
1142 <key>begin</key>
1143 <string>(?&lt;=---)[ \t]*@meta</string>
1144 <key>beginCaptures</key>
1145 <dict>
1146 <key>0</key>
1147 <dict>
1148 <key>name</key>
1149 <string>storage.type.annotation.lua</string>
1150 </dict>
1151 </dict>
1152 <key>end</key>
1153 <string>(?=[\n@#])</string>
1154 </dict>
1155 <dict>
1156 <key>begin</key>
1157 <string>(?&lt;=---)[ \t]*@private</string>
1158 <key>beginCaptures</key>
1159 <dict>
1160 <key>0</key>
1161 <dict>
1162 <key>name</key>
1163 <string>storage.type.annotation.lua</string>
1164 </dict>
1165 </dict>
1166 <key>end</key>
1167 <string>(?=[\n@#])</string>
1168 </dict>
1169 <dict>
1170 <key>begin</key>
1171 <string>(?&lt;=---)[ \t]*@protected</string>
1172 <key>beginCaptures</key>
1173 <dict>
1174 <key>0</key>
1175 <dict>
1176 <key>name</key>
1177 <string>storage.type.annotation.lua</string>
1178 </dict>
1179 </dict>
1180 <key>end</key>
1181 <string>(?=[\n@#])</string>
1182 </dict>
1183 <dict>
1184 <key>begin</key>
1185 <string>(?&lt;=---)[ \t]*@package</string>
1186 <key>beginCaptures</key>
1187 <dict>
1188 <key>0</key>
1189 <dict>
1190 <key>name</key>
1191 <string>storage.type.annotation.lua</string>
1192 </dict>
1193 </dict>
1194 <key>end</key>
1195 <string>(?=[\n@#])</string>
1196 </dict>
1197 <dict>
1198 <key>begin</key>
1199 <string>(?&lt;=---)[ \t]*@version</string>
1200 <key>beginCaptures</key>
1201 <dict>
1202 <key>0</key>
1203 <dict>
1204 <key>name</key>
1205 <string>storage.type.annotation.lua</string>
1206 </dict>
1207 </dict>
1208 <key>end</key>
1209 <string>(?=[\n@#])</string>
1210 <key>patterns</key>
1211 <array>
1212 <dict>
1213 <key>match</key>
1214 <string>\b(5\.1|5\.2|5\.3|5\.4|JIT)\b</string>
1215 <key>name</key>
1216 <string>support.class.lua</string>
1217 </dict>
1218 <dict>
1219 <key>match</key>
1220 <string>,|\&gt;|\&lt;</string>
1221 <key>name</key>
1222 <string>keyword.operator.lua</string>
1223 </dict>
1224 </array>
1225 </dict>
1226 <dict>
1227 <key>begin</key>
1228 <string>(?&lt;=---)[ \t]*@see</string>
1229 <key>beginCaptures</key>
1230 <dict>
1231 <key>0</key>
1232 <dict>
1233 <key>name</key>
1234 <string>storage.type.annotation.lua</string>
1235 </dict>
1236 </dict>
1237 <key>end</key>
1238 <string>(?=[\n@#])</string>
1239 <key>patterns</key>
1240 <array>
1241 <dict>
1242 <key>match</key>
1243 <string>\b([a-zA-Z_\*][a-zA-Z0-9_\.\*\-]*)</string>
1244 <key>name</key>
1245 <string>support.class.lua</string>
1246 </dict>
1247 <dict>
1248 <key>match</key>
1249 <string>#</string>
1250 <key>name</key>
1251 <string>keyword.operator.lua</string>
1252 </dict>
1253 </array>
1254 </dict>
1255 <dict>
1256 <key>begin</key>
1257 <string>(?&lt;=---)[ \t]*@diagnostic</string>
1258 <key>beginCaptures</key>
1259 <dict>
1260 <key>0</key>
1261 <dict>
1262 <key>name</key>
1263 <string>storage.type.annotation.lua</string>
1264 </dict>
1265 </dict>
1266 <key>end</key>
1267 <string>(?=[\n@#])</string>
1268 <key>patterns</key>
1269 <array>
1270 <dict>
1271 <key>begin</key>
1272 <string>([a-zA-Z_\-0-9]+)[ \t]*(:)?</string>
1273 <key>beginCaptures</key>
1274 <dict>
1275 <key>1</key>
1276 <dict>
1277 <key>name</key>
1278 <string>keyword.other.unit</string>
1279 </dict>
1280 <key>2</key>
1281 <dict>
1282 <key>name</key>
1283 <string>keyword.operator.unit</string>
1284 </dict>
1285 </dict>
1286 <key>end</key>
1287 <string>(?=\n)</string>
1288 <key>patterns</key>
1289 <array>
1290 <dict>
1291 <key>match</key>
1292 <string>\b([a-zA-Z_\*][a-zA-Z0-9_\-]*)</string>
1293 <key>name</key>
1294 <string>support.class.lua</string>
1295 </dict>
1296 <dict>
1297 <key>match</key>
1298 <string>,</string>
1299 <key>name</key>
1300 <string>keyword.operator.lua</string>
1301 </dict>
1302 </array>
1303 </dict>
1304 </array>
1305 </dict>
1306 <dict>
1307 <key>begin</key>
1308 <string>(?&lt;=---)[ \t]*@module</string>
1309 <key>beginCaptures</key>
1310 <dict>
1311 <key>0</key>
1312 <dict>
1313 <key>name</key>
1314 <string>storage.type.annotation.lua</string>
1315 </dict>
1316 </dict>
1317 <key>end</key>
1318 <string>(?=[\n@#])</string>
1319 <key>patterns</key>
1320 <array>
1321 <dict>
1322 <key>include</key>
1323 <string>#string</string>
1324 </dict>
1325 </array>
1326 </dict>
1327 <dict>
1328 <key>match</key>
1329 <string>(?&lt;=---)[ \t]*@(async|nodiscard)</string>
1330 <key>name</key>
1331 <string>storage.type.annotation.lua</string>
1332 </dict>
1333 <dict>
1334 <key>begin</key>
1335 <string>(?&lt;=---)\|\s*[\&gt;\+]?</string>
1336 <key>beginCaptures</key>
1337 <dict>
1338 <key>0</key>
1339 <dict>
1340 <key>name</key>
1341 <string>storage.type.annotation.lua</string>
1342 </dict>
1343 </dict>
1344 <key>end</key>
1345 <string>(?=[\n@#])</string>
1346 <key>patterns</key>
1347 <array>
1348 <dict>
1349 <key>include</key>
1350 <string>#string</string>
1351 </dict>
1352 </array>
1353 </dict>
1354 </array>
1355 </dict>
1356 <key>emmydoc.type</key>
1357 <dict>
1358 <key>patterns</key>
1359 <array>
1360 <dict>
1361 <key>begin</key>
1362 <string>\bfun\b</string>
1363 <key>beginCaptures</key>
1364 <dict>
1365 <key>0</key>
1366 <dict>
1367 <key>name</key>
1368 <string>keyword.control.lua</string>
1369 </dict>
1370 </dict>
1371 <key>end</key>
1372 <string>(?=[\s#])</string>
1373 <key>patterns</key>
1374 <array>
1375 <dict>
1376 <key>match</key>
1377 <string>[\(\),:\?][ \t]*</string>
1378 <key>name</key>
1379 <string>keyword.operator.lua</string>
1380 </dict>
1381 <dict>
1382 <key>match</key>
1383 <string>([a-zA-Z_][a-zA-Z0-9_\.\*\[\]\&lt;\&gt;\,\-]*)(?&lt;!,)[ \t]*(?=\??:)</string>
1384 <key>name</key>
1385 <string>entity.name.variable.lua</string>
1386 </dict>
1387 <dict>
1388 <key>include</key>
1389 <string>#emmydoc.type</string>
1390 </dict>
1391 <dict>
1392 <key>include</key>
1393 <string>#string</string>
1394 </dict>
1395 </array>
1396 </dict>
1397 <dict>
1398 <key>match</key>
1399 <string>\&lt;[a-zA-Z_\*][a-zA-Z0-9_\.\*\-]*\&gt;</string>
1400 <key>name</key>
1401 <string>storage.type.generic.lua</string>
1402 </dict>
1403 <dict>
1404 <key>match</key>
1405 <string>\basync\b</string>
1406 <key>name</key>
1407 <string>entity.name.tag.lua</string>
1408 </dict>
1409 <dict>
1410 <key>match</key>
1411 <string>[\{\}\:\,\?\|\`][ \t]*</string>
1412 <key>name</key>
1413 <string>keyword.operator.lua</string>
1414 </dict>
1415 <dict>
1416 <key>begin</key>
1417 <string>(?=[a-zA-Z_\.\*"'\[])</string>
1418 <key>end</key>
1419 <string>(?=[\s\)\,\?\:\}\|#])</string>
1420 <key>patterns</key>
1421 <array>
1422 <dict>
1423 <key>match</key>
1424 <string>([a-zA-Z0-9_\.\*\[\]\&lt;\&gt;\,\-]+)(?&lt;!,)[ \t]*</string>
1425 <key>name</key>
1426 <string>support.type.lua</string>
1427 </dict>
1428 <dict>
1429 <key>match</key>
1430 <string>(\.\.\.)[ \t]*</string>
1431 <key>name</key>
1432 <string>constant.language.lua</string>
1433 </dict>
1434 <dict>
1435 <key>include</key>
1436 <string>#string</string>
1437 </dict>
1438 </array>
1439 </dict>
1440 </array>
1441 </dict>
1442 <key>ldoc_tag</key>
1443 <dict>
1444 <key>match</key>
1445 <string>\G[ \t]*(@)(alias|annotation|author|charset|class|classmod|comment|constructor|copyright|description|example|export|factory|field|file|fixme|function|include|lfunction|license|local|module|name|param|pragma|private|raise|release|return|script|section|see|set|static|submodule|summary|tfield|thread|tparam|treturn|todo|topic|type|usage|warning|within)\b</string>
1446 <key>captures</key>
1447 <dict>
1448 <key>1</key>
1449 <dict>
1450 <key>name</key>
1451 <string>punctuation.definition.block.tag.ldoc</string>
1452 </dict>
1453 <key>2</key>
1454 <dict>
1455 <key>name</key>
1456 <string>storage.type.class.ldoc</string>
1457 </dict>
1458 </dict>
1459 </dict>
1460 </dict>
1461 </dict>
1462</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/mdx.plist created+9527
......@@ -0,0 +1,9527 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4 <dict>
5 <key>fileTypes</key>
6 <array>
7 <string>mdx</string>
8 </array>
9 <key>name</key>
10 <string>MDX</string>
11 <key>patterns</key>
12 <array>
13 <dict>
14 <key>include</key>
15 <string>#markdown-frontmatter</string>
16 </dict>
17 <dict>
18 <key>include</key>
19 <string>#markdown-sections</string>
20 </dict>
21 </array>
22 <key>repository</key>
23 <dict>
24 <key>markdown-frontmatter</key>
25 <dict>
26 <key>patterns</key>
27 <array>
28 <dict>
29 <key>include</key>
30 <string>#extension-toml</string>
31 </dict>
32 <dict>
33 <key>include</key>
34 <string>#extension-yaml</string>
35 </dict>
36 </array>
37 </dict>
38 <key>markdown-sections</key>
39 <dict>
40 <key>patterns</key>
41 <array>
42 <dict>
43 <key>include</key>
44 <string>#commonmark-block-quote</string>
45 </dict>
46 <dict>
47 <key>include</key>
48 <string>#commonmark-code-fenced</string>
49 </dict>
50 <dict>
51 <key>include</key>
52 <string>#extension-gfm-footnote-definition</string>
53 </dict>
54 <dict>
55 <key>include</key>
56 <string>#commonmark-definition</string>
57 </dict>
58 <dict>
59 <key>include</key>
60 <string>#commonmark-heading-atx</string>
61 </dict>
62 <dict>
63 <key>include</key>
64 <string>#commonmark-thematic-break</string>
65 </dict>
66 <dict>
67 <key>include</key>
68 <string>#commonmark-heading-setext</string>
69 </dict>
70 <dict>
71 <key>include</key>
72 <string>#commonmark-list-item</string>
73 </dict>
74 <dict>
75 <key>include</key>
76 <string>#extension-gfm-table</string>
77 </dict>
78 <dict>
79 <key>include</key>
80 <string>#extension-math-flow</string>
81 </dict>
82 <dict>
83 <key>include</key>
84 <string>#extension-mdx-esm</string>
85 </dict>
86 <dict>
87 <key>include</key>
88 <string>#extension-mdx-expression-flow</string>
89 </dict>
90 <dict>
91 <key>include</key>
92 <string>#extension-mdx-jsx-flow</string>
93 </dict>
94 <dict>
95 <key>include</key>
96 <string>#commonmark-paragraph</string>
97 </dict>
98 </array>
99 </dict>
100 <key>markdown-string</key>
101 <dict>
102 <key>patterns</key>
103 <array>
104 <dict>
105 <key>include</key>
106 <string>#commonmark-character-escape</string>
107 </dict>
108 <dict>
109 <key>include</key>
110 <string>#commonmark-character-reference</string>
111 </dict>
112 </array>
113 </dict>
114 <key>markdown-text</key>
115 <dict>
116 <key>patterns</key>
117 <array>
118 <dict>
119 <key>include</key>
120 <string>#commonmark-attention</string>
121 </dict>
122 <dict>
123 <key>include</key>
124 <string>#commonmark-character-escape</string>
125 </dict>
126 <dict>
127 <key>include</key>
128 <string>#commonmark-character-reference</string>
129 </dict>
130 <dict>
131 <key>include</key>
132 <string>#commonmark-code-text</string>
133 </dict>
134 <dict>
135 <key>include</key>
136 <string>#commonmark-hard-break-trailing</string>
137 </dict>
138 <dict>
139 <key>include</key>
140 <string>#commonmark-hard-break-escape</string>
141 </dict>
142 <dict>
143 <key>include</key>
144 <string>#commonmark-label-end</string>
145 </dict>
146 <dict>
147 <key>include</key>
148 <string>#extension-gfm-footnote-call</string>
149 </dict>
150 <dict>
151 <key>include</key>
152 <string>#commonmark-label-start</string>
153 </dict>
154 <dict>
155 <key>include</key>
156 <string>#extension-gfm-autolink-literal</string>
157 </dict>
158 <dict>
159 <key>include</key>
160 <string>#extension-gfm-strikethrough</string>
161 </dict>
162 <dict>
163 <key>include</key>
164 <string>#extension-github-gemoji</string>
165 </dict>
166 <dict>
167 <key>include</key>
168 <string>#extension-github-mention</string>
169 </dict>
170 <dict>
171 <key>include</key>
172 <string>#extension-github-reference</string>
173 </dict>
174 <dict>
175 <key>include</key>
176 <string>#extension-math-text</string>
177 </dict>
178 <dict>
179 <key>include</key>
180 <string>#extension-mdx-expression-text</string>
181 </dict>
182 <dict>
183 <key>include</key>
184 <string>#extension-mdx-jsx-text</string>
185 </dict>
186 </array>
187 </dict>
188 <key>commonmark-attention</key>
189 <dict>
190 <key>patterns</key>
191 <array>
192 <dict>
193 <key>match</key>
194 <string>(?&lt;=\S)\*{3,}|\*{3,}(?=\S)</string>
195 <key>name</key>
196 <string>string.other.strong.emphasis.asterisk.mdx</string>
197 </dict>
198 <dict>
199 <key>match</key>
200 <string>(?&lt;=[\p{L}\p{N}])_{3,}(?![\p{L}\p{N}])|(?&lt;=\p{P})_{3,}|(?&lt;![\p{L}\p{N}]|\p{P})_{3,}(?!\s)</string>
201 <key>name</key>
202 <string>string.other.strong.emphasis.underscore.mdx</string>
203 </dict>
204 <dict>
205 <key>match</key>
206 <string>(?&lt;=\S)\*{2}|\*{2}(?=\S)</string>
207 <key>name</key>
208 <string>string.other.strong.asterisk.mdx</string>
209 </dict>
210 <dict>
211 <key>match</key>
212 <string>(?&lt;=[\p{L}\p{N}])_{2}(?![\p{L}\p{N}])|(?&lt;=\p{P})_{2}|(?&lt;![\p{L}\p{N}]|\p{P})_{2}(?!\s)</string>
213 <key>name</key>
214 <string>string.other.strong.underscore.mdx</string>
215 </dict>
216 <dict>
217 <key>match</key>
218 <string>(?&lt;=\S)\*|\*(?=\S)</string>
219 <key>name</key>
220 <string>string.other.emphasis.asterisk.mdx</string>
221 </dict>
222 <dict>
223 <key>match</key>
224 <string>(?&lt;=[\p{L}\p{N}])_(?![\p{L}\p{N}])|(?&lt;=\p{P})_|(?&lt;![\p{L}\p{N}]|\p{P})_(?!\s)</string>
225 <key>name</key>
226 <string>string.other.emphasis.underscore.mdx</string>
227 </dict>
228 </array>
229 </dict>
230 <key>commonmark-block-quote</key>
231 <dict>
232 <key>begin</key>
233 <string>(?:^|\G)[\t ]*(&gt;)[ ]?</string>
234 <key>beginCaptures</key>
235 <dict>
236 <key>0</key>
237 <dict>
238 <key>name</key>
239 <string>markup.quote.mdx</string>
240 </dict>
241 <key>1</key>
242 <dict>
243 <key>name</key>
244 <string>punctuation.definition.quote.begin.mdx</string>
245 </dict>
246 </dict>
247 <key>patterns</key>
248 <array>
249 <dict>
250 <key>include</key>
251 <string>#markdown-sections</string>
252 </dict>
253 </array>
254 <key>name</key>
255 <string>markup.quote.mdx</string>
256 <key>while</key>
257 <string>(&gt;)[ ]?</string>
258 <key>whileCaptures</key>
259 <dict>
260 <key>0</key>
261 <dict>
262 <key>name</key>
263 <string>markup.quote.mdx</string>
264 </dict>
265 <key>1</key>
266 <dict>
267 <key>name</key>
268 <string>punctuation.definition.quote.begin.mdx</string>
269 </dict>
270 </dict>
271 </dict>
272 <key>commonmark-character-escape</key>
273 <dict>
274 <key>match</key>
275 <string>\\(?:[!"#$%&amp;'()*+,\-.\/:;&lt;=&gt;?@\[\\\]^_`{|}~])</string>
276 <key>name</key>
277 <string>constant.language.character-escape.mdx</string>
278 </dict>
279 <key>commonmark-character-reference</key>
280 <dict>
281 <key>patterns</key>
282 <array>
283 <dict>
284 <key>include</key>
285 <string>#whatwg-html-data-character-reference-named-terminated</string>
286 </dict>
287 <dict>
288 <key>match</key>
289 <string>(&amp;)(#)([Xx])([0-9A-Fa-f]{1,6})(;)</string>
290 <key>name</key>
291 <string>constant.language.character-reference.numeric.hexadecimal.html</string>
292 <key>captures</key>
293 <dict>
294 <key>1</key>
295 <dict>
296 <key>name</key>
297 <string>punctuation.definition.character-reference.begin.html</string>
298 </dict>
299 <key>2</key>
300 <dict>
301 <key>name</key>
302 <string>punctuation.definition.character-reference.numeric.html</string>
303 </dict>
304 <key>3</key>
305 <dict>
306 <key>name</key>
307 <string>punctuation.definition.character-reference.numeric.hexadecimal.html</string>
308 </dict>
309 <key>4</key>
310 <dict>
311 <key>name</key>
312 <string>constant.numeric.integer.hexadecimal.html</string>
313 </dict>
314 <key>5</key>
315 <dict>
316 <key>name</key>
317 <string>punctuation.definition.character-reference.end.html</string>
318 </dict>
319 </dict>
320 </dict>
321 <dict>
322 <key>match</key>
323 <string>(&amp;)(#)([0-9]{1,7})(;)</string>
324 <key>name</key>
325 <string>constant.language.character-reference.numeric.decimal.html</string>
326 <key>captures</key>
327 <dict>
328 <key>1</key>
329 <dict>
330 <key>name</key>
331 <string>punctuation.definition.character-reference.begin.html</string>
332 </dict>
333 <key>2</key>
334 <dict>
335 <key>name</key>
336 <string>punctuation.definition.character-reference.numeric.html</string>
337 </dict>
338 <key>3</key>
339 <dict>
340 <key>name</key>
341 <string>constant.numeric.integer.decimal.html</string>
342 </dict>
343 <key>4</key>
344 <dict>
345 <key>name</key>
346 <string>punctuation.definition.character-reference.end.html</string>
347 </dict>
348 </dict>
349 </dict>
350 </array>
351 </dict>
352 <key>commonmark-code-fenced</key>
353 <dict>
354 <key>patterns</key>
355 <array>
356 <dict>
357 <key>include</key>
358 <string>#commonmark-code-fenced-apib</string>
359 </dict>
360 <dict>
361 <key>include</key>
362 <string>#commonmark-code-fenced-asciidoc</string>
363 </dict>
364 <dict>
365 <key>include</key>
366 <string>#commonmark-code-fenced-c</string>
367 </dict>
368 <dict>
369 <key>include</key>
370 <string>#commonmark-code-fenced-clojure</string>
371 </dict>
372 <dict>
373 <key>include</key>
374 <string>#commonmark-code-fenced-coffee</string>
375 </dict>
376 <dict>
377 <key>include</key>
378 <string>#commonmark-code-fenced-console</string>
379 </dict>
380 <dict>
381 <key>include</key>
382 <string>#commonmark-code-fenced-cpp</string>
383 </dict>
384 <dict>
385 <key>include</key>
386 <string>#commonmark-code-fenced-cs</string>
387 </dict>
388 <dict>
389 <key>include</key>
390 <string>#commonmark-code-fenced-css</string>
391 </dict>
392 <dict>
393 <key>include</key>
394 <string>#commonmark-code-fenced-diff</string>
395 </dict>
396 <dict>
397 <key>include</key>
398 <string>#commonmark-code-fenced-dockerfile</string>
399 </dict>
400 <dict>
401 <key>include</key>
402 <string>#commonmark-code-fenced-elixir</string>
403 </dict>
404 <dict>
405 <key>include</key>
406 <string>#commonmark-code-fenced-elm</string>
407 </dict>
408 <dict>
409 <key>include</key>
410 <string>#commonmark-code-fenced-erlang</string>
411 </dict>
412 <dict>
413 <key>include</key>
414 <string>#commonmark-code-fenced-gitconfig</string>
415 </dict>
416 <dict>
417 <key>include</key>
418 <string>#commonmark-code-fenced-go</string>
419 </dict>
420 <dict>
421 <key>include</key>
422 <string>#commonmark-code-fenced-graphql</string>
423 </dict>
424 <dict>
425 <key>include</key>
426 <string>#commonmark-code-fenced-haskell</string>
427 </dict>
428 <dict>
429 <key>include</key>
430 <string>#commonmark-code-fenced-html</string>
431 </dict>
432 <dict>
433 <key>include</key>
434 <string>#commonmark-code-fenced-ini</string>
435 </dict>
436 <dict>
437 <key>include</key>
438 <string>#commonmark-code-fenced-java</string>
439 </dict>
440 <dict>
441 <key>include</key>
442 <string>#commonmark-code-fenced-js</string>
443 </dict>
444 <dict>
445 <key>include</key>
446 <string>#commonmark-code-fenced-json</string>
447 </dict>
448 <dict>
449 <key>include</key>
450 <string>#commonmark-code-fenced-julia</string>
451 </dict>
452 <dict>
453 <key>include</key>
454 <string>#commonmark-code-fenced-kotlin</string>
455 </dict>
456 <dict>
457 <key>include</key>
458 <string>#commonmark-code-fenced-less</string>
459 </dict>
460 <dict>
461 <key>include</key>
462 <string>#commonmark-code-fenced-less</string>
463 </dict>
464 <dict>
465 <key>include</key>
466 <string>#commonmark-code-fenced-lua</string>
467 </dict>
468 <dict>
469 <key>include</key>
470 <string>#commonmark-code-fenced-makefile</string>
471 </dict>
472 <dict>
473 <key>include</key>
474 <string>#commonmark-code-fenced-md</string>
475 </dict>
476 <dict>
477 <key>include</key>
478 <string>#commonmark-code-fenced-mdx</string>
479 </dict>
480 <dict>
481 <key>include</key>
482 <string>#commonmark-code-fenced-objc</string>
483 </dict>
484 <dict>
485 <key>include</key>
486 <string>#commonmark-code-fenced-perl</string>
487 </dict>
488 <dict>
489 <key>include</key>
490 <string>#commonmark-code-fenced-php</string>
491 </dict>
492 <dict>
493 <key>include</key>
494 <string>#commonmark-code-fenced-php</string>
495 </dict>
496 <dict>
497 <key>include</key>
498 <string>#commonmark-code-fenced-python</string>
499 </dict>
500 <dict>
501 <key>include</key>
502 <string>#commonmark-code-fenced-r</string>
503 </dict>
504 <dict>
505 <key>include</key>
506 <string>#commonmark-code-fenced-raku</string>
507 </dict>
508 <dict>
509 <key>include</key>
510 <string>#commonmark-code-fenced-ruby</string>
511 </dict>
512 <dict>
513 <key>include</key>
514 <string>#commonmark-code-fenced-rust</string>
515 </dict>
516 <dict>
517 <key>include</key>
518 <string>#commonmark-code-fenced-scala</string>
519 </dict>
520 <dict>
521 <key>include</key>
522 <string>#commonmark-code-fenced-scss</string>
523 </dict>
524 <dict>
525 <key>include</key>
526 <string>#commonmark-code-fenced-shell</string>
527 </dict>
528 <dict>
529 <key>include</key>
530 <string>#commonmark-code-fenced-shell-session</string>
531 </dict>
532 <dict>
533 <key>include</key>
534 <string>#commonmark-code-fenced-sql</string>
535 </dict>
536 <dict>
537 <key>include</key>
538 <string>#commonmark-code-fenced-svg</string>
539 </dict>
540 <dict>
541 <key>include</key>
542 <string>#commonmark-code-fenced-swift</string>
543 </dict>
544 <dict>
545 <key>include</key>
546 <string>#commonmark-code-fenced-toml</string>
547 </dict>
548 <dict>
549 <key>include</key>
550 <string>#commonmark-code-fenced-ts</string>
551 </dict>
552 <dict>
553 <key>include</key>
554 <string>#commonmark-code-fenced-tsx</string>
555 </dict>
556 <dict>
557 <key>include</key>
558 <string>#commonmark-code-fenced-vbnet</string>
559 </dict>
560 <dict>
561 <key>include</key>
562 <string>#commonmark-code-fenced-xml</string>
563 </dict>
564 <dict>
565 <key>include</key>
566 <string>#commonmark-code-fenced-yaml</string>
567 </dict>
568 <dict>
569 <key>include</key>
570 <string>#commonmark-code-fenced-unknown</string>
571 </dict>
572 </array>
573 </dict>
574 <key>commonmark-code-fenced-unknown</key>
575 <dict>
576 <key>patterns</key>
577 <array>
578 <dict>
579 <key>begin</key>
580 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?:[^\t\n\r` ])+)(?:[\t ]+((?:[^\n\r`])+))?)?(?:[\t ]*$)</string>
581 <key>beginCaptures</key>
582 <dict>
583 <key>1</key>
584 <dict>
585 <key>name</key>
586 <string>string.other.begin.code.fenced.mdx</string>
587 </dict>
588 <key>2</key>
589 <dict>
590 <key>name</key>
591 <string>entity.name.function.mdx</string>
592 <key>patterns</key>
593 <array>
594 <dict>
595 <key>include</key>
596 <string>#markdown-string</string>
597 </dict>
598 </array>
599 </dict>
600 <key>3</key>
601 <dict>
602 <key>patterns</key>
603 <array>
604 <dict>
605 <key>include</key>
606 <string>#markdown-string</string>
607 </dict>
608 </array>
609 </dict>
610 </dict>
611 <key>contentName</key>
612 <string>markup.raw.code.fenced.mdx</string>
613 <key>end</key>
614 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
615 <key>endCaptures</key>
616 <dict>
617 <key>1</key>
618 <dict>
619 <key>name</key>
620 <string>string.other.end.code.fenced.mdx</string>
621 </dict>
622 </dict>
623 <key>name</key>
624 <string>markup.code.other.mdx</string>
625 </dict>
626 <dict>
627 <key>begin</key>
628 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?:[^\t\n\r ])+)(?:[\t ]+((?:[^\n\r])+))?)?(?:[\t ]*$)</string>
629 <key>beginCaptures</key>
630 <dict>
631 <key>1</key>
632 <dict>
633 <key>name</key>
634 <string>string.other.begin.code.fenced.mdx</string>
635 </dict>
636 <key>2</key>
637 <dict>
638 <key>name</key>
639 <string>entity.name.function.mdx</string>
640 <key>patterns</key>
641 <array>
642 <dict>
643 <key>include</key>
644 <string>#markdown-string</string>
645 </dict>
646 </array>
647 </dict>
648 <key>3</key>
649 <dict>
650 <key>patterns</key>
651 <array>
652 <dict>
653 <key>include</key>
654 <string>#markdown-string</string>
655 </dict>
656 </array>
657 </dict>
658 </dict>
659 <key>contentName</key>
660 <string>markup.raw.code.fenced.mdx</string>
661 <key>end</key>
662 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
663 <key>endCaptures</key>
664 <dict>
665 <key>1</key>
666 <dict>
667 <key>name</key>
668 <string>string.other.end.code.fenced.mdx</string>
669 </dict>
670 </dict>
671 <key>name</key>
672 <string>markup.code.other.mdx</string>
673 </dict>
674 </array>
675 </dict>
676 <key>commonmark-code-text</key>
677 <dict>
678 <key>match</key>
679 <string>(?&lt;!`)(`+)(?!`)(.+?)(?&lt;!`)(\1)(?!`)</string>
680 <key>name</key>
681 <string>markup.code.other.mdx</string>
682 <key>captures</key>
683 <dict>
684 <key>1</key>
685 <dict>
686 <key>name</key>
687 <string>string.other.begin.code.mdx</string>
688 </dict>
689 <key>2</key>
690 <dict>
691 <key>name</key>
692 <string>markup.raw.code.mdx markup.inline.raw.code.mdx</string>
693 </dict>
694 <key>3</key>
695 <dict>
696 <key>name</key>
697 <string>string.other.end.code.mdx</string>
698 </dict>
699 </dict>
700 </dict>
701 <key>commonmark-definition</key>
702 <dict>
703 <key>match</key>
704 <string>(?:^|\G)[\t ]*(\[)((?:[^\[\\\]]|\\[\[\\\]]?)+?)(\])(:)[ \t]*(?:(&lt;)((?:[^\n&lt;\\&gt;]|\\[&lt;\\&gt;]?)*)(&gt;)|(\g&lt;destination_raw&gt;))(?:[\t ]+(?:(")((?:[^"\\]|\\["\\]?)*)(")|(')((?:[^'\\]|\\['\\]?)*)(')|(\()((?:[^\)\\]|\\[\)\\]?)*)(\))))?$(?&lt;destination_raw&gt;(?!\&lt;)(?:(?:[^\p{Cc}\ \\\(\)]|\\[\(\)\\]?)|\(\g&lt;destination_raw&gt;*\))+){0}</string>
705 <key>name</key>
706 <string>meta.link.reference.def.mdx</string>
707 <key>captures</key>
708 <dict>
709 <key>1</key>
710 <dict>
711 <key>name</key>
712 <string>string.other.begin.mdx</string>
713 </dict>
714 <key>2</key>
715 <dict>
716 <key>name</key>
717 <string>entity.name.identifier.mdx</string>
718 <key>patterns</key>
719 <array>
720 <dict>
721 <key>include</key>
722 <string>#markdown-string</string>
723 </dict>
724 </array>
725 </dict>
726 <key>3</key>
727 <dict>
728 <key>name</key>
729 <string>string.other.end.mdx</string>
730 </dict>
731 <key>4</key>
732 <dict>
733 <key>name</key>
734 <string>punctuation.separator.key-value.mdx</string>
735 </dict>
736 <key>5</key>
737 <dict>
738 <key>name</key>
739 <string>string.other.begin.destination.mdx</string>
740 </dict>
741 <key>6</key>
742 <dict>
743 <key>name</key>
744 <string>string.other.link.destination.mdx</string>
745 <key>patterns</key>
746 <array>
747 <dict>
748 <key>include</key>
749 <string>#markdown-string</string>
750 </dict>
751 </array>
752 </dict>
753 <key>7</key>
754 <dict>
755 <key>name</key>
756 <string>string.other.end.destination.mdx</string>
757 </dict>
758 <key>8</key>
759 <dict>
760 <key>name</key>
761 <string>string.other.link.destination.mdx</string>
762 <key>patterns</key>
763 <array>
764 <dict>
765 <key>include</key>
766 <string>#markdown-string</string>
767 </dict>
768 </array>
769 </dict>
770 <key>9</key>
771 <dict>
772 <key>name</key>
773 <string>string.other.begin.mdx</string>
774 </dict>
775 <key>10</key>
776 <dict>
777 <key>name</key>
778 <string>string.quoted.double.mdx</string>
779 <key>patterns</key>
780 <array>
781 <dict>
782 <key>include</key>
783 <string>#markdown-string</string>
784 </dict>
785 </array>
786 </dict>
787 <key>11</key>
788 <dict>
789 <key>name</key>
790 <string>string.other.end.mdx</string>
791 </dict>
792 <key>12</key>
793 <dict>
794 <key>name</key>
795 <string>string.other.begin.mdx</string>
796 </dict>
797 <key>13</key>
798 <dict>
799 <key>name</key>
800 <string>string.quoted.single.mdx</string>
801 <key>patterns</key>
802 <array>
803 <dict>
804 <key>include</key>
805 <string>#markdown-string</string>
806 </dict>
807 </array>
808 </dict>
809 <key>14</key>
810 <dict>
811 <key>name</key>
812 <string>string.other.end.mdx</string>
813 </dict>
814 <key>15</key>
815 <dict>
816 <key>name</key>
817 <string>string.other.begin.mdx</string>
818 </dict>
819 <key>16</key>
820 <dict>
821 <key>name</key>
822 <string>string.quoted.paren.mdx</string>
823 <key>patterns</key>
824 <array>
825 <dict>
826 <key>include</key>
827 <string>#markdown-string</string>
828 </dict>
829 </array>
830 </dict>
831 <key>17</key>
832 <dict>
833 <key>name</key>
834 <string>string.other.end.mdx</string>
835 </dict>
836 </dict>
837 </dict>
838 <key>commonmark-hard-break-escape</key>
839 <dict>
840 <key>match</key>
841 <string>\\$</string>
842 <key>name</key>
843 <string>constant.language.character-escape.line-ending.mdx</string>
844 </dict>
845 <key>commonmark-hard-break-trailing</key>
846 <dict>
847 <key>match</key>
848 <string>( ){2,}$</string>
849 <key>name</key>
850 <string>carriage-return constant.language.character-escape.line-ending.mdx</string>
851 </dict>
852 <key>commonmark-heading-atx</key>
853 <dict>
854 <key>patterns</key>
855 <array>
856 <dict>
857 <key>match</key>
858 <string>(?:^|\G)[\t ]*(#{1}(?!#))(?:[ \t]+([^\r\n]+?)(?:[ \t]+(#+?))?)?[ \t]*$</string>
859 <key>name</key>
860 <string>markup.heading.atx.1.mdx</string>
861 <key>captures</key>
862 <dict>
863 <key>1</key>
864 <dict>
865 <key>name</key>
866 <string>punctuation.definition.heading.mdx</string>
867 </dict>
868 <key>2</key>
869 <dict>
870 <key>name</key>
871 <string>entity.name.section.mdx</string>
872 <key>patterns</key>
873 <array>
874 <dict>
875 <key>include</key>
876 <string>#markdown-text</string>
877 </dict>
878 </array>
879 </dict>
880 <key>3</key>
881 <dict>
882 <key>name</key>
883 <string>punctuation.definition.heading.mdx</string>
884 </dict>
885 </dict>
886 </dict>
887 <dict>
888 <key>match</key>
889 <string>(?:^|\G)[\t ]*(#{2}(?!#))(?:[ \t]+([^\r\n]+?)(?:[ \t]+(#+?))?)?[ \t]*$</string>
890 <key>name</key>
891 <string>markup.heading.atx.2.mdx</string>
892 <key>captures</key>
893 <dict>
894 <key>1</key>
895 <dict>
896 <key>name</key>
897 <string>punctuation.definition.heading.mdx</string>
898 </dict>
899 <key>2</key>
900 <dict>
901 <key>name</key>
902 <string>entity.name.section.mdx</string>
903 <key>patterns</key>
904 <array>
905 <dict>
906 <key>include</key>
907 <string>#markdown-text</string>
908 </dict>
909 </array>
910 </dict>
911 <key>3</key>
912 <dict>
913 <key>name</key>
914 <string>punctuation.definition.heading.mdx</string>
915 </dict>
916 </dict>
917 </dict>
918 <dict>
919 <key>match</key>
920 <string>(?:^|\G)[\t ]*(#{3}(?!#))(?:[ \t]+([^\r\n]+?)(?:[ \t]+(#+?))?)?[ \t]*$</string>
921 <key>name</key>
922 <string>markup.heading.atx.3.mdx</string>
923 <key>captures</key>
924 <dict>
925 <key>1</key>
926 <dict>
927 <key>name</key>
928 <string>punctuation.definition.heading.mdx</string>
929 </dict>
930 <key>2</key>
931 <dict>
932 <key>name</key>
933 <string>entity.name.section.mdx</string>
934 <key>patterns</key>
935 <array>
936 <dict>
937 <key>include</key>
938 <string>#markdown-text</string>
939 </dict>
940 </array>
941 </dict>
942 <key>3</key>
943 <dict>
944 <key>name</key>
945 <string>punctuation.definition.heading.mdx</string>
946 </dict>
947 </dict>
948 </dict>
949 <dict>
950 <key>match</key>
951 <string>(?:^|\G)[\t ]*(#{4}(?!#))(?:[ \t]+([^\r\n]+?)(?:[ \t]+(#+?))?)?[ \t]*$</string>
952 <key>name</key>
953 <string>markup.heading.atx.4.mdx</string>
954 <key>captures</key>
955 <dict>
956 <key>1</key>
957 <dict>
958 <key>name</key>
959 <string>punctuation.definition.heading.mdx</string>
960 </dict>
961 <key>2</key>
962 <dict>
963 <key>name</key>
964 <string>entity.name.section.mdx</string>
965 <key>patterns</key>
966 <array>
967 <dict>
968 <key>include</key>
969 <string>#markdown-text</string>
970 </dict>
971 </array>
972 </dict>
973 <key>3</key>
974 <dict>
975 <key>name</key>
976 <string>punctuation.definition.heading.mdx</string>
977 </dict>
978 </dict>
979 </dict>
980 <dict>
981 <key>match</key>
982 <string>(?:^|\G)[\t ]*(#{5}(?!#))(?:[ \t]+([^\r\n]+?)(?:[ \t]+(#+?))?)?[ \t]*$</string>
983 <key>name</key>
984 <string>markup.heading.atx.5.mdx</string>
985 <key>captures</key>
986 <dict>
987 <key>1</key>
988 <dict>
989 <key>name</key>
990 <string>punctuation.definition.heading.mdx</string>
991 </dict>
992 <key>2</key>
993 <dict>
994 <key>name</key>
995 <string>entity.name.section.mdx</string>
996 <key>patterns</key>
997 <array>
998 <dict>
999 <key>include</key>
1000 <string>#markdown-text</string>
1001 </dict>
1002 </array>
1003 </dict>
1004 <key>3</key>
1005 <dict>
1006 <key>name</key>
1007 <string>punctuation.definition.heading.mdx</string>
1008 </dict>
1009 </dict>
1010 </dict>
1011 <dict>
1012 <key>match</key>
1013 <string>(?:^|\G)[\t ]*(#{6}(?!#))(?:[ \t]+([^\r\n]+?)(?:[ \t]+(#+?))?)?[ \t]*$</string>
1014 <key>name</key>
1015 <string>markup.heading.atx.6.mdx</string>
1016 <key>captures</key>
1017 <dict>
1018 <key>1</key>
1019 <dict>
1020 <key>name</key>
1021 <string>punctuation.definition.heading.mdx</string>
1022 </dict>
1023 <key>2</key>
1024 <dict>
1025 <key>name</key>
1026 <string>entity.name.section.mdx</string>
1027 <key>patterns</key>
1028 <array>
1029 <dict>
1030 <key>include</key>
1031 <string>#markdown-text</string>
1032 </dict>
1033 </array>
1034 </dict>
1035 <key>3</key>
1036 <dict>
1037 <key>name</key>
1038 <string>punctuation.definition.heading.mdx</string>
1039 </dict>
1040 </dict>
1041 </dict>
1042 </array>
1043 </dict>
1044 <key>commonmark-heading-setext</key>
1045 <dict>
1046 <key>patterns</key>
1047 <array>
1048 <dict>
1049 <key>match</key>
1050 <string>(?:^|\G)[\t ]*(={1,})[ \t]*$</string>
1051 <key>name</key>
1052 <string>markup.heading.setext.1.mdx</string>
1053 </dict>
1054 <dict>
1055 <key>match</key>
1056 <string>(?:^|\G)[\t ]*(-{1,})[ \t]*$</string>
1057 <key>name</key>
1058 <string>markup.heading.setext.2.mdx</string>
1059 </dict>
1060 </array>
1061 </dict>
1062 <key>commonmark-label-end</key>
1063 <dict>
1064 <key>patterns</key>
1065 <array>
1066 <dict>
1067 <key>match</key>
1068 <string>(\])(\()[\t ]*(?:(?:(&lt;)((?:[^\n&lt;\\&gt;]|\\[&lt;\\&gt;]?)*)(&gt;)|(\g&lt;destination_raw&gt;))(?:[\t ]+(?:(")((?:[^"\\]|\\["\\]?)*)(")|(')((?:[^'\\]|\\['\\]?)*)(')|(\()((?:[^\)\\]|\\[\)\\]?)*)(\))))?)?[\t ]*(\))(?&lt;destination_raw&gt;(?!\&lt;)(?:(?:[^\p{Cc}\ \\\(\)]|\\[\(\)\\]?)|\(\g&lt;destination_raw&gt;*\))+){0}</string>
1069 <key>captures</key>
1070 <dict>
1071 <key>1</key>
1072 <dict>
1073 <key>name</key>
1074 <string>string.other.end.mdx</string>
1075 </dict>
1076 <key>2</key>
1077 <dict>
1078 <key>name</key>
1079 <string>string.other.begin.mdx</string>
1080 </dict>
1081 <key>3</key>
1082 <dict>
1083 <key>name</key>
1084 <string>string.other.begin.destination.mdx</string>
1085 </dict>
1086 <key>4</key>
1087 <dict>
1088 <key>name</key>
1089 <string>string.other.link.destination.mdx</string>
1090 <key>patterns</key>
1091 <array>
1092 <dict>
1093 <key>include</key>
1094 <string>#markdown-string</string>
1095 </dict>
1096 </array>
1097 </dict>
1098 <key>5</key>
1099 <dict>
1100 <key>name</key>
1101 <string>string.other.end.destination.mdx</string>
1102 </dict>
1103 <key>6</key>
1104 <dict>
1105 <key>name</key>
1106 <string>string.other.link.destination.mdx</string>
1107 <key>patterns</key>
1108 <array>
1109 <dict>
1110 <key>include</key>
1111 <string>#markdown-string</string>
1112 </dict>
1113 </array>
1114 </dict>
1115 <key>7</key>
1116 <dict>
1117 <key>name</key>
1118 <string>string.other.begin.mdx</string>
1119 </dict>
1120 <key>8</key>
1121 <dict>
1122 <key>name</key>
1123 <string>string.quoted.double.mdx</string>
1124 <key>patterns</key>
1125 <array>
1126 <dict>
1127 <key>include</key>
1128 <string>#markdown-string</string>
1129 </dict>
1130 </array>
1131 </dict>
1132 <key>9</key>
1133 <dict>
1134 <key>name</key>
1135 <string>string.other.end.mdx</string>
1136 </dict>
1137 <key>10</key>
1138 <dict>
1139 <key>name</key>
1140 <string>string.other.begin.mdx</string>
1141 </dict>
1142 <key>11</key>
1143 <dict>
1144 <key>name</key>
1145 <string>string.quoted.single.mdx</string>
1146 <key>patterns</key>
1147 <array>
1148 <dict>
1149 <key>include</key>
1150 <string>#markdown-string</string>
1151 </dict>
1152 </array>
1153 </dict>
1154 <key>12</key>
1155 <dict>
1156 <key>name</key>
1157 <string>string.other.end.mdx</string>
1158 </dict>
1159 <key>13</key>
1160 <dict>
1161 <key>name</key>
1162 <string>string.other.begin.mdx</string>
1163 </dict>
1164 <key>14</key>
1165 <dict>
1166 <key>name</key>
1167 <string>string.quoted.paren.mdx</string>
1168 <key>patterns</key>
1169 <array>
1170 <dict>
1171 <key>include</key>
1172 <string>#markdown-string</string>
1173 </dict>
1174 </array>
1175 </dict>
1176 <key>15</key>
1177 <dict>
1178 <key>name</key>
1179 <string>string.other.end.mdx</string>
1180 </dict>
1181 <key>16</key>
1182 <dict>
1183 <key>name</key>
1184 <string>string.other.end.mdx</string>
1185 </dict>
1186 </dict>
1187 </dict>
1188 <dict>
1189 <key>match</key>
1190 <string>(\])(\[)((?:[^\[\\\]]|\\[\[\\\]]?)+?)(\])</string>
1191 <key>captures</key>
1192 <dict>
1193 <key>1</key>
1194 <dict>
1195 <key>name</key>
1196 <string>string.other.end.mdx</string>
1197 </dict>
1198 <key>2</key>
1199 <dict>
1200 <key>name</key>
1201 <string>string.other.begin.mdx</string>
1202 </dict>
1203 <key>3</key>
1204 <dict>
1205 <key>name</key>
1206 <string>entity.name.identifier.mdx</string>
1207 <key>patterns</key>
1208 <array>
1209 <dict>
1210 <key>include</key>
1211 <string>#markdown-string</string>
1212 </dict>
1213 </array>
1214 </dict>
1215 <key>4</key>
1216 <dict>
1217 <key>name</key>
1218 <string>string.other.end.mdx</string>
1219 </dict>
1220 </dict>
1221 </dict>
1222 <dict>
1223 <key>match</key>
1224 <string>(\])</string>
1225 <key>captures</key>
1226 <dict>
1227 <key>1</key>
1228 <dict>
1229 <key>name</key>
1230 <string>string.other.end.mdx</string>
1231 </dict>
1232 </dict>
1233 </dict>
1234 </array>
1235 </dict>
1236 <key>commonmark-label-start</key>
1237 <dict>
1238 <key>patterns</key>
1239 <array>
1240 <dict>
1241 <key>match</key>
1242 <string>\!\[(?!\^)</string>
1243 <key>name</key>
1244 <string>string.other.begin.image.mdx</string>
1245 </dict>
1246 <dict>
1247 <key>match</key>
1248 <string>\[</string>
1249 <key>name</key>
1250 <string>string.other.begin.link.mdx</string>
1251 </dict>
1252 </array>
1253 </dict>
1254 <key>commonmark-list-item</key>
1255 <dict>
1256 <key>patterns</key>
1257 <array>
1258 <dict>
1259 <key>begin</key>
1260 <string>(?:^|\G)[\t ]*((?:[*+-]))(?:[ ]{4}(?![ ])|\t)(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1261 <key>beginCaptures</key>
1262 <dict>
1263 <key>1</key>
1264 <dict>
1265 <key>name</key>
1266 <string>variable.unordered.list.mdx</string>
1267 </dict>
1268 <key>2</key>
1269 <dict>
1270 <key>name</key>
1271 <string>keyword.other.tasklist.mdx</string>
1272 </dict>
1273 </dict>
1274 <key>patterns</key>
1275 <array>
1276 <dict>
1277 <key>include</key>
1278 <string>#markdown-sections</string>
1279 </dict>
1280 </array>
1281 <key>while</key>
1282 <string>^(?=[\t ]*$)|(?:^|\G)(?:[ ]{4}|\t)[ ]{1}</string>
1283 </dict>
1284 <dict>
1285 <key>begin</key>
1286 <string>(?:^|\G)[\t ]*((?:[*+-]))(?:[ ]{3}(?![ ]))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1287 <key>beginCaptures</key>
1288 <dict>
1289 <key>1</key>
1290 <dict>
1291 <key>name</key>
1292 <string>variable.unordered.list.mdx</string>
1293 </dict>
1294 <key>2</key>
1295 <dict>
1296 <key>name</key>
1297 <string>keyword.other.tasklist.mdx</string>
1298 </dict>
1299 </dict>
1300 <key>patterns</key>
1301 <array>
1302 <dict>
1303 <key>include</key>
1304 <string>#markdown-sections</string>
1305 </dict>
1306 </array>
1307 <key>while</key>
1308 <string>^(?=[\t ]*$)|(?:^|\G)(?:[ ]{4}|\t)</string>
1309 </dict>
1310 <dict>
1311 <key>begin</key>
1312 <string>(?:^|\G)[\t ]*((?:[*+-]))(?:[ ]{2}(?![ ]))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1313 <key>beginCaptures</key>
1314 <dict>
1315 <key>1</key>
1316 <dict>
1317 <key>name</key>
1318 <string>variable.unordered.list.mdx</string>
1319 </dict>
1320 <key>2</key>
1321 <dict>
1322 <key>name</key>
1323 <string>keyword.other.tasklist.mdx</string>
1324 </dict>
1325 </dict>
1326 <key>patterns</key>
1327 <array>
1328 <dict>
1329 <key>include</key>
1330 <string>#markdown-sections</string>
1331 </dict>
1332 </array>
1333 <key>while</key>
1334 <string>^(?=[\t ]*$)|(?:^|\G)[ ]{3}</string>
1335 </dict>
1336 <dict>
1337 <key>begin</key>
1338 <string>(?:^|\G)[\t ]*((?:[*+-]))(?:[ ]{1}|(?=\n))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1339 <key>beginCaptures</key>
1340 <dict>
1341 <key>1</key>
1342 <dict>
1343 <key>name</key>
1344 <string>variable.unordered.list.mdx</string>
1345 </dict>
1346 <key>2</key>
1347 <dict>
1348 <key>name</key>
1349 <string>keyword.other.tasklist.mdx</string>
1350 </dict>
1351 </dict>
1352 <key>patterns</key>
1353 <array>
1354 <dict>
1355 <key>include</key>
1356 <string>#markdown-sections</string>
1357 </dict>
1358 </array>
1359 <key>while</key>
1360 <string>^(?=[\t ]*$)|(?:^|\G)[ ]{2}</string>
1361 </dict>
1362 <dict>
1363 <key>begin</key>
1364 <string>(?:^|\G)[\t ]*([0-9]{9})((?:\.|\)))(?:[ ]{4}(?![ ])|\t(?![\t ]))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1365 <key>beginCaptures</key>
1366 <dict>
1367 <key>1</key>
1368 <dict>
1369 <key>name</key>
1370 <string>string.other.number.mdx</string>
1371 </dict>
1372 <key>2</key>
1373 <dict>
1374 <key>name</key>
1375 <string>variable.ordered.list.mdx</string>
1376 </dict>
1377 <key>3</key>
1378 <dict>
1379 <key>name</key>
1380 <string>keyword.other.tasklist.mdx</string>
1381 </dict>
1382 </dict>
1383 <key>patterns</key>
1384 <array>
1385 <dict>
1386 <key>include</key>
1387 <string>#markdown-sections</string>
1388 </dict>
1389 </array>
1390 <key>while</key>
1391 <string>^(?=[\t ]*$)|(?:^|\G)(?:[ ]{4}|\t){3}[ ]{2}</string>
1392 </dict>
1393 <dict>
1394 <key>begin</key>
1395 <string>(?:^|\G)[\t ]*(?:([0-9]{9})((?:\.|\)))(?:[ ]{3}(?![ ]))|([0-9]{8})((?:\.|\)))(?:[ ]{4}(?![ ])))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1396 <key>beginCaptures</key>
1397 <dict>
1398 <key>1</key>
1399 <dict>
1400 <key>name</key>
1401 <string>string.other.number.mdx</string>
1402 </dict>
1403 <key>2</key>
1404 <dict>
1405 <key>name</key>
1406 <string>variable.ordered.list.mdx</string>
1407 </dict>
1408 <key>3</key>
1409 <dict>
1410 <key>name</key>
1411 <string>string.other.number.mdx</string>
1412 </dict>
1413 <key>4</key>
1414 <dict>
1415 <key>name</key>
1416 <string>variable.ordered.list.mdx</string>
1417 </dict>
1418 <key>5</key>
1419 <dict>
1420 <key>name</key>
1421 <string>keyword.other.tasklist.mdx</string>
1422 </dict>
1423 </dict>
1424 <key>patterns</key>
1425 <array>
1426 <dict>
1427 <key>include</key>
1428 <string>#markdown-sections</string>
1429 </dict>
1430 </array>
1431 <key>while</key>
1432 <string>^(?=[\t ]*$)|(?:^|\G)(?:[ ]{4}|\t){3}[ ]{1}</string>
1433 </dict>
1434 <dict>
1435 <key>begin</key>
1436 <string>(?:^|\G)[\t ]*(?:([0-9]{9})((?:\.|\)))(?:[ ]{2}(?![ ]))|([0-9]{8})((?:\.|\)))(?:[ ]{3}(?![ ]))|([0-9]{7})((?:\.|\)))(?:[ ]{4}(?![ ])))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1437 <key>beginCaptures</key>
1438 <dict>
1439 <key>1</key>
1440 <dict>
1441 <key>name</key>
1442 <string>string.other.number.mdx</string>
1443 </dict>
1444 <key>2</key>
1445 <dict>
1446 <key>name</key>
1447 <string>variable.ordered.list.mdx</string>
1448 </dict>
1449 <key>3</key>
1450 <dict>
1451 <key>name</key>
1452 <string>string.other.number.mdx</string>
1453 </dict>
1454 <key>4</key>
1455 <dict>
1456 <key>name</key>
1457 <string>variable.ordered.list.mdx</string>
1458 </dict>
1459 <key>5</key>
1460 <dict>
1461 <key>name</key>
1462 <string>string.other.number.mdx</string>
1463 </dict>
1464 <key>6</key>
1465 <dict>
1466 <key>name</key>
1467 <string>variable.ordered.list.mdx</string>
1468 </dict>
1469 <key>7</key>
1470 <dict>
1471 <key>name</key>
1472 <string>keyword.other.tasklist.mdx</string>
1473 </dict>
1474 </dict>
1475 <key>patterns</key>
1476 <array>
1477 <dict>
1478 <key>include</key>
1479 <string>#markdown-sections</string>
1480 </dict>
1481 </array>
1482 <key>while</key>
1483 <string>^(?=[\t ]*$)|(?:^|\G)(?:[ ]{4}|\t){3}</string>
1484 </dict>
1485 <dict>
1486 <key>begin</key>
1487 <string>(?:^|\G)[\t ]*(?:([0-9]{9})((?:\.|\)))(?:[ ]{1}|(?=[ \t]*\n))|([0-9]{8})((?:\.|\)))(?:[ ]{2}(?![ ]))|([0-9]{7})((?:\.|\)))(?:[ ]{3}(?![ ]))|([0-9]{6})((?:\.|\)))(?:[ ]{4}(?![ ])))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1488 <key>beginCaptures</key>
1489 <dict>
1490 <key>1</key>
1491 <dict>
1492 <key>name</key>
1493 <string>string.other.number.mdx</string>
1494 </dict>
1495 <key>2</key>
1496 <dict>
1497 <key>name</key>
1498 <string>variable.ordered.list.mdx</string>
1499 </dict>
1500 <key>3</key>
1501 <dict>
1502 <key>name</key>
1503 <string>string.other.number.mdx</string>
1504 </dict>
1505 <key>4</key>
1506 <dict>
1507 <key>name</key>
1508 <string>variable.ordered.list.mdx</string>
1509 </dict>
1510 <key>5</key>
1511 <dict>
1512 <key>name</key>
1513 <string>string.other.number.mdx</string>
1514 </dict>
1515 <key>6</key>
1516 <dict>
1517 <key>name</key>
1518 <string>variable.ordered.list.mdx</string>
1519 </dict>
1520 <key>7</key>
1521 <dict>
1522 <key>name</key>
1523 <string>string.other.number.mdx</string>
1524 </dict>
1525 <key>8</key>
1526 <dict>
1527 <key>name</key>
1528 <string>variable.ordered.list.mdx</string>
1529 </dict>
1530 <key>9</key>
1531 <dict>
1532 <key>name</key>
1533 <string>keyword.other.tasklist.mdx</string>
1534 </dict>
1535 </dict>
1536 <key>patterns</key>
1537 <array>
1538 <dict>
1539 <key>include</key>
1540 <string>#markdown-sections</string>
1541 </dict>
1542 </array>
1543 <key>while</key>
1544 <string>^(?=[\t ]*$)|(?:^|\G)(?:[ ]{4}|\t){2}[ ]{3}</string>
1545 </dict>
1546 <dict>
1547 <key>begin</key>
1548 <string>(?:^|\G)[\t ]*(?:([0-9]{8})((?:\.|\)))(?:[ ]{1}|(?=[ \t]*\n))|([0-9]{7})((?:\.|\)))(?:[ ]{2}(?![ ]))|([0-9]{6})((?:\.|\)))(?:[ ]{3}(?![ ]))|([0-9]{5})((?:\.|\)))(?:[ ]{4}(?![ ])))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1549 <key>beginCaptures</key>
1550 <dict>
1551 <key>1</key>
1552 <dict>
1553 <key>name</key>
1554 <string>string.other.number.mdx</string>
1555 </dict>
1556 <key>2</key>
1557 <dict>
1558 <key>name</key>
1559 <string>variable.ordered.list.mdx</string>
1560 </dict>
1561 <key>3</key>
1562 <dict>
1563 <key>name</key>
1564 <string>string.other.number.mdx</string>
1565 </dict>
1566 <key>4</key>
1567 <dict>
1568 <key>name</key>
1569 <string>variable.ordered.list.mdx</string>
1570 </dict>
1571 <key>5</key>
1572 <dict>
1573 <key>name</key>
1574 <string>string.other.number.mdx</string>
1575 </dict>
1576 <key>6</key>
1577 <dict>
1578 <key>name</key>
1579 <string>variable.ordered.list.mdx</string>
1580 </dict>
1581 <key>7</key>
1582 <dict>
1583 <key>name</key>
1584 <string>string.other.number.mdx</string>
1585 </dict>
1586 <key>8</key>
1587 <dict>
1588 <key>name</key>
1589 <string>variable.ordered.list.mdx</string>
1590 </dict>
1591 <key>9</key>
1592 <dict>
1593 <key>name</key>
1594 <string>keyword.other.tasklist.mdx</string>
1595 </dict>
1596 </dict>
1597 <key>patterns</key>
1598 <array>
1599 <dict>
1600 <key>include</key>
1601 <string>#markdown-sections</string>
1602 </dict>
1603 </array>
1604 <key>while</key>
1605 <string>^(?=[\t ]*$)|(?:^|\G)(?:[ ]{4}|\t){2}[ ]{2}</string>
1606 </dict>
1607 <dict>
1608 <key>begin</key>
1609 <string>(?:^|\G)[\t ]*(?:([0-9]{7})((?:\.|\)))(?:[ ]{1}|(?=[ \t]*\n))|([0-9]{6})((?:\.|\)))(?:[ ]{2}(?![ ]))|([0-9]{5})((?:\.|\)))(?:[ ]{3}(?![ ]))|([0-9]{4})((?:\.|\)))(?:[ ]{4}(?![ ])))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1610 <key>beginCaptures</key>
1611 <dict>
1612 <key>1</key>
1613 <dict>
1614 <key>name</key>
1615 <string>string.other.number.mdx</string>
1616 </dict>
1617 <key>2</key>
1618 <dict>
1619 <key>name</key>
1620 <string>variable.ordered.list.mdx</string>
1621 </dict>
1622 <key>3</key>
1623 <dict>
1624 <key>name</key>
1625 <string>string.other.number.mdx</string>
1626 </dict>
1627 <key>4</key>
1628 <dict>
1629 <key>name</key>
1630 <string>variable.ordered.list.mdx</string>
1631 </dict>
1632 <key>5</key>
1633 <dict>
1634 <key>name</key>
1635 <string>string.other.number.mdx</string>
1636 </dict>
1637 <key>6</key>
1638 <dict>
1639 <key>name</key>
1640 <string>variable.ordered.list.mdx</string>
1641 </dict>
1642 <key>7</key>
1643 <dict>
1644 <key>name</key>
1645 <string>string.other.number.mdx</string>
1646 </dict>
1647 <key>8</key>
1648 <dict>
1649 <key>name</key>
1650 <string>variable.ordered.list.mdx</string>
1651 </dict>
1652 <key>9</key>
1653 <dict>
1654 <key>name</key>
1655 <string>keyword.other.tasklist.mdx</string>
1656 </dict>
1657 </dict>
1658 <key>patterns</key>
1659 <array>
1660 <dict>
1661 <key>include</key>
1662 <string>#markdown-sections</string>
1663 </dict>
1664 </array>
1665 <key>while</key>
1666 <string>^(?=[\t ]*$)|(?:^|\G)(?:[ ]{4}|\t){2}[ ]{1}</string>
1667 </dict>
1668 <dict>
1669 <key>begin</key>
1670 <string>(?:^|\G)[\t ]*(?:([0-9]{6})((?:\.|\)))(?:[ ]{1}|(?=[ \t]*\n))|([0-9]{5})((?:\.|\)))(?:[ ]{2}(?![ ]))|([0-9]{4})((?:\.|\)))(?:[ ]{3}(?![ ]))|([0-9]{3})((?:\.|\)))(?:[ ]{4}(?![ ])))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1671 <key>beginCaptures</key>
1672 <dict>
1673 <key>1</key>
1674 <dict>
1675 <key>name</key>
1676 <string>string.other.number.mdx</string>
1677 </dict>
1678 <key>2</key>
1679 <dict>
1680 <key>name</key>
1681 <string>variable.ordered.list.mdx</string>
1682 </dict>
1683 <key>3</key>
1684 <dict>
1685 <key>name</key>
1686 <string>string.other.number.mdx</string>
1687 </dict>
1688 <key>4</key>
1689 <dict>
1690 <key>name</key>
1691 <string>variable.ordered.list.mdx</string>
1692 </dict>
1693 <key>5</key>
1694 <dict>
1695 <key>name</key>
1696 <string>string.other.number.mdx</string>
1697 </dict>
1698 <key>6</key>
1699 <dict>
1700 <key>name</key>
1701 <string>variable.ordered.list.mdx</string>
1702 </dict>
1703 <key>7</key>
1704 <dict>
1705 <key>name</key>
1706 <string>string.other.number.mdx</string>
1707 </dict>
1708 <key>8</key>
1709 <dict>
1710 <key>name</key>
1711 <string>variable.ordered.list.mdx</string>
1712 </dict>
1713 <key>9</key>
1714 <dict>
1715 <key>name</key>
1716 <string>keyword.other.tasklist.mdx</string>
1717 </dict>
1718 </dict>
1719 <key>patterns</key>
1720 <array>
1721 <dict>
1722 <key>include</key>
1723 <string>#markdown-sections</string>
1724 </dict>
1725 </array>
1726 <key>while</key>
1727 <string>^(?=[\t ]*$)|(?:^|\G)(?:[ ]{4}|\t){2}</string>
1728 </dict>
1729 <dict>
1730 <key>begin</key>
1731 <string>(?:^|\G)[\t ]*(?:([0-9]{5})((?:\.|\)))(?:[ ]{1}|(?=[ \t]*\n))|([0-9]{4})((?:\.|\)))(?:[ ]{2}(?![ ]))|([0-9]{3})((?:\.|\)))(?:[ ]{3}(?![ ]))|([0-9]{2})((?:\.|\)))(?:[ ]{4}(?![ ])))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1732 <key>beginCaptures</key>
1733 <dict>
1734 <key>1</key>
1735 <dict>
1736 <key>name</key>
1737 <string>string.other.number.mdx</string>
1738 </dict>
1739 <key>2</key>
1740 <dict>
1741 <key>name</key>
1742 <string>variable.ordered.list.mdx</string>
1743 </dict>
1744 <key>3</key>
1745 <dict>
1746 <key>name</key>
1747 <string>string.other.number.mdx</string>
1748 </dict>
1749 <key>4</key>
1750 <dict>
1751 <key>name</key>
1752 <string>variable.ordered.list.mdx</string>
1753 </dict>
1754 <key>5</key>
1755 <dict>
1756 <key>name</key>
1757 <string>string.other.number.mdx</string>
1758 </dict>
1759 <key>6</key>
1760 <dict>
1761 <key>name</key>
1762 <string>variable.ordered.list.mdx</string>
1763 </dict>
1764 <key>7</key>
1765 <dict>
1766 <key>name</key>
1767 <string>string.other.number.mdx</string>
1768 </dict>
1769 <key>8</key>
1770 <dict>
1771 <key>name</key>
1772 <string>variable.ordered.list.mdx</string>
1773 </dict>
1774 <key>9</key>
1775 <dict>
1776 <key>name</key>
1777 <string>keyword.other.tasklist.mdx</string>
1778 </dict>
1779 </dict>
1780 <key>patterns</key>
1781 <array>
1782 <dict>
1783 <key>include</key>
1784 <string>#markdown-sections</string>
1785 </dict>
1786 </array>
1787 <key>while</key>
1788 <string>^(?=[\t ]*$)|(?:^|\G)(?:[ ]{4}|\t)[ ]{3}</string>
1789 </dict>
1790 <dict>
1791 <key>begin</key>
1792 <string>(?:^|\G)[\t ]*(?:([0-9]{4})((?:\.|\)))(?:[ ]{1}|(?=[ \t]*\n))|([0-9]{3})((?:\.|\)))(?:[ ]{2}(?![ ]))|([0-9]{2})((?:\.|\)))(?:[ ]{3}(?![ ]))|([0-9]{1})((?:\.|\)))(?:[ ]{4}(?![ ])))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1793 <key>beginCaptures</key>
1794 <dict>
1795 <key>1</key>
1796 <dict>
1797 <key>name</key>
1798 <string>string.other.number.mdx</string>
1799 </dict>
1800 <key>2</key>
1801 <dict>
1802 <key>name</key>
1803 <string>variable.ordered.list.mdx</string>
1804 </dict>
1805 <key>3</key>
1806 <dict>
1807 <key>name</key>
1808 <string>string.other.number.mdx</string>
1809 </dict>
1810 <key>4</key>
1811 <dict>
1812 <key>name</key>
1813 <string>variable.ordered.list.mdx</string>
1814 </dict>
1815 <key>5</key>
1816 <dict>
1817 <key>name</key>
1818 <string>string.other.number.mdx</string>
1819 </dict>
1820 <key>6</key>
1821 <dict>
1822 <key>name</key>
1823 <string>variable.ordered.list.mdx</string>
1824 </dict>
1825 <key>7</key>
1826 <dict>
1827 <key>name</key>
1828 <string>string.other.number.mdx</string>
1829 </dict>
1830 <key>8</key>
1831 <dict>
1832 <key>name</key>
1833 <string>variable.ordered.list.mdx</string>
1834 </dict>
1835 <key>9</key>
1836 <dict>
1837 <key>name</key>
1838 <string>keyword.other.tasklist.mdx</string>
1839 </dict>
1840 </dict>
1841 <key>patterns</key>
1842 <array>
1843 <dict>
1844 <key>include</key>
1845 <string>#markdown-sections</string>
1846 </dict>
1847 </array>
1848 <key>while</key>
1849 <string>^(?=[\t ]*$)|(?:^|\G)(?:[ ]{4}|\t)[ ]{2}</string>
1850 </dict>
1851 <dict>
1852 <key>begin</key>
1853 <string>(?:^|\G)[\t ]*(?:([0-9]{3})((?:\.|\)))(?:[ ]{1}|(?=[ \t]*\n))|([0-9]{2})((?:\.|\)))(?:[ ]{2}(?![ ]))|([0-9]{1})((?:\.|\)))(?:[ ]{3}(?![ ])))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1854 <key>beginCaptures</key>
1855 <dict>
1856 <key>1</key>
1857 <dict>
1858 <key>name</key>
1859 <string>string.other.number.mdx</string>
1860 </dict>
1861 <key>2</key>
1862 <dict>
1863 <key>name</key>
1864 <string>variable.ordered.list.mdx</string>
1865 </dict>
1866 <key>3</key>
1867 <dict>
1868 <key>name</key>
1869 <string>string.other.number.mdx</string>
1870 </dict>
1871 <key>4</key>
1872 <dict>
1873 <key>name</key>
1874 <string>variable.ordered.list.mdx</string>
1875 </dict>
1876 <key>5</key>
1877 <dict>
1878 <key>name</key>
1879 <string>string.other.number.mdx</string>
1880 </dict>
1881 <key>6</key>
1882 <dict>
1883 <key>name</key>
1884 <string>variable.ordered.list.mdx</string>
1885 </dict>
1886 <key>7</key>
1887 <dict>
1888 <key>name</key>
1889 <string>keyword.other.tasklist.mdx</string>
1890 </dict>
1891 </dict>
1892 <key>patterns</key>
1893 <array>
1894 <dict>
1895 <key>include</key>
1896 <string>#markdown-sections</string>
1897 </dict>
1898 </array>
1899 <key>while</key>
1900 <string>^(?=[\t ]*$)|(?:^|\G)(?:[ ]{4}|\t)[ ]{1}</string>
1901 </dict>
1902 <dict>
1903 <key>begin</key>
1904 <string>(?:^|\G)[\t ]*(?:([0-9]{2})((?:\.|\)))(?:[ ]{1}|(?=[ \t]*\n))|([0-9])((?:\.|\)))(?:[ ]{2}(?![ ])))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1905 <key>beginCaptures</key>
1906 <dict>
1907 <key>1</key>
1908 <dict>
1909 <key>name</key>
1910 <string>string.other.number.mdx</string>
1911 </dict>
1912 <key>2</key>
1913 <dict>
1914 <key>name</key>
1915 <string>variable.ordered.list.mdx</string>
1916 </dict>
1917 <key>3</key>
1918 <dict>
1919 <key>name</key>
1920 <string>string.other.number.mdx</string>
1921 </dict>
1922 <key>4</key>
1923 <dict>
1924 <key>name</key>
1925 <string>variable.ordered.list.mdx</string>
1926 </dict>
1927 <key>5</key>
1928 <dict>
1929 <key>name</key>
1930 <string>keyword.other.tasklist.mdx</string>
1931 </dict>
1932 </dict>
1933 <key>patterns</key>
1934 <array>
1935 <dict>
1936 <key>include</key>
1937 <string>#markdown-sections</string>
1938 </dict>
1939 </array>
1940 <key>while</key>
1941 <string>^(?=[\t ]*$)|(?:^|\G)(?:[ ]{4}|\t)</string>
1942 </dict>
1943 <dict>
1944 <key>begin</key>
1945 <string>(?:^|\G)[\t ]*([0-9])((?:\.|\)))(?:[ ]{1}|(?=[ \t]*\n))(\[[\t Xx]\](?=[\t\n\r ]+(?:$|[^\t\n\r ])))?</string>
1946 <key>beginCaptures</key>
1947 <dict>
1948 <key>1</key>
1949 <dict>
1950 <key>name</key>
1951 <string>string.other.number.mdx</string>
1952 </dict>
1953 <key>2</key>
1954 <dict>
1955 <key>name</key>
1956 <string>variable.ordered.list.mdx</string>
1957 </dict>
1958 <key>3</key>
1959 <dict>
1960 <key>name</key>
1961 <string>keyword.other.tasklist.mdx</string>
1962 </dict>
1963 </dict>
1964 <key>patterns</key>
1965 <array>
1966 <dict>
1967 <key>include</key>
1968 <string>#markdown-sections</string>
1969 </dict>
1970 </array>
1971 <key>while</key>
1972 <string>^(?=[\t ]*$)|(?:^|\G)[ ]{3}</string>
1973 </dict>
1974 </array>
1975 </dict>
1976 <key>commonmark-paragraph</key>
1977 <dict>
1978 <key>begin</key>
1979 <string>(?![\t ]*$)</string>
1980 <key>name</key>
1981 <string>meta.paragraph.mdx</string>
1982 <key>patterns</key>
1983 <array>
1984 <dict>
1985 <key>include</key>
1986 <string>#markdown-text</string>
1987 </dict>
1988 </array>
1989 <key>while</key>
1990 <string>(?:^|\G)(?:[ ]{4}|\t)</string>
1991 </dict>
1992 <key>commonmark-thematic-break</key>
1993 <dict>
1994 <key>match</key>
1995 <string>(?:^|\G)[\t ]*([-*_])[ \t]*(?:\1[ \t]*){2,}$</string>
1996 <key>name</key>
1997 <string>meta.separator.mdx</string>
1998 </dict>
1999 <key>extension-gfm-autolink-literal</key>
2000 <dict>
2001 <key>patterns</key>
2002 <array>
2003 <dict>
2004 <key>match</key>
2005 <string>(?&lt;=^|[\t\n\r \(\*\_\[\]~])(?=(?i:www)\.[^\n\r])(?:(?:[\p{L}\p{N}]|-|[\._](?!(?:[!"'\)\*,\.:;&lt;\?_~]*(?:[\s&lt;]|\][\t\n \(\[]))))+\g&lt;path&gt;?)?(?&lt;path&gt;(?:(?:[^\t\n\r !"&amp;'\(\)\*,\.:;&lt;\?\]_~]|&amp;(?![A-Za-z]*;(?:[!"'\)\*,\.:;&lt;\?_~]*(?:[\s&lt;]|\][\t\n \(\[])))|[!"'\)\*,\.:;\?_~](?!(?:[!"'\)\*,\.:;&lt;\?_~]*(?:[\s&lt;]|\][\t\n \(\[]))))|\(\g&lt;path&gt;*\))+){0}</string>
2006 <key>name</key>
2007 <string>string.other.link.autolink.literal.www.mdx</string>
2008 </dict>
2009 <dict>
2010 <key>match</key>
2011 <string>(?&lt;=^|[^A-Za-z])(?i:https?://)(?=[\p{L}\p{N}])(?:(?:[\p{L}\p{N}]|-|[\._](?!(?:[!"'\)\*,\.:;&lt;\?_~]*(?:[\s&lt;]|\][\t\n \(\[]))))+\g&lt;path&gt;?)?(?&lt;path&gt;(?:(?:[^\t\n\r !"&amp;'\(\)\*,\.:;&lt;\?\]_~]|&amp;(?![A-Za-z]*;(?:[!"'\)\*,\.:;&lt;\?_~]*(?:[\s&lt;]|\][\t\n \(\[])))|[!"'\)\*,\.:;\?_~](?!(?:[!"'\)\*,\.:;&lt;\?_~]*(?:[\s&lt;]|\][\t\n \(\[]))))|\(\g&lt;path&gt;*\))+){0}</string>
2012 <key>name</key>
2013 <string>string.other.link.autolink.literal.http.mdx</string>
2014 </dict>
2015 <dict>
2016 <key>match</key>
2017 <string>(?&lt;=^|[^A-Za-z/])(?i:mailto:|xmpp:)?(?:[0-9A-Za-z+\-\._])+@(?:(?:[0-9A-Za-z]|[-_](?!(?:[!"'\)\*,\.:;&lt;\?_~]*(?:[\s&lt;]|\][\t\n \(\[]))))+(?:\.(?!(?:[!"'\)\*,\.:;&lt;\?_~]*(?:[\s&lt;]|\][\t\n \(\[])))))+(?:[A-Za-z]|[-_](?!(?:[!"'\)\*,\.:;&lt;\?_~]*(?:[\s&lt;]|\][\t\n \(\[]))))+</string>
2018 <key>name</key>
2019 <string>string.other.link.autolink.literal.email.mdx</string>
2020 </dict>
2021 </array>
2022 </dict>
2023 <key>extension-gfm-footnote-call</key>
2024 <dict>
2025 <key>match</key>
2026 <string>(\[)(\^)((?:[^\t\n\r \[\\\]]|\\[\[\\\]]?)+)(\])</string>
2027 <key>captures</key>
2028 <dict>
2029 <key>1</key>
2030 <dict>
2031 <key>name</key>
2032 <string>string.other.begin.link.mdx</string>
2033 </dict>
2034 <key>2</key>
2035 <dict>
2036 <key>name</key>
2037 <string>string.other.begin.footnote.mdx</string>
2038 </dict>
2039 <key>3</key>
2040 <dict>
2041 <key>name</key>
2042 <string>entity.name.identifier.mdx</string>
2043 <key>patterns</key>
2044 <array>
2045 <dict>
2046 <key>include</key>
2047 <string>#markdown-string</string>
2048 </dict>
2049 </array>
2050 </dict>
2051 <key>4</key>
2052 <dict>
2053 <key>name</key>
2054 <string>string.other.end.footnote.mdx</string>
2055 </dict>
2056 </dict>
2057 </dict>
2058 <key>extension-gfm-footnote-definition</key>
2059 <dict>
2060 <key>begin</key>
2061 <string>(?:^|\G)[\t ]*(\[)(\^)((?:[^\t\n\r \[\\\]]|\\[\[\\\]]?)+)(\])(:)[\t ]*</string>
2062 <key>beginCaptures</key>
2063 <dict>
2064 <key>1</key>
2065 <dict>
2066 <key>name</key>
2067 <string>string.other.begin.link.mdx</string>
2068 </dict>
2069 <key>2</key>
2070 <dict>
2071 <key>name</key>
2072 <string>string.other.begin.footnote.mdx</string>
2073 </dict>
2074 <key>3</key>
2075 <dict>
2076 <key>name</key>
2077 <string>entity.name.identifier.mdx</string>
2078 <key>patterns</key>
2079 <array>
2080 <dict>
2081 <key>include</key>
2082 <string>#markdown-string</string>
2083 </dict>
2084 </array>
2085 </dict>
2086 <key>4</key>
2087 <dict>
2088 <key>name</key>
2089 <string>string.other.end.footnote.mdx</string>
2090 </dict>
2091 </dict>
2092 <key>patterns</key>
2093 <array>
2094 <dict>
2095 <key>include</key>
2096 <string>#markdown-sections</string>
2097 </dict>
2098 </array>
2099 <key>while</key>
2100 <string>^(?=[\t ]*$)|(?:^|\G)(?:[ ]{4}|\t)</string>
2101 </dict>
2102 <key>extension-gfm-strikethrough</key>
2103 <dict>
2104 <key>match</key>
2105 <string>(?&lt;=\S)(?&lt;!~)~{1,2}(?!~)|(?&lt;!~)~{1,2}(?=\S)(?!~)</string>
2106 <key>name</key>
2107 <string>string.other.strikethrough.mdx</string>
2108 </dict>
2109 <key>extension-gfm-table</key>
2110 <dict>
2111 <key>begin</key>
2112 <string>(?:^|\G)[\t ]*(?=\|[^\n\r]+\|[ \t]*$)</string>
2113 <key>patterns</key>
2114 <array>
2115 <dict>
2116 <key>match</key>
2117 <string>(?&lt;=\||(?:^|\G))[\t ]*((?:[^\n\r\\\|]|\\[\\\|]?)+?)[\t ]*(?=\||$)</string>
2118 <key>captures</key>
2119 <dict>
2120 <key>1</key>
2121 <dict>
2122 <key>patterns</key>
2123 <array>
2124 <dict>
2125 <key>include</key>
2126 <string>#markdown-text</string>
2127 </dict>
2128 </array>
2129 </dict>
2130 </dict>
2131 </dict>
2132 <dict>
2133 <key>match</key>
2134 <string>(?:\|)</string>
2135 <key>name</key>
2136 <string>markup.list.table-delimiter.mdx</string>
2137 </dict>
2138 </array>
2139 <key>end</key>
2140 <string>^(?=[\t ]*$)|$</string>
2141 </dict>
2142 <key>extension-github-gemoji</key>
2143 <dict>
2144 <key>match</key>
2145 <string>(:)((?:(?:(?:hand_with_index_finger_and_thumb_cros|mailbox_clo|fist_rai|confu)s|r(?:aised_hand_with_fingers_splay|e(?:gister|l(?:iev|ax)))|disappointed_reliev|confound|(?:a(?:ston|ngu)i|flu)sh|unamus|hush)e|(?:chart_with_(?:down|up)wards_tre|large_orange_diamo|small_(?:orang|blu)e_diamo|large_blue_diamo|parasol_on_grou|loud_sou|rewi)n|(?:rightwards_pushing_h|hourglass_flowing_s|leftwards_(?:pushing_)?h|(?:raised_back_of|palm_(?:down|up)|call_me)_h|(?:(?:(?:clippert|ascensi)on|norfolk)_is|christmas_is|desert_is|bouvet_is|new_zea|thai|eng|fin|ire)l|rightwards_h|pinching_h|writing_h|s(?:w(?:itzer|azi)|cot)l|magic_w|ok_h|icel)an|s(?:un_behind_(?:large|small|rain)_clou|hallow_pan_of_foo|tar_of_davi|leeping_be|kateboar|a(?:tisfie|uropo)|hiel|oun|qui)|(?:ear_with_hearing_a|pouring_liqu)i|(?:identification_c|(?:arrow_(?:back|for)|fast_for)w|credit_c|woman_be|biohaz|man_be|l(?:eop|iz))ar|m(?:usical_key|ortar_)boar|(?:drop_of_bl|canned_f)oo|c(?:apital_abc|upi)|person_bal|(?:black_bi|(?:cust|plac)a)r|(?:clip|key)boar|mermai|pea_po|worrie|po(?:la|u)n|threa|dv)d|(?:(?:(?:face_with_open_eyes_and_hand_over|face_with_diagonal|open|no)_mou|h(?:and_over_mou|yacin)|mammo)t|running_shirt_with_sas|(?:(?:fishing_pole_and_|blow)fi|(?:tropical_f|petri_d)i|(?:paint|tooth)bru|banglade|jellyfi)s|(?:camera_fl|wavy_d)as|triump|menora|pouc|blus|watc|das|has)h|(?:s(?:o(?:(?:uth_georgia_south_sandwich|lomon)_island|ck)|miling_face_with_three_heart|t_kitts_nevi|weat_drop|agittariu|c(?:orpiu|issor)|ymbol|hort)|twisted_rightwards_arrow|(?:northern_mariana|heard_mcdonald|(?:british_virgi|us_virgi|pitcair|cayma)n|turks_caicos|us_outlying|(?:falk|a)land|marshall|c(?:anary|ocos)|faroe)_island|(?:face_holding_back_tea|(?:c(?:ard_index_divid|rossed_fing)|pinched_fing)e|night_with_sta)r|(?:two_(?:wo)?men_holding|people_holding|heart|open)_hand|(?:sunrise_over_mountai|(?:congratul|united_n)atio|jea)n|(?:caribbean_)?netherland|(?:f(?:lower_playing_car|ace_in_clou)|crossed_swor|prayer_bea)d|(?:money_with_win|nest_with_eg|crossed_fla|hotsprin)g|revolving_heart|(?:high_brightne|(?:expression|wire)le|(?:tumbler|wine)_gla|milk_gla|compa|dre)s|performing_art|earth_america|orthodox_cros|l(?:ow_brightnes|a(?:tin_cros|o)|ung)|no_pedestrian|c(?:ontrol_kno|lu)b|b(?:ookmark_tab|rick|ean)|nesting_doll|cook_island|(?:fleur_de_l|tenn)i|(?:o(?:ncoming_b|phiuch|ctop)|hi(?:ppopotam|bisc)|trolleyb|m(?:(?:rs|x)_cla|auriti|inib)|belar|cact|abac|(?:cyp|tau)r)u|medal_sport|(?:chopstic|firewor)k|rhinocero|(?:p(?:aw_prin|eanu)|footprin)t|two_heart|princes|(?:hondur|baham)a|barbado|aquariu|c(?:ustom|hain)|maraca|comoro|flag|wale|hug|vh)s|(?:(?:diamond_shape_with_a_dot_ins|playground_sl)id|(?:(?:first_quarter|last_quarter|full|new)_moon_with|(?:zipper|money)_mouth|dotted_line|upside_down|c(?:rying_c|owboy_h)at|(?:disguis|nauseat)ed|neutral|monocle|panda|tired|woozy|clown|nerd|zany|fox)_fac|s(?:t(?:uck_out_tongue_winking_ey|eam_locomotiv)|(?:lightly_(?:frown|smil)|neez|h(?:ush|ak))ing_fac|(?:tudio_micropho|(?:hinto_shr|lot_mach)i|ierra_leo|axopho)n|mall_airplan|un_with_fac|a(?:luting_fac|tellit|k)|haved_ic|y(?:nagogu|ring)|n(?:owfl)?ak|urinam|pong)|(?:black_(?:medium_)?small|white_(?:(?:medium_)?small|large)|(?:black|white)_medium|black_large|orange|purple|yellow|b(?:rown|lue)|red)_squar|(?:(?:perso|woma)n_with_|man_with_)?probing_can|(?:p(?:ut_litter_in_its_pl|outing_f)|frowning_f|cold_f|wind_f|hot_f)ac|(?:arrows_c(?:ounterc)?lockwi|computer_mou|derelict_hou|carousel_hor|c(?:ity_sunri|hee)|heartpul|briefca|racehor|pig_no|lacros)s|(?:(?:face_with_head_band|ideograph_advant|adhesive_band|under|pack)a|currency_exchan|l(?:eft_l)?ugga|woman_jud|name_bad|man_jud|jud)g|face_with_peeking_ey|(?:(?:e(?:uropean_post_off|ar_of_r)|post_off)i|information_sour|ambulan)c|artificial_satellit|(?:busts?_in_silhouet|(?:vulcan_sal|parach)u|m(?:usical_no|ayot)|ro(?:ller_ska|set)|timor_les|ice_ska)t|(?:(?:incoming|red)_envelo|s(?:ao_tome_princi|tethosco)|(?:micro|tele)sco|citysca)p|(?:(?:(?:convenience|department)_st|musical_sc)o|f(?:light_depar|ramed_pic)tu|love_you_gestu|heart_on_fi|japanese_og|cote_divoi|perseve|singapo)r|b(?:ullettrain_sid|eliz|on)|(?:(?:female_|male_)?dete|radioa)ctiv|(?:christmas|deciduous|evergreen|tanabata|palm)_tre|(?:vibration_mo|cape_ver)d|(?:fortune_cook|neckt|self)i|(?:fork_and_)?knif|athletic_sho|(?:p(?:lead|arty)|drool|curs|melt|yawn|ly)ing_fac|vomiting_fac|(?:(?:c(?:urling_st|ycl)|meat_on_b|repeat_|headst)o|(?:fire_eng|tanger|ukra)i|rice_sce|(?:micro|i)pho|champag|pho)n|(?:cricket|video)_gam|(?:boxing_glo|oli)v|(?:d(?:ragon|izzy)|monkey)_fac|(?:m(?:artin|ozamb)iq|fond)u|wind_chim|test_tub|flat_sho|m(?:a(?:ns_sho|t)|icrob|oos|ut)|(?:handsh|fish_c|moon_c|cupc)ak|nail_car|zimbabw|ho(?:neybe|l)|ice_cub|airplan|pensiv|c(?:a(?:n(?:dl|o)|k)|o(?:ffe|oki))|tongu|purs|f(?:lut|iv)|d(?:at|ov)|n(?:iu|os)|kit|rag|ax)e|(?:(?:british_indian_ocean_territo|(?:plate_with_cutl|batt)e|medal_milita|low_batte|hunga|wea)r|family_(?:woman_(?:woman_(?:girl|boy)|girl|boy)|man_(?:woman_(?:girl|boy)|man_(?:girl|boy)|girl|boy))_bo|person_feeding_bab|woman_feeding_bab|s(?:u(?:spension_railwa|nn)|t(?:atue_of_libert|_barthelem|rawberr))|(?:m(?:ountain_cable|ilky_)|aerial_tram)wa|articulated_lorr|man_feeding_bab|mountain_railwa|partly_sunn|(?:vatican_c|infin)it|(?:outbox_tr|inbox_tr|birthd|motorw|paragu|urugu|norw|x_r)a|butterfl|ring_buo|t(?:urke|roph)|angr|fogg)y|(?:(?:perso|woma)n_in_motorized_wheelchai|(?:(?:notebook_with_decorative_c|four_leaf_cl)ov|(?:index_pointing_at_the_vie|white_flo)w|(?:face_with_thermome|non\-potable_wa|woman_firefigh|desktop_compu|m(?:an_firefigh|otor_scoo)|(?:ro(?:ller_coa|o)|oy)s|potable_wa|kick_scoo|thermome|firefigh|helicop|ot)t|(?:woman_factory_wor|(?:woman_office|woman_health|health)_wor|man_(?:factory|office|health)_wor|(?:factory|office)_wor|rice_crac|black_jo|firecrac)k|telephone_receiv|(?:palms_up_toget|f(?:ire_extinguis|eat)|teac)h|(?:(?:open_)?file_fol|level_sli)d|police_offic|f(?:lying_sauc|arm)|woman_teach|roll_of_pap|(?:m(?:iddle_f|an_s)in|woman_sin|hambur|plun|dag)g|do_not_litt|wilted_flow|woman_farm|man_(?:teach|farm)|(?:bell_pe|hot_pe|fli)pp|l(?:o(?:udspeak|ve_lett|bst)|edg|add)|tokyo_tow|c(?:ucumb|lapp|anc)|b(?:e(?:ginn|av)|adg)|print|hamst)e|(?:perso|woma)n_in_manual_wheelchai|m(?:an(?:_in_motorized|(?:_in_man)?ual)|otorized)_wheelchai|(?:person_(?:white|curly|red)_|wheelc)hai|triangular_rule|(?:film_project|e(?:l_salv|cu)ad|elevat|tract|anch)o|s(?:traight_rul|pace_invad|crewdriv|nowboard|unflow|peak|wimm|ing|occ|how|urf|ki)e|r(?:ed_ca|unne|azo)|d(?:o(?:lla|o)|ee)|barbe)r|(?:(?:cloud_with_(?:lightning_and_)?ra|japanese_gobl|round_pushp|liechtenste|mandar|pengu|dolph|bahra|pushp|viol)i|(?:couple(?:_with_heart_wo|kiss_)man|construction_worker|(?:mountain_bik|bow|row)ing|lotus_position|(?:w(?:eight_lift|alk)|climb)ing|white_haired|curly_haired|raising_hand|super(?:villain|hero)|red_haired|basketball|s(?:(?:wimm|urf)ing|assy)|haircut|no_good|(?:vampir|massag)e|b(?:iking|ald)|zombie|fairy|mage|elf|ng)_(?:wo)?ma|(?:(?:couple_with_heart_man|isle_of)_m|(?:couplekiss_woman_|(?:b(?:ouncing_ball|lond_haired)|tipping_hand|pregnant|kneeling|deaf)_|frowning_|s(?:tanding|auna)_|po(?:uting_|lice)|running_|blonde_|o(?:lder|k)_)wom|(?:perso|woma)n_with_turb|(?:b(?:ouncing_ball|lond_haired)|tipping_hand|pregnant|kneeling|deaf)_m|f(?:olding_hand_f|rowning_m)|man_with_turb|(?:turkmen|afghan|pak)ist|s(?:tanding_m|(?:outh_s)?ud|auna_m)|po(?:uting_|lice)m|running_m|azerbaij|k(?:yrgyz|azakh)st|tajikist|uzbekist|o(?:lder_m|k_m|ce)|(?:orang|bh)ut|taiw|jord)a|s(?:mall_red_triangle_dow|(?:valbard_jan_may|int_maart|ev)e|afety_pi|top_sig|t_marti|(?:corpi|po|o)o|wede)|(?:heavy_(?:d(?:ivision|ollar)|equals|minus|plus)|no_entry|female|male)_sig|(?:arrow_(?:heading|double)_d|p(?:erson_with_cr|oint_d)|arrow_up_d|thumbsd)ow|(?:house_with_gard|l(?:ock_with_ink_p|eafy_gre)|dancing_(?:wo)?m|fountain_p|keycap_t|chick|ali|yem|od)e|(?:izakaya|jack_o)_lanter|(?:funeral_u|(?:po(?:stal_h|pc)|capric)o|unico)r|chess_paw|b(?:a(?:llo|c)o|eni|rai)|l(?:anter|io)|c(?:o(?:ff)?i|row)|melo|rame|oma|yar)n|(?:s(?:t(?:uck_out_tongue_closed_ey|_vincent_grenadin)|kull_and_crossbon|unglass|pad)|(?:french_souther|palestinia)n_territori|(?:face_with_spiral|kissing_smiling)_ey|united_arab_emirat|kissing_closed_ey|(?:clinking_|dark_sun|eye)glass|(?:no_mobile_|head)phon|womans_cloth|b(?:allet_sho|lueberri)|philippin|(?:no_bicyc|seychel)l|roll_ey|(?:cher|a)ri|p(?:ancak|isc)|maldiv|leav)es|(?:f(?:amily_(?:woman_(?:woman_)?|man_(?:woman_|man_)?)girl_gir|earfu)|(?:woman_playing_hand|m(?:an_playing_hand|irror_)|c(?:onfetti|rystal)_|volley|track|base|8)bal|(?:(?:m(?:ailbox_with_(?:no_)?m|onor)|cockt|e\-m)a|(?:person|bride|woman)_with_ve|man_with_ve|light_ra|braz|ema)i|(?:transgender|baby)_symbo|passport_contro|(?:arrow_(?:down|up)_sm|rice_b|footb)al|(?:dromedary_cam|ferris_whe|love_hot|high_he|pretz|falaf|isra)e|page_with_cur|me(?:dical_symbo|ta)|(?:n(?:ewspaper_ro|o_be)|bellhop_be)l|rugby_footbal|s(?:chool_satche|(?:peak|ee)_no_evi|oftbal|crol|anda|nai|hel)|(?:peace|atom)_symbo|hear_no_evi|cora|hote|bage|labe|rof|ow)l|(?:(?:negative_squared_cross|heavy_exclamation|part_alternation)_mar|(?:eight_spoked_)?asteris|(?:ballot_box_with_che|(?:(?:mantelpiece|alarm|timer)_c|un)lo|(?:ha(?:(?:mmer_and|ir)_p|tch(?:ing|ed)_ch)|baby_ch|joyst)i|railway_tra|lipsti|peaco)c|heavy_check_mar|white_check_mar|tr(?:opical_drin|uc)|national_par|pickup_truc|diving_mas|floppy_dis|s(?:tar_struc|hamroc|kun|har)|chipmun|denmar|duc|hoo|lin)k|(?:leftwards_arrow_with_h|arrow_right_h|(?:o(?:range|pen)|closed|blue)_b)ook|(?:woman_playing_water_pol|m(?:an(?:_(?:playing_water_pol|with_gua_pi_ma|in_tuxed)|g)|ontenegr|o(?:roc|na)c|e(?:xic|tr|m))|(?:perso|woma)n_in_tuxed|(?:trinidad_toba|vir)g|water_buffal|b(?:urkina_fas|a(?:mbo|nj)|ent)|puerto_ric|water_pol|flaming|kangaro|(?:mosqu|burr)it|(?:avoc|torn)ad|curaca|lesoth|potat|ko(?:sov|k)|tomat|d(?:ang|od)|yo_y|hoch|t(?:ac|og)|zer)o|(?:c(?:entral_african|zech)|dominican)_republic|(?:eight_pointed_black_s|six_pointed_s|qa)tar|(?:business_suit_levitat|(?:classical_buil|breast_fee)d|(?:woman_cartwhee|m(?:an_(?:cartwhee|jugg)|en_wrest)|women_wrest|woman_jugg|face_exha|cartwhee|wrest|dump)l|c(?:hildren_cross|amp)|woman_facepalm|woman_shrugg|man_(?:facepalm|shrugg)|people_hugg|(?:person_fe|woman_da|man_da)nc|fist_oncom|horse_rac|(?:no_smo|thin)k|laugh|s(?:eedl|mok)|park|w(?:arn|edd))ing|f(?:a(?:mily(?:_(?:woman_(?:woman_(?:girl|boy)|girl|boy)|man_(?:woman_(?:girl|boy)|man_(?:girl|boy)|girl|boy)))?|ctory)|o(?:u(?:ntain|r)|ot|g)|r(?:owning)?|i(?:re|s[ht])|ly|u)|(?:(?:(?:information_desk|handball|bearded)_|(?:frowning|ok)_|juggling_|mer)pers|(?:previous_track|p(?:lay_or_p)?ause|black_square|white_square|next_track|r(?:ecord|adio)|eject)_butt|(?:wa[nx]ing_(?:crescent|gibbous)_m|bowl_with_sp|crescent_m|racc)o|(?:b(?:ouncing_ball|lond_haired)|tipping_hand|pregnant|kneeling|deaf)_pers|s(?:t(?:_pierre_miquel|op_butt|ati)|tanding_pers|peech_ballo|auna_pers)|r(?:eminder_r)?ibb|thought_ballo|watermel|badmint|c(?:amero|ray)|le(?:ban|m)|oni|bis)on|(?:heavy_heart_exclama|building_construc|heart_decora|exclama)tion|(?:(?:triangular_flag_on_po|(?:(?:woman_)?technolog|m(?:ountain_bicycl|an_technolog)|bicycl)i|(?:wo)?man_scienti|(?:wo)?man_arti|s(?:afety_ve|cienti)|empty_ne)s|(?:vertical_)?traffic_ligh|(?:rescue_worker_helm|military_helm|nazar_amul|city_suns|wastebask|dropl|t(?:rump|oil)|bouqu|buck|magn|secr)e|one_piece_swimsui|(?:(?:arrow_(?:low|upp)er|point)_r|bridge_at_n|copyr|mag_r)igh|(?:bullettrain_fro|(?:potted_pl|croiss|e(?:ggpl|leph))a)n|s(?:t(?:ar_and_cresc|ud)en|cream_ca|mi(?:ley?|rk)_ca|(?:peed|ail)boa|hir)|(?:arrow_(?:low|upp)er|point)_lef|woman_astronau|r(?:o(?:tating_ligh|cke)|eceip)|heart_eyes_ca|man_astronau|(?:woman_stud|circus_t|man_stud|trid)en|(?:ringed_pla|file_cabi)ne|nut_and_bol|(?:older_)?adul|k(?:i(?:ssing_ca|wi_frui)|uwai|no)|(?:pouting_c|c(?:ut_of_m|old_sw)e|womans_h|montserr|(?:(?:motor_|row)b|lab_c)o|heartbe|toph)a|(?:woman_pil|honey_p|man_pil|[cp]arr|teap|rob)o|hiking_boo|arrow_lef|fist_righ|flashligh|f(?:ist_lef|ee)|black_ca|astronau|(?:c(?:hest|oco)|dough)nu|innocen|joy_ca|artis|(?:acce|egy)p|co(?:me|a)|pilo)t|(?:heavy_multiplication_|t\-re)x|(?:s(?:miling_face_with_te|piral_calend)|oncoming_police_c|chocolate_b|ra(?:ilway|cing)_c|police_c|polar_be|teddy_be|madagasc|blue_c|calend|myanm)ar|c(?:l(?:o(?:ud(?:_with_lightning)?|ck(?:1[0-2]?|[2-9]))|ap)?|o(?:uple(?:_with_heart|kiss)?|nstruction|mputer|ok|p|w)|a(?:r(?:d_index)?|mera)|r(?:icket|y)|h(?:art|ild))|(?:m(?:artial_arts_unifo|echanical_a)r|(?:cherry_)?blosso|b(?:aggage_clai|roo)|ice_?crea|facepal|mushroo|restroo|vietna|dru|yu)m|(?:woman_with_headscar|m(?:obile_phone_of|aple_lea)|fallen_lea|wol)f|(?:(?:closed_lock_with|old)_|field_hoc|ice_hoc|han|don)key|g(?:lobe_with_meridians|r(?:e(?:y_(?:exclama|ques)tion|e(?:n(?:_(?:square|circle|salad|apple|heart|book)|land)|ce)|y_heart|nada)|i(?:mac|nn)ing|apes)|u(?:inea_bissau|ernsey|am|n)|(?:(?:olfing|enie)_(?:wo)?|uards(?:wo)?)man|(?:inger_roo|oal_ne|hos)t|(?:uadeloup|ame_di|iraff|oos)e|ift_heart|i(?:braltar|rl)|(?:uatemal|(?:eorg|amb)i|orill|uyan|han)a|uide_dog|(?:oggl|lov)es|arlic|emini|uitar|abon|oat|ear|b)|construction_worker|(?:(?:envelope_with|bow_and)_ar|left_right_ar|raised_eyeb)row|(?:(?:oncoming_automob|crocod)i|right_anger_bubb|l(?:eft_speech_bubb|otion_bott|ady_beet)|congo_brazzavil|eye_speech_bubb|(?:large_blue|orange|purple|yellow|brown)_circ|(?:(?:european|japanese)_cas|baby_bot)t|b(?:alance_sca|eet)|s(?:ewing_need|weat_smi)|(?:black|white|red)_circ|(?:motor|re)cyc|pood|turt|tama|waff|musc|eag)le|first_quarter_moon|s(?:m(?:all_red_triangle|i(?:ley?|rk))|t(?:uck_out_tongue|ar)|hopping|leeping|p(?:arkle|ider)|unrise|nowman|chool|cream|k(?:ull|i)|weat|ix|a)|(?:(?:b(?:osnia_herzegovi|ana)|wallis_futu|(?:french_gui|botsw)a|argenti|st_hele)n|(?:(?:equatorial|papua_new)_guin|north_kor|eritr)e|t(?:ristan_da_cunh|ad)|(?:(?:(?:french_poly|indo)ne|tuni)s|(?:new_caledo|ma(?:urita|cedo)|lithua|(?:tanz|alb|rom)a|arme|esto)n|diego_garc|s(?:audi_arab|t_luc|lov(?:ak|en)|omal|erb)|e(?:arth_as|thiop)|m(?:icrone|alay)s|(?:austra|mongo)l|c(?:ambod|roat)|(?:bulga|alge)r|(?:colom|nami|zam)b|boliv|l(?:iber|atv))i|(?:wheel_of_dhar|cine|pana)m|(?:(?:(?:closed|beach|open)_)?umbrel|ceuta_melil|venezue|ang(?:uil|o)|koa)l|c(?:ongo_kinshas|anad|ub)|(?:western_saha|a(?:mpho|ndor)|zeb)r|american_samo|video_camer|m(?:o(?:vie_camer|ldov)|alt|eg)|(?:earth_af|costa_)ric|s(?:outh_afric|ri_lank|a(?:mo|nt))|bubble_te|(?:antarct|jama)ic|ni(?:caragu|geri|nj)|austri|pi(?:nat|zz)|arub|k(?:eny|aab)|indi|u7a7|l(?:lam|ib[ry])|dn)a|l(?:ast_quarter_moon|o(?:tus|ck)|ips|eo)|(?:hammer_and_wren|c(?:ockroa|hur)|facepun|wren|crut|pun)ch|s(?:nowman_with_snow|ignal_strength|weet_potato|miling_imp|p(?:ider_web|arkle[rs])|w(?:im_brief|an)|a(?:n(?:_marino|dwich)|lt)|topwatch|t(?:a(?:dium|r[2s])|ew)|l(?:e(?:epy|d)|oth)|hrimp|yria|carf|(?:hee|oa)p|ea[lt]|h(?:oe|i[pt])|o[bs])|(?:s(?:tuffed_flatbre|p(?:iral_notep|eaking_he))|(?:exploding_h|baguette_br|flatbr)e)ad|(?:arrow_(?:heading|double)_u|(?:p(?:lace_of_wor|assenger_)sh|film_str|tul)i|page_facing_u|biting_li|(?:billed_c|world_m)a|mouse_tra|(?:curly_lo|busst)o|thumbsu|lo(?:llip)?o|clam|im)p|(?:anatomical|light_blue|sparkling|kissing|mending|orange|purple|yellow|broken|b(?:rown|l(?:ack|ue))|pink)_heart|(?:(?:transgender|black)_fla|mechanical_le|(?:checkered|pirate)_fla|electric_plu|rainbow_fla|poultry_le|service_do|white_fla|luxembour|fried_eg|moneyba|h(?:edgeh|otd)o|shru)g|(?:cloud_with|mountain)_snow|(?:(?:antigua_barb|berm)u|(?:kh|ug)an|rwan)da|(?:3r|2n)d_place_medal|1(?:st_place_medal|234|00)|lotus_position|(?:w(?:eight_lift|alk)|climb)ing|(?:(?:cup_with_str|auto_ricksh)a|carpentry_sa|windo|jigsa)w|(?:(?:couch_and|diya)_la|f(?:ried_shri|uelpu))mp|(?:woman_mechan|man_mechan|alemb)ic|(?:european_un|accord|collis|reun)ion|(?:flight_arriv|hospit|portug|seneg|nep)al|card_file_box|(?:(?:oncoming_)?tax|m(?:o(?:unt_fuj|ya)|alaw)|s(?:paghett|ush|ar)|b(?:r(?:occol|une)|urund)|(?:djibou|kiriba)t|hait|fij)i|(?:shopping_c|white_he|bar_ch)art|d(?:isappointed|ominica|e(?:sert)?)|raising_hand|super(?:villain|hero)|b(?:e(?:verage_box|ers|d)|u(?:bbles|lb|g)|i(?:k(?:ini|e)|rd)|o(?:o(?:ks|t)|a[rt]|y)|read|a[cn]k)|ra(?:ised_hands|bbit2|t)|(?:hindu_tem|ap)ple|thong_sandal|a(?:r(?:row_(?:right|down|up)|t)|bc?|nt)?|r(?:a(?:i(?:sed_hand|nbow)|bbit|dio|m)|u(?:nning)?|epeat|i(?:ng|ce)|o(?:ck|se))|takeout_box|(?:flying_|mini)disc|(?:(?:interrob|yin_y)a|b(?:o(?:omera|wli)|angba)|(?:ping_p|hong_k)o|calli|mahjo)ng|b(?:a(?:llot_box|sket|th?|by)|o(?:o(?:k(?:mark)?|m)|w)|u(?:tter|s)|e(?:ll|er?|ar))?|heart_eyes|basketball|(?:paperclip|dancer|ticket)s|point_up_2|(?:wo)?man_cook|n(?:ew(?:spaper)?|o(?:tebook|_entry)|iger)|t(?:e(?:lephone|a)|o(?:oth|p)|r(?:oll)?|wo)|h(?:o(?:u(?:rglass|se)|rse)|a(?:mmer|nd)|eart)|paperclip|full_moon|(?:b(?:lack_ni|athtu|om)|her)b|(?:long|oil)_drum|pineapple|(?:clock(?:1[0-2]?|[2-9])3|u6e8)0|p(?:o(?:int_up|ut)|r(?:ince|ay)|i(?:ck|g)|en)|e(?:nvelope|ight|u(?:ro)?|gg|ar|ye|s)|m(?:o(?:u(?:ntain|se)|nkey|on)|echanic|a(?:ilbox|g|n)|irror)?|new_moon|d(?:iamonds|olls|art)|question|k(?:iss(?:ing)?|ey)|haircut|no_good|(?:vampir|massag)e|g(?:olf(?:ing)?|u(?:inea|ard)|e(?:nie|m)|ift|rin)|h(?:a(?:ndbag|msa)|ouses|earts|ut)|postbox|toolbox|(?:pencil|t(?:rain|iger)|whale|cat|dog)2|belgium|(?:volca|kimo)no|(?:vanuat|tuval|pala|naur|maca)u|tokelau|o(?:range|ne?|m|k)?|office|dancer|ticket|dragon|pencil|zombie|w(?:o(?:mens|rm|od)|ave|in[gk]|c)|m(?:o(?:sque|use2)|e(?:rman|ns)|a(?:li|sk))|jersey|tshirt|w(?:heel|oman)|dizzy|j(?:apan|oy)|t(?:rain|iger)|whale|fairy|a(?:nge[lr]|bcd|tm)|c(?:h(?:a(?:ir|d)|ile)|a(?:ndy|mel)|urry|rab|o(?:rn|ol|w2)|[dn])|p(?:ager|e(?:a(?:ch|r)|ru)|i(?:g2|ll|e)|oop)|n(?:otes|ine)|t(?:onga|hree|ent|ram|[mv])|f(?:erry|r(?:ies|ee|og)|ax)|u(?:7(?:533|981|121)|5(?:5b6|408|272)|6(?:307|70[89]))|mage|e(?:yes|nd)|i(?:ra[nq]|t)|cat|dog|elf|z(?:zz|ap)|yen|j(?:ar|p)|leg|id|u[kps]|ng|o[2x]|vs|kr|[\+\x2D]1|x|v)(:)</string>
2146 <key>name</key>
2147 <string>string.emoji.mdx</string>
2148 <key>captures</key>
2149 <dict>
2150 <key>1</key>
2151 <dict>
2152 <key>name</key>
2153 <string>punctuation.definition.gemoji.begin.mdx</string>
2154 </dict>
2155 <key>2</key>
2156 <dict>
2157 <key>name</key>
2158 <string>keyword.control.gemoji.mdx</string>
2159 </dict>
2160 <key>3</key>
2161 <dict>
2162 <key>name</key>
2163 <string>punctuation.definition.gemoji.end.mdx</string>
2164 </dict>
2165 </dict>
2166 </dict>
2167 <key>extension-github-mention</key>
2168 <dict>
2169 <key>match</key>
2170 <string>(?&lt;![0-9A-Za-z_`])(@)((?:[0-9A-Za-z][0-9A-Za-z-]{0,38})(?:\/(?:[0-9A-Za-z][0-9A-Za-z-]{0,38}))?)(?![0-9A-Za-z_`])</string>
2171 <key>name</key>
2172 <string>string.mention.mdx</string>
2173 <key>captures</key>
2174 <dict>
2175 <key>1</key>
2176 <dict>
2177 <key>name</key>
2178 <string>punctuation.definition.mention.begin.mdx</string>
2179 </dict>
2180 <key>2</key>
2181 <dict>
2182 <key>name</key>
2183 <string>string.other.link.mention.mdx</string>
2184 </dict>
2185 </dict>
2186 </dict>
2187 <key>extension-github-reference</key>
2188 <dict>
2189 <key>patterns</key>
2190 <array>
2191 <dict>
2192 <key>match</key>
2193 <string>(?&lt;![0-9A-Za-z_])(?:((?i:ghsa-|cve-))([A-Za-z0-9]+)|((?i:gh-|#))([0-9]+))(?![0-9A-Za-z_])</string>
2194 <key>name</key>
2195 <string>string.reference.mdx</string>
2196 <key>captures</key>
2197 <dict>
2198 <key>1</key>
2199 <dict>
2200 <key>name</key>
2201 <string>punctuation.definition.reference.begin.mdx</string>
2202 </dict>
2203 <key>2</key>
2204 <dict>
2205 <key>name</key>
2206 <string>string.other.link.reference.security-advisory.mdx</string>
2207 </dict>
2208 <key>3</key>
2209 <dict>
2210 <key>name</key>
2211 <string>punctuation.definition.reference.begin.mdx</string>
2212 </dict>
2213 <key>4</key>
2214 <dict>
2215 <key>name</key>
2216 <string>string.other.link.reference.issue-or-pr.mdx</string>
2217 </dict>
2218 </dict>
2219 </dict>
2220 <dict>
2221 <key>match</key>
2222 <string>(?&lt;![^\t\n\r \(@\[\{])((?:[0-9A-Za-z][0-9A-Za-z-]{0,38})(?:\/(?:(?:\.git[0-9A-Za-z_-]|\.(?!git)|[0-9A-Za-z_-])+))?)(#)([0-9]+)(?![0-9A-Za-z_])</string>
2223 <key>name</key>
2224 <string>string.reference.mdx</string>
2225 <key>captures</key>
2226 <dict>
2227 <key>1</key>
2228 <dict>
2229 <key>name</key>
2230 <string>string.other.link.reference.user.mdx</string>
2231 </dict>
2232 <key>2</key>
2233 <dict>
2234 <key>name</key>
2235 <string>punctuation.definition.reference.begin.mdx</string>
2236 </dict>
2237 <key>3</key>
2238 <dict>
2239 <key>name</key>
2240 <string>string.other.link.reference.issue-or-pr.mdx</string>
2241 </dict>
2242 </dict>
2243 </dict>
2244 </array>
2245 </dict>
2246 <key>extension-math-flow</key>
2247 <dict>
2248 <key>begin</key>
2249 <string>(?:^|\G)[\t ]*(\${2,})([^\n\r\$]*)$</string>
2250 <key>beginCaptures</key>
2251 <dict>
2252 <key>1</key>
2253 <dict>
2254 <key>name</key>
2255 <string>string.other.begin.math.flow.mdx</string>
2256 </dict>
2257 <key>2</key>
2258 <dict>
2259 <key>patterns</key>
2260 <array>
2261 <dict>
2262 <key>include</key>
2263 <string>#markdown-string</string>
2264 </dict>
2265 </array>
2266 </dict>
2267 </dict>
2268 <key>contentName</key>
2269 <string>markup.raw.math.flow.mdx</string>
2270 <key>end</key>
2271 <string>(\1)(?:[\t ]*$)</string>
2272 <key>endCaptures</key>
2273 <dict>
2274 <key>1</key>
2275 <dict>
2276 <key>name</key>
2277 <string>string.other.end.math.flow.mdx</string>
2278 </dict>
2279 </dict>
2280 <key>name</key>
2281 <string>markup.code.other.mdx</string>
2282 </dict>
2283 <key>extension-math-text</key>
2284 <dict>
2285 <key>match</key>
2286 <string>(?&lt;!\$)(\${2,})(?!\$)(.+?)(?&lt;!\$)(\1)(?!\$)</string>
2287 <key>captures</key>
2288 <dict>
2289 <key>1</key>
2290 <dict>
2291 <key>name</key>
2292 <string>string.other.begin.math.mdx</string>
2293 </dict>
2294 <key>2</key>
2295 <dict>
2296 <key>name</key>
2297 <string>markup.raw.math.mdx markup.inline.raw.math.mdx</string>
2298 </dict>
2299 <key>3</key>
2300 <dict>
2301 <key>name</key>
2302 <string>string.other.end.math.mdx</string>
2303 </dict>
2304 </dict>
2305 </dict>
2306 <key>extension-mdx-esm</key>
2307 <dict>
2308 <key>name</key>
2309 <string>meta.embedded.tsx</string>
2310 <key>begin</key>
2311 <string>(?:^|\G)(?=(?i:export|import)[ ])</string>
2312 <key>end</key>
2313 <string>^(?=[\t ]*$)|$</string>
2314 <key>patterns</key>
2315 <array>
2316 <dict>
2317 <key>include</key>
2318 <string>source.tsx#statements</string>
2319 </dict>
2320 </array>
2321 </dict>
2322 <key>extension-mdx-expression-flow</key>
2323 <dict>
2324 <key>begin</key>
2325 <string>(?:^|\G)[\t ]*(\{)(?!.*\}[\t ]*.)</string>
2326 <key>beginCaptures</key>
2327 <dict>
2328 <key>1</key>
2329 <dict>
2330 <key>name</key>
2331 <string>string.other.begin.expression.mdx.js</string>
2332 </dict>
2333 </dict>
2334 <key>contentName</key>
2335 <string>meta.embedded.tsx</string>
2336 <key>end</key>
2337 <string>(\})(?:[\t ]*$)</string>
2338 <key>endCaptures</key>
2339 <dict>
2340 <key>1</key>
2341 <dict>
2342 <key>name</key>
2343 <string>string.other.begin.expression.mdx.js</string>
2344 </dict>
2345 </dict>
2346 <key>patterns</key>
2347 <array>
2348 <dict>
2349 <key>include</key>
2350 <string>source.tsx#expression</string>
2351 </dict>
2352 </array>
2353 </dict>
2354 <key>extension-mdx-expression-text</key>
2355 <dict>
2356 <key>begin</key>
2357 <string>\{</string>
2358 <key>beginCaptures</key>
2359 <dict>
2360 <key>0</key>
2361 <dict>
2362 <key>name</key>
2363 <string>string.other.begin.expression.mdx.js</string>
2364 </dict>
2365 </dict>
2366 <key>contentName</key>
2367 <string>meta.embedded.tsx</string>
2368 <key>end</key>
2369 <string>\}</string>
2370 <key>endCaptures</key>
2371 <dict>
2372 <key>0</key>
2373 <dict>
2374 <key>name</key>
2375 <string>string.other.begin.expression.mdx.js</string>
2376 </dict>
2377 </dict>
2378 <key>patterns</key>
2379 <array>
2380 <dict>
2381 <key>include</key>
2382 <string>source.tsx#expression</string>
2383 </dict>
2384 </array>
2385 </dict>
2386 <key>extension-mdx-jsx-flow</key>
2387 <dict>
2388 <key>begin</key>
2389 <string>(?&lt;=^|\G|\&gt;)[\t ]*(&lt;)(?=(?![\t\n\r ]))(?:\s*(/))?(?:\s*(?:(?:((?:[_$[:alpha:]][-_$[:alnum:]]*))\s*(:)\s*((?:[_$[:alpha:]][-_$[:alnum:]]*)))|((?:(?:[_$[:alpha:]][_$[:alnum:]]*)(?:\s*\.\s*(?:[_$[:alpha:]][-_$[:alnum:]]*))+))|((?:[_$[:upper:]][_$[:alnum:]]*))|((?:[_$[:alpha:]][-_$[:alnum:]]*)))(?=[\s\/\&gt;\{]))?</string>
2390 <key>beginCaptures</key>
2391 <dict>
2392 <key>1</key>
2393 <dict>
2394 <key>name</key>
2395 <string>punctuation.definition.tag.end.jsx</string>
2396 </dict>
2397 <key>2</key>
2398 <dict>
2399 <key>name</key>
2400 <string>punctuation.definition.tag.closing.jsx</string>
2401 </dict>
2402 <key>3</key>
2403 <dict>
2404 <key>name</key>
2405 <string>entity.name.tag.namespace.jsx</string>
2406 </dict>
2407 <key>4</key>
2408 <dict>
2409 <key>name</key>
2410 <string>punctuation.separator.namespace.jsx</string>
2411 </dict>
2412 <key>5</key>
2413 <dict>
2414 <key>name</key>
2415 <string>entity.name.tag.local.jsx</string>
2416 </dict>
2417 <key>6</key>
2418 <dict>
2419 <key>name</key>
2420 <string>support.class.component.jsx</string>
2421 </dict>
2422 <key>7</key>
2423 <dict>
2424 <key>name</key>
2425 <string>support.class.component.jsx</string>
2426 </dict>
2427 <key>8</key>
2428 <dict>
2429 <key>name</key>
2430 <string>entity.name.tag.jsx</string>
2431 </dict>
2432 </dict>
2433 <key>patterns</key>
2434 <array>
2435 <dict>
2436 <key>include</key>
2437 <string>source.tsx#jsx-tag-attribute-name</string>
2438 </dict>
2439 <dict>
2440 <key>include</key>
2441 <string>source.tsx#jsx-tag-attribute-assignment</string>
2442 </dict>
2443 <dict>
2444 <key>include</key>
2445 <string>source.tsx#jsx-string-double-quoted</string>
2446 </dict>
2447 <dict>
2448 <key>include</key>
2449 <string>source.tsx#jsx-string-single-quoted</string>
2450 </dict>
2451 <dict>
2452 <key>include</key>
2453 <string>source.tsx#jsx-evaluated-code</string>
2454 </dict>
2455 <dict>
2456 <key>include</key>
2457 <string>source.tsx#jsx-tag-attributes-illegal</string>
2458 </dict>
2459 </array>
2460 <key>end</key>
2461 <string>(?:(\/)\s*)?(&gt;)</string>
2462 <key>endCaptures</key>
2463 <dict>
2464 <key>1</key>
2465 <dict>
2466 <key>name</key>
2467 <string>punctuation.definition.tag.self-closing.jsx</string>
2468 </dict>
2469 <key>2</key>
2470 <dict>
2471 <key>name</key>
2472 <string>punctuation.definition.tag.end.jsx</string>
2473 </dict>
2474 </dict>
2475 </dict>
2476 <key>extension-mdx-jsx-text</key>
2477 <dict>
2478 <key>begin</key>
2479 <string>(&lt;)(?=(?![\t\n\r ]))(?:\s*(/))?(?:\s*(?:(?:((?:[_$[:alpha:]][-_$[:alnum:]]*))\s*(:)\s*((?:[_$[:alpha:]][-_$[:alnum:]]*)))|((?:(?:[_$[:alpha:]][_$[:alnum:]]*)(?:\s*\.\s*(?:[_$[:alpha:]][-_$[:alnum:]]*))+))|((?:[_$[:upper:]][_$[:alnum:]]*))|((?:[_$[:alpha:]][-_$[:alnum:]]*)))(?=[\s\/\&gt;\{]))?</string>
2480 <key>beginCaptures</key>
2481 <dict>
2482 <key>1</key>
2483 <dict>
2484 <key>name</key>
2485 <string>punctuation.definition.tag.end.jsx</string>
2486 </dict>
2487 <key>2</key>
2488 <dict>
2489 <key>name</key>
2490 <string>punctuation.definition.tag.closing.jsx</string>
2491 </dict>
2492 <key>3</key>
2493 <dict>
2494 <key>name</key>
2495 <string>entity.name.tag.namespace.jsx</string>
2496 </dict>
2497 <key>4</key>
2498 <dict>
2499 <key>name</key>
2500 <string>punctuation.separator.namespace.jsx</string>
2501 </dict>
2502 <key>5</key>
2503 <dict>
2504 <key>name</key>
2505 <string>entity.name.tag.local.jsx</string>
2506 </dict>
2507 <key>6</key>
2508 <dict>
2509 <key>name</key>
2510 <string>support.class.component.jsx</string>
2511 </dict>
2512 <key>7</key>
2513 <dict>
2514 <key>name</key>
2515 <string>support.class.component.jsx</string>
2516 </dict>
2517 <key>8</key>
2518 <dict>
2519 <key>name</key>
2520 <string>entity.name.tag.jsx</string>
2521 </dict>
2522 </dict>
2523 <key>patterns</key>
2524 <array>
2525 <dict>
2526 <key>include</key>
2527 <string>source.tsx#jsx-tag-attribute-name</string>
2528 </dict>
2529 <dict>
2530 <key>include</key>
2531 <string>source.tsx#jsx-tag-attribute-assignment</string>
2532 </dict>
2533 <dict>
2534 <key>include</key>
2535 <string>source.tsx#jsx-string-double-quoted</string>
2536 </dict>
2537 <dict>
2538 <key>include</key>
2539 <string>source.tsx#jsx-string-single-quoted</string>
2540 </dict>
2541 <dict>
2542 <key>include</key>
2543 <string>source.tsx#jsx-evaluated-code</string>
2544 </dict>
2545 <dict>
2546 <key>include</key>
2547 <string>source.tsx#jsx-tag-attributes-illegal</string>
2548 </dict>
2549 </array>
2550 <key>end</key>
2551 <string>(?:(\/)\s*)?(&gt;)</string>
2552 <key>endCaptures</key>
2553 <dict>
2554 <key>1</key>
2555 <dict>
2556 <key>name</key>
2557 <string>punctuation.definition.tag.self-closing.jsx</string>
2558 </dict>
2559 <key>2</key>
2560 <dict>
2561 <key>name</key>
2562 <string>punctuation.definition.tag.end.jsx</string>
2563 </dict>
2564 </dict>
2565 </dict>
2566 <key>extension-toml</key>
2567 <dict>
2568 <key>begin</key>
2569 <string>\A\+{3}$</string>
2570 <key>end</key>
2571 <string>^\+{3}$</string>
2572 <key>beginCaptures</key>
2573 <dict>
2574 <key>0</key>
2575 <dict>
2576 <key>name</key>
2577 <string>string.other.begin.toml</string>
2578 </dict>
2579 </dict>
2580 <key>endCaptures</key>
2581 <dict>
2582 <key>0</key>
2583 <dict>
2584 <key>name</key>
2585 <string>string.other.end.toml</string>
2586 </dict>
2587 </dict>
2588 <key>contentName</key>
2589 <string>meta.embedded.toml</string>
2590 <key>patterns</key>
2591 <array>
2592 <dict>
2593 <key>include</key>
2594 <string>source.toml</string>
2595 </dict>
2596 </array>
2597 </dict>
2598 <key>extension-yaml</key>
2599 <dict>
2600 <key>begin</key>
2601 <string>\A-{3}$</string>
2602 <key>end</key>
2603 <string>^-{3}$</string>
2604 <key>beginCaptures</key>
2605 <dict>
2606 <key>0</key>
2607 <dict>
2608 <key>name</key>
2609 <string>string.other.begin.yaml</string>
2610 </dict>
2611 </dict>
2612 <key>endCaptures</key>
2613 <dict>
2614 <key>0</key>
2615 <dict>
2616 <key>name</key>
2617 <string>string.other.end.yaml</string>
2618 </dict>
2619 </dict>
2620 <key>contentName</key>
2621 <string>meta.embedded.yaml</string>
2622 <key>patterns</key>
2623 <array>
2624 <dict>
2625 <key>include</key>
2626 <string>source.yaml</string>
2627 </dict>
2628 </array>
2629 </dict>
2630 <key>whatwg-html-data-character-reference-named-terminated</key>
2631 <dict>
2632 <key>match</key>
2633 <string>(&amp;)((?:C(?:(?:o(?:unterClockwiseCo)?|lockwiseCo)ntourIntegra|cedi)|(?:(?:Not(?:S(?:quareSu(?:per|b)set|u(?:cceeds|(?:per|b)set))|Precedes|Greater|Tilde|Less)|Not(?:Righ|Lef)tTriangle|(?:Not(?:(?:Succeed|Precede|Les)s|Greater)|(?:Precede|Succeed)s|Less)Slant|SquareSu(?:per|b)set|(?:Not(?:Greater|Tilde)|Tilde|Less)Full|RightTriangle|LeftTriangle|Greater(?:Slant|Full)|Precedes|Succeeds|Superset|NotHump|Subset|Tilde|Hump)Equ|int(?:er)?c|DotEqu)a|DoubleContourIntegra|(?:n(?:short)?parall|shortparall|p(?:arall|rur))e|(?:rightarrowta|l(?:eftarrowta|ced|ata|Ata)|sced|rata|perm|rced|rAta|ced)i|Proportiona|smepars|e(?:qvpars|pars|xc|um)|Integra|suphso|rarr[pt]|n(?:pars|tg)|l(?:arr[pt]|cei)|Rarrt|(?:hybu|fora)l|ForAl|[GKLNR-Tcknt]cedi|rcei|iexc|gime|fras|[uy]um|oso|dso|ium|Ium)l|D(?:o(?:uble(?:(?:L(?:ong(?:Left)?R|eftR)ight|L(?:ongL)?eft|UpDown|Right|Up)Arrow|Do(?:wnArrow|t))|wn(?:ArrowUpA|TeeA|a)rrow)|iacriticalDot|strok|ashv|cy)|(?:(?:(?:N(?:(?:otN)?estedGreater|ot(?:Greater|Less))|Less(?:Equal)?)Great|GreaterGreat|l[lr]corn|mark|east)e|Not(?:Double)?VerticalBa|(?:Not(?:Righ|Lef)tTriangleB|(?:(?:Righ|Lef)tDown|Right(?:Up)?|Left(?:Up)?)VectorB|RightTriangleB|Left(?:Triangle|Arrow)B|RightArrowB|V(?:er(?:ticalB|b)|b)|UpArrowB|l(?:ur(?:ds|u)h|dr(?:us|d)h|trP|owb|H)|profal|r(?:ulu|dld)h|b(?:igst|rvb)|(?:wed|ve[er])b|s(?:wn|es)w|n(?:wne|ese|sp|hp)|gtlP|d(?:oll|uh|H)|(?:hor|ov)b|u(?:dh|H)|r(?:lh|H)|ohb|hb|St)a|D(?:o(?:wn(?:(?:Left(?:Right|Tee)|RightTee)Vecto|(?:(?:Righ|Lef)tVector|Arrow)Ba)|ubleVerticalBa)|a(?:gge|r)|sc|f)|(?:(?:(?:Righ|Lef)tDown|(?:Righ|Lef)tUp)Tee|(?:Righ|Lef)tUpDown)Vecto|VerticalSeparato|(?:Left(?:Right|Tee)|RightTee)Vecto|less(?:eqq?)?gt|e(?:qslantgt|sc)|(?:RightF|LeftF|[lr]f)loo|u(?:[lr]corne|ar)|timesba|(?:plusa|cirs|apa)ci|U(?:arroci|f)|(?:dzigr|s(?:u(?:pl|br)|imr|[lr])|zigr|angz|nvH|l(?:tl|B)|r[Br])ar|UnderBa|(?:plus|harr|top|mid|of)ci|O(?:verBa|sc|f)|dd?agge|s(?:olba|sc)|g(?:t(?:rar|ci)|sc|f)|c(?:opys|u(?:po|ep)|sc|f)|(?:n(?:(?:v[lr]|w|r)A|l[Aa]|h[Aa]|eA)|x[hlr][Aa]|u(?:ua|da|A)|s[ew]A|rla|o[lr]a|rba|rAa|l[Ablr]a|h(?:oa|A)|era|d(?:ua|A)|cra|vA)r|o(?:lci|sc|ro|pa)|ropa|roar|l(?:o(?:pa|ar)|sc|Ar)|i(?:ma|s)c|ltci|dd?ar|a(?:ma|s)c|R(?:Bar|sc|f)|I(?:mac|f)|(?:u(?:ma|s)|oma|ema|Oma|Ema|[wyz]s|qs|ks|fs|Zs|Ys|Xs|Ws|Vs|Us|Ss|Qs|Ns|Ms|Ks|Is|Gs|Fs|Cs|Bs)c|Umac|x(?:sc|f)|v(?:sc|f)|rsc|n(?:ld|f)|m(?:sc|ld|ac|f)|rAr|h(?:sc|f)|b(?:sc|f)|psc|P(?:sc|f)|L(?:sc|ar|f)|jsc|J(?:sc|f)|E(?:sc|f)|[HT]sc|[yz]f|wf|tf|qf|pf|kf|jf|Zf|Yf|Xf|Wf|Vf|Tf|Sf|Qf|Nf|Mf|Kf|Hf|Gf|Ff|Cf|Bf)r|(?:Diacritical(?:Double)?A|[EINOSYZaisz]a)cute|(?:(?:N(?:egative(?:VeryThin|Thi(?:ck|n))|onBreaking)|NegativeMedium|ZeroWidth|VeryThin|Medium|Thi(?:ck|n))Spac|Filled(?:Very)?SmallSquar|Empty(?:Very)?SmallSquar|(?:N(?:ot(?:Succeeds|Greater|Tilde|Less)T|t)|DiacriticalT|VerticalT|PrecedesT|SucceedsT|NotEqualT|GreaterT|TildeT|EqualT|LessT|at|Ut|It)ild|(?:(?:DiacriticalG|[EIOUaiu]g)ra|(?:u|U)?bre|(?:o|e)?gra)v|(?:doublebar|curly|big|x)wedg|H(?:orizontalLin|ilbertSpac)|Double(?:Righ|Lef)tTe|(?:(?:measured|uw)ang|exponentia|dwang|ssmi|fema)l|(?:Poincarepla|reali|pho|oli)n|(?:black)?lozeng|(?:VerticalL|(?:prof|imag)l)in|SmallCircl|(?:black|dot)squar|rmoustach|l(?:moustach|angl)|(?:b(?:ack)?pr|(?:tri|xo)t|[qt]pr)im|[Tt]herefor|(?:DownB|[Gag]b)rev|(?:infint|nv[lr]tr)i|b(?:arwedg|owti)|an(?:dslop|gl)|(?:cu(?:rly)?v|rthr|lthr|b(?:ig|ar)v|xv)e|n(?:s(?:qsu[bp]|ccu)|prcu)|orslop|NewLin|maltes|Becaus|rangl|incar|(?:otil|Otil|t(?:ra|il))d|[inu]tild|s(?:mil|imn)|(?:sc|pr)cu|Wedg|Prim|Brev)e|(?:CloseCurly(?:Double)?Quo|OpenCurly(?:Double)?Quo|[ry]?acu)te|(?:Reverse(?:Up)?|Up)Equilibrium|C(?:apitalDifferentialD|(?:oproduc|(?:ircleD|enterD|d)o)t|on(?:grue|i)nt|conint|upCap|o(?:lone|pf)|OPY|hi)|(?:(?:(?:left)?rightsquig|(?:longleftr|twoheadr|nleftr|nLeftr|longr|hookr|nR|Rr)ight|(?:twohead|hook)left|longleft|updown|Updown|nright|Right|nleft|nLeft|down|up|Up)a|L(?:(?:ong(?:left)?righ|(?:ong)?lef)ta|eft(?:(?:right)?a|RightA|TeeA))|RightTeeA|LongLeftA|UpTeeA)rrow|(?:(?:RightArrow|Short|Upper|Lower)Left|(?:L(?:eftArrow|o(?:wer|ng))|LongLeft|Short|Upper)Right|ShortUp)Arrow|(?:b(?:lacktriangle(?:righ|lef)|ulle|no)|RightDoubleBracke|RightAngleBracke|Left(?:Doub|Ang)leBracke|(?:vartriangle|downharpoon|c(?:ircl|urv)earrow|upharpoon|looparrow)righ|(?:vartriangle|downharpoon|c(?:ircl|urv)earrow|upharpoon|looparrow|mapsto)lef|(?:UnderBrack|OverBrack|emptys|targ|Sups)e|diamondsui|c(?:ircledas|lubsui|are)|(?:spade|heart)sui|(?:(?:c(?:enter|t)|lmi|ino)d|(?:Triple|mD)D|n(?:otin|e)d|(?:ncong|doteq|su[bp]e|e[gl]s)d|l(?:ess|t)d|isind|c(?:ong|up|ap)?d|b(?:igod|N)|t(?:(?:ri)?d|opb)|s(?:ub|im)d|midd|g(?:tr?)?d|Lmid|DotD|(?:xo|ut|z)d|e(?:s?d|rD|fD|DD)|dtd|Zd|Id|Gd|Ed)o|realpar|i(?:magpar|iin)|S(?:uchTha|qr)|su[bp]mul|(?:(?:lt|i)que|gtque|(?:mid|low)a|e(?:que|xi))s|Produc|s(?:updo|e[cx])|r(?:parg|ec)|lparl|vangr|hamil|(?:homt|[lr]fis|ufis|dfis)h|phmma|t(?:wix|in)|quo|o(?:do|as)|fla|eDo)t|(?:(?:Square)?Intersecti|(?:straight|back|var)epsil|SquareUni|expectati|upsil|epsil|Upsil|eq?col|Epsil|(?:omic|Omic|rca|lca|eca|Sca|[NRTt]ca|Lca|Eca|[Zdz]ca|Dca)r|scar|ncar|herc|ccar|Ccar|iog|Iog)on|Not(?:S(?:quareSu(?:per|b)set|u(?:cceeds|(?:per|b)set))|Precedes|Greater|Tilde|Less)?|(?:(?:(?:Not(?:Reverse)?|Reverse)E|comp|E)leme|NotCongrue|(?:n[gl]|l)eqsla|geqsla|q(?:uat)?i|perc|iiii|coni|cwi|awi|oi)nt|(?:(?:rightleftharpo|leftrightharpo|quaterni)on|(?:(?:N(?:ot(?:NestedLess|Greater|Less)|estedLess)L|(?:eqslant|gtr(?:eqq?)?)l|LessL)e|Greater(?:Equal)?Le|cro)s|(?:rightright|leftleft|upup)arrow|rightleftarrow|(?:(?:(?:righ|lef)tthree|divideon|b(?:igo|ox)|[lr]o)t|InvisibleT)ime|downdownarrow|(?:(?:smallset|tri|dot|box)m|PlusM)inu|(?:RoundImpli|complex|Impli|Otim)e|C(?:ircle(?:Time|Minu|Plu)|ayley|ros)|(?:rationa|mode)l|NotExist|(?:(?:UnionP|MinusP|(?:b(?:ig[ou]|ox)|tri|s(?:u[bp]|im)|dot|xu|mn)p)l|(?:xo|u)pl|o(?:min|pl)|ropl|lopl|epl)u|otimesa|integer|e(?:linter|qual)|setminu|rarrbf|larrb?f|olcros|rarrf|mstpo|lesge|gesle|Exist|[lr]time|strn|napo|fltn|ccap|apo)s|(?:b(?:(?:lack|ig)triangledow|etwee)|(?:righ|lef)tharpoondow|(?:triangle|mapsto)dow|(?:nv|i)infi|ssetm|plusm|lagra|d(?:[lr]cor|isi)|c(?:ompf|aro)|s?frow|(?:hyph|curr)e|kgree|thor|ogo|ye)n|Not(?:Righ|Lef)tTriangle|(?:Up(?:Arrow)?|Short)DownArrow|(?:(?:n(?:triangle(?:righ|lef)t|succ|prec)|(?:trianglerigh|trianglelef|sqsu[bp]se|ques)t|backsim)e|lvertneq|gvertneq|(?:suc|pre)cneq|a(?:pprox|symp)e|(?:succ|prec|vee)e|circe)q|(?:UnderParenthes|OverParenthes|xn)is|(?:(?:Righ|Lef)tDown|Right(?:Up)?|Left(?:Up)?)Vector|D(?:o(?:wn(?:RightVector|LeftVector|Arrow|Tee)|t)|el|D)|l(?:eftrightarrows|br(?:k(?:sl[du]|e)|ac[ek])|tri[ef]|s(?:im[eg]|qb|h)|hard|a(?:tes|ngd|p)|o[pz]f|rm|gE|fr|eg|cy)|(?:NotHumpDownHum|(?:righ|lef)tharpoonu|big(?:(?:triangle|sqc)u|c[au])|HumpDownHum|m(?:apstou|lc)|(?:capbr|xsq)cu|smash|rarr[al]|(?:weie|sha)r|larrl|velli|(?:thin|punc)s|h(?:elli|airs)|(?:u[lr]c|vp)ro|d[lr]cro|c(?:upc[au]|apc[au])|thka|scna|prn?a|oper|n(?:ums|va|cu|bs)|ens|xc[au]|Ma)p|l(?:eftrightarrow|e(?:ftarrow|s(?:dot)?)?|moust|a(?:rrb?|te?|ng)|t(?:ri)?|sim|par|oz|l|g)|n(?:triangle(?:righ|lef)t|succ|prec)|SquareSu(?:per|b)set|(?:I(?:nvisibleComm|ot)|(?:varthe|iio)t|varkapp|(?:vars|S)igm|(?:diga|mco)mm|Cedill|lambd|Lambd|delt|Thet|omeg|Omeg|Kapp|Delt|nabl|zet|to[es]|rdc|ldc|iot|Zet|Bet|Et)a|b(?:lacktriangle|arwed|u(?:mpe?|ll)|sol|o(?:x[HVhv]|t)|brk|ne)|(?:trianglerigh|trianglelef|sqsu[bp]se|ques)t|RightT(?:riangl|e)e|(?:(?:varsu[bp]setn|su(?:psetn?|bsetn?))eq|nsu[bp]seteq|colone|(?:wedg|sim)e|nsime|lneq|gneq)q|DifferentialD|(?:(?:fall|ris)ingdots|(?:suc|pre)ccurly|ddots)eq|A(?:pplyFunction|ssign|(?:tild|grav|brev)e|acute|o(?:gon|pf)|lpha|(?:mac|sc|f)r|c(?:irc|y)|ring|Elig|uml|nd|MP)|(?:varsu[bp]setn|su(?:psetn?|bsetn?))eq|L(?:eft(?:T(?:riangl|e)e|Arrow)|l)|G(?:reaterEqual|amma)|E(?:xponentialE|quilibrium|sim|cy|TH|NG)|(?:(?:RightCeil|LeftCeil|varnoth|ar|Ur)in|(?:b(?:ack)?co|uri)n|vzigza|roan|loan|ffli|amal|sun|rin|n(?:tl|an)|Ran|Lan)g|(?:thick|succn?|precn?|less|g(?:tr|n)|ln|n)approx|(?:s(?:traightph|em)|(?:rtril|xu|u[lr]|xd|v[lr])tr|varph|l[lr]tr|b(?:sem|eps)|Ph)i|(?:circledd|osl|n(?:v[Dd]|V[Dd]|d)|hsl|V(?:vd|D)|Osl|v[Dd]|md)ash|(?:(?:RuleDelay|imp|cuw)e|(?:n(?:s(?:hort)?)?|short|rn)mi|D(?:Dotrah|iamon)|(?:i(?:nt)?pr|peri)o|odsol|llhar|c(?:opro|irmi)|(?:capa|anda|pou)n|Barwe|napi|api)d|(?:cu(?:rlyeq(?:suc|pre)|es)|telre|[ou]dbla|Udbla|Odbla|radi|lesc|gesc|dbla)c|(?:circled|big|eq|[is]|c|x|a|S|[hw]|W|H|G|E|C)circ|rightarrow|R(?:ightArrow|arr|e)|Pr(?:oportion)?|(?:longmapst|varpropt|p(?:lustw|ropt)|varrh|numer|(?:rsa|lsa|sb)qu|m(?:icr|h)|[lr]aqu|bdqu|eur)o|UnderBrace|ImaginaryI|B(?:ernoullis|a(?:ckslash|rv)|umpeq|cy)|(?:(?:Laplace|Mellin|zee)tr|Fo(?:uriertr|p)|(?:profsu|ssta)r|ordero|origo|[ps]op|nop|mop|i(?:op|mo)|h(?:op|al)|f(?:op|no)|dop|bop|Rop|Pop|Nop|Lop|Iop|Hop|Dop|[GJKMOQSTV-Zgjkoqvwyz]op|Bop)f|nsu[bp]seteq|t(?:ri(?:angleq|e)|imesd|he(?:tav|re4)|au)|O(?:verBrace|r)|(?:(?:pitchfo|checkma|t(?:opfo|b)|rob|rbb|l[bo]b)r|intlarh|b(?:brktbr|l(?:oc|an))|perten|NoBrea|rarrh|s[ew]arh|n[ew]arh|l(?:arrh|hbl)|uhbl|Hace)k|(?:NotCupC|(?:mu(?:lti)?|x)m|cupbrc)ap|t(?:riangle|imes|heta|opf?)|Precedes|Succeeds|Superset|NotEqual|(?:n(?:atural|exist|les)|s(?:qc[au]p|mte)|prime)s|c(?:ir(?:cled[RS]|[Ee])|u(?:rarrm|larrp|darr[lr]|ps)|o(?:mmat|pf)|aps|hi)|b(?:sol(?:hsu)?b|ump(?:eq|E)|ox(?:box|[Vv][HLRhlr]|[Hh][DUdu]|[DUdu][LRlr])|e(?:rnou|t[ah])|lk(?:34|1[24])|cy)|(?:l(?:esdot|squ|dqu)o|rsquo|rdquo|ngt)r|a(?:n(?:g(?:msda[a-h]|st|e)|d[dv])|st|p[Ee]|mp|fr|c[Edy])|(?:g(?:esdoto|E)|[lr]haru)l|(?:angrtvb|lrhar|nis)d|(?:(?:th(?:ic)?k|succn?|p(?:r(?:ecn?|n)?|lus)|rarr|l(?:ess|arr)|su[bp]|par|scn|g(?:tr|n)|ne|sc|n[glv]|ln|eq?)si|thetasy|ccupss|alefsy|botto)m|trpezium|(?:hks[ew]|dr?bk|bk)arow|(?:(?:[lr]a|d|c)empty|b(?:nequi|empty)|plank|nequi|odi)v|(?:(?:sc|rp|n)pol|point|fpart)int|(?:c(?:irf|wco)|awco)nint|PartialD|n(?:s(?:u[bp](?:set)?|c)|rarr|ot(?:ni|in)?|warr|e(?:arr)?|a(?:tur|p)|vlt|p(?:re?|ar)|um?|l[et]|ge|i)|n(?:atural|exist|les)|d(?:i(?:am(?:ond)?|v(?:ide)?)|tri|ash|ot|d)|backsim|l(?:esdot|squ|dqu)o|g(?:esdoto|E)|U(?:p(?:Arrow|si)|nion|arr)|angrtvb|p(?:l(?:anckh|us(?:d[ou]|[be]))|ar(?:sl|t)|r(?:od|nE|E)|erp|iv|m)|n(?:ot(?:niv[a-c]|in(?:v[a-c]|E))|rarr[cw]|s(?:u[bp][Ee]|c[er])|part|v(?:le|g[et])|g(?:es|E)|c(?:ap|y)|apE|lE|iv|Ll|Gg)|m(?:inus(?:du|b)|ale|cy|p)|rbr(?:k(?:sl[du]|e)|ac[ek])|(?:suphsu|tris|rcu|lcu)b|supdsub|(?:s[ew]a|n[ew]a)rrow|(?:b(?:ecaus|sim)|n(?:[lr]tri|bump)|csu[bp])e|equivDD|u(?:rcorn|lcorn|psi)|timesb|s(?:u(?:p(?:set)?|b(?:set)?)|q(?:su[bp]|u)|i(?:gma|m)|olb?|dot|mt|fr|ce?)|p(?:l(?:anck|us)|r(?:op|ec?)?|ara?|i)|o(?:times|r(?:d(?:er)?)?)|m(?:i(?:nusd?|d)|a(?:p(?:sto)?|lt)|u)|rmoust|g(?:e(?:s(?:dot|l)?|q)?|sim|n(?:ap|e)|t|l|g)|(?:spade|heart)s|c(?:u(?:rarr|larr|p)|o(?:m(?:ma|p)|lon|py|ng)|lubs|heck|cups|irc?|ent|ap)|colone|a(?:p(?:prox)?|n(?:g(?:msd|rt)?|d)|symp|f|c)|S(?:quare|u[bp]|c)|Subset|b(?:ecaus|sim)|vsu[bp]n[Ee]|s(?:u(?:psu[bp]|b(?:su[bp]|n[Ee]|E)|pn[Ee]|p[1-3E]|m)|q(?:u(?:ar[ef]|f)|su[bp]e)|igma[fv]|etmn|dot[be]|par|mid|hc?y|c[Ey])|f(?:rac(?:78|5[68]|45|3[458]|2[35]|1[2-68])|fr)|e(?:m(?:sp1[34]|ptyv)|psiv|c(?:irc|y)|t[ah]|ng|ll|fr|e)|(?:kappa|isins|vBar|fork|rho|phi|n[GL]t)v|divonx|V(?:dashl|ee)|gammad|G(?:ammad|cy|[Tgt])|[Ldhlt]strok|[HT]strok|(?:c(?:ylct|hc)|(?:s(?:oft|hch)|hard|S(?:OFT|HCH)|jser|J(?:ser|uk)|HARD|tsh|TSH|juk|iuk|I(?:uk|[EO])|zh|yi|nj|lj|k[hj]|gj|dj|ZH|Y[AIU]|NJ|LJ|K[HJ]|GJ|D[JSZ])c|ubrc|Ubrc|(?:yu|i[eo]|dz|v|p|f)c|TSc|SHc|CHc|Vc|Pc|Mc|Fc)y|(?:(?:wre|jm)at|dalet|a(?:ngs|le)p|imat|[lr]ds)h|[CLRUceglnou]acute|ff?llig|(?:f(?:fi|[ij])|sz|oe|ij|ae|OE|IJ)lig|r(?:a(?:tio|rr|ng)|tri|par|eal)|s[ew]arr|s(?:qc[au]p|mte)|prime|rarrb|i(?:n(?:fin|t)?|sin|t|i|c)|e(?:quiv|m(?:pty|sp)|p(?:si|ar)|cir|l|g)|kappa|isins|ncong|doteq|(?:wedg|sim)e|nsime|rsquo|rdquo|[lr]haru|V(?:dash|ert)|Tilde|lrhar|gamma|Equal|UpTee|n(?:[lr]tri|bump)|C(?:olon|up|ap)|v(?:arpi|ert)|u(?:psih|ml)|vnsu[bp]|r(?:tri[ef]|e(?:als|g)|a(?:rr[cw]|ng[de]|ce)|sh|lm|x)|rhard|sim[gl]E|i(?:sin[Ev]|mage|f[fr]|cy)|harrw|(?:n[gl]|l)eqq|g(?:sim[el]|tcc|e(?:qq|l)|nE|l[Eaj]|gg|ap)|ocirc|starf|utrif|d(?:trif|i(?:ams|e)|ashv|sc[ry]|fr|eg)|[du]har[lr]|T(?:HORN|a[bu])|(?:TRAD|[gl]vn)E|odash|[EUaeu]o(?:gon|pf)|alpha|[IJOUYgjuy]c(?:irc|y)|v(?:arr|ee)|succ|sim[gl]|harr|ln(?:ap|e)|lesg|(?:n[gl]|l)eq|ocir|star|utri|vBar|fork|su[bp]e|nsim|lneq|gneq|csu[bp]|zwn?j|yacy|x(?:opf|i)|scnE|o(?:r(?:d[fm]|v)|mid|lt|hm|gt|fr|cy|S)|scap|rsqb|ropf|ltcc|tsc[ry]|QUOT|[EOUYao]uml|rho|phi|n[GL]t|e[gl]s|ngt|I(?:nt|m)|nis|rfr|rcy|lnE|lEg|ufr|S(?:um|cy)|R(?:sh|ho)|psi|Ps?i|[NRTt]cy|L(?:sh|cy|[Tt])|kcy|Kcy|Hat|REG|[Zdz]cy|wr|lE|wp|Xi|Nu|Mu)(;)</string>
2634 <key>name</key>
2635 <string>constant.language.character-reference.named.html</string>
2636 <key>captures</key>
2637 <dict>
2638 <key>1</key>
2639 <dict>
2640 <key>name</key>
2641 <string>punctuation.definition.character-reference.begin.html</string>
2642 </dict>
2643 <key>2</key>
2644 <dict>
2645 <key>name</key>
2646 <string>keyword.control.character-reference.html</string>
2647 </dict>
2648 <key>3</key>
2649 <dict>
2650 <key>name</key>
2651 <string>punctuation.definition.character-reference.end.html</string>
2652 </dict>
2653 </dict>
2654 </dict>
2655 <key>commonmark-code-fenced-apib</key>
2656 <dict>
2657 <key>patterns</key>
2658 <array>
2659 <dict>
2660 <key>begin</key>
2661 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:api\x2dblueprint|(?:.*\.)?apib))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
2662 <key>beginCaptures</key>
2663 <dict>
2664 <key>1</key>
2665 <dict>
2666 <key>name</key>
2667 <string>string.other.begin.code.fenced.mdx</string>
2668 </dict>
2669 <key>2</key>
2670 <dict>
2671 <key>name</key>
2672 <string>entity.name.function.mdx</string>
2673 <key>patterns</key>
2674 <array>
2675 <dict>
2676 <key>include</key>
2677 <string>#markdown-string</string>
2678 </dict>
2679 </array>
2680 </dict>
2681 <key>3</key>
2682 <dict>
2683 <key>patterns</key>
2684 <array>
2685 <dict>
2686 <key>include</key>
2687 <string>#markdown-string</string>
2688 </dict>
2689 </array>
2690 </dict>
2691 </dict>
2692 <key>end</key>
2693 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
2694 <key>endCaptures</key>
2695 <dict>
2696 <key>1</key>
2697 <dict>
2698 <key>name</key>
2699 <string>string.other.end.code.fenced.mdx</string>
2700 </dict>
2701 </dict>
2702 <key>name</key>
2703 <string>markup.code.apib.mdx</string>
2704 <key>patterns</key>
2705 <array>
2706 <dict>
2707 <key>begin</key>
2708 <string>(^|\G)(\s*)(.*)</string>
2709 <key>while</key>
2710 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
2711 <key>contentName</key>
2712 <string>meta.embedded.apib</string>
2713 <key>patterns</key>
2714 <array>
2715 <dict>
2716 <key>include</key>
2717 <string>text.html.markdown.source.gfm.apib</string>
2718 </dict>
2719 </array>
2720 </dict>
2721 </array>
2722 </dict>
2723 <dict>
2724 <key>begin</key>
2725 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:api\x2dblueprint|(?:.*\.)?apib))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
2726 <key>beginCaptures</key>
2727 <dict>
2728 <key>1</key>
2729 <dict>
2730 <key>name</key>
2731 <string>string.other.begin.code.fenced.mdx</string>
2732 </dict>
2733 <key>2</key>
2734 <dict>
2735 <key>name</key>
2736 <string>entity.name.function.mdx</string>
2737 <key>patterns</key>
2738 <array>
2739 <dict>
2740 <key>include</key>
2741 <string>#markdown-string</string>
2742 </dict>
2743 </array>
2744 </dict>
2745 <key>3</key>
2746 <dict>
2747 <key>patterns</key>
2748 <array>
2749 <dict>
2750 <key>include</key>
2751 <string>#markdown-string</string>
2752 </dict>
2753 </array>
2754 </dict>
2755 </dict>
2756 <key>end</key>
2757 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
2758 <key>endCaptures</key>
2759 <dict>
2760 <key>1</key>
2761 <dict>
2762 <key>name</key>
2763 <string>string.other.end.code.fenced.mdx</string>
2764 </dict>
2765 </dict>
2766 <key>name</key>
2767 <string>markup.code.apib.mdx</string>
2768 <key>patterns</key>
2769 <array>
2770 <dict>
2771 <key>begin</key>
2772 <string>(^|\G)(\s*)(.*)</string>
2773 <key>while</key>
2774 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
2775 <key>contentName</key>
2776 <string>meta.embedded.apib</string>
2777 <key>patterns</key>
2778 <array>
2779 <dict>
2780 <key>include</key>
2781 <string>text.html.markdown.source.gfm.apib</string>
2782 </dict>
2783 </array>
2784 </dict>
2785 </array>
2786 </dict>
2787 </array>
2788 </dict>
2789 <key>commonmark-code-fenced-asciidoc</key>
2790 <dict>
2791 <key>patterns</key>
2792 <array>
2793 <dict>
2794 <key>begin</key>
2795 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:(?:.*\.)?(?:adoc|asciidoc)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
2796 <key>beginCaptures</key>
2797 <dict>
2798 <key>1</key>
2799 <dict>
2800 <key>name</key>
2801 <string>string.other.begin.code.fenced.mdx</string>
2802 </dict>
2803 <key>2</key>
2804 <dict>
2805 <key>name</key>
2806 <string>entity.name.function.mdx</string>
2807 <key>patterns</key>
2808 <array>
2809 <dict>
2810 <key>include</key>
2811 <string>#markdown-string</string>
2812 </dict>
2813 </array>
2814 </dict>
2815 <key>3</key>
2816 <dict>
2817 <key>patterns</key>
2818 <array>
2819 <dict>
2820 <key>include</key>
2821 <string>#markdown-string</string>
2822 </dict>
2823 </array>
2824 </dict>
2825 </dict>
2826 <key>end</key>
2827 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
2828 <key>endCaptures</key>
2829 <dict>
2830 <key>1</key>
2831 <dict>
2832 <key>name</key>
2833 <string>string.other.end.code.fenced.mdx</string>
2834 </dict>
2835 </dict>
2836 <key>name</key>
2837 <string>markup.code.asciidoc.mdx</string>
2838 <key>patterns</key>
2839 <array>
2840 <dict>
2841 <key>begin</key>
2842 <string>(^|\G)(\s*)(.*)</string>
2843 <key>while</key>
2844 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
2845 <key>contentName</key>
2846 <string>meta.embedded.asciidoc</string>
2847 <key>patterns</key>
2848 <array>
2849 <dict>
2850 <key>include</key>
2851 <string>text.html.asciidoc</string>
2852 </dict>
2853 </array>
2854 </dict>
2855 </array>
2856 </dict>
2857 <dict>
2858 <key>begin</key>
2859 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:(?:.*\.)?(?:adoc|asciidoc)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
2860 <key>beginCaptures</key>
2861 <dict>
2862 <key>1</key>
2863 <dict>
2864 <key>name</key>
2865 <string>string.other.begin.code.fenced.mdx</string>
2866 </dict>
2867 <key>2</key>
2868 <dict>
2869 <key>name</key>
2870 <string>entity.name.function.mdx</string>
2871 <key>patterns</key>
2872 <array>
2873 <dict>
2874 <key>include</key>
2875 <string>#markdown-string</string>
2876 </dict>
2877 </array>
2878 </dict>
2879 <key>3</key>
2880 <dict>
2881 <key>patterns</key>
2882 <array>
2883 <dict>
2884 <key>include</key>
2885 <string>#markdown-string</string>
2886 </dict>
2887 </array>
2888 </dict>
2889 </dict>
2890 <key>end</key>
2891 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
2892 <key>endCaptures</key>
2893 <dict>
2894 <key>1</key>
2895 <dict>
2896 <key>name</key>
2897 <string>string.other.end.code.fenced.mdx</string>
2898 </dict>
2899 </dict>
2900 <key>name</key>
2901 <string>markup.code.asciidoc.mdx</string>
2902 <key>patterns</key>
2903 <array>
2904 <dict>
2905 <key>begin</key>
2906 <string>(^|\G)(\s*)(.*)</string>
2907 <key>while</key>
2908 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
2909 <key>contentName</key>
2910 <string>meta.embedded.asciidoc</string>
2911 <key>patterns</key>
2912 <array>
2913 <dict>
2914 <key>include</key>
2915 <string>text.html.asciidoc</string>
2916 </dict>
2917 </array>
2918 </dict>
2919 </array>
2920 </dict>
2921 </array>
2922 </dict>
2923 <key>commonmark-code-fenced-c</key>
2924 <dict>
2925 <key>patterns</key>
2926 <array>
2927 <dict>
2928 <key>begin</key>
2929 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:dtrace|dtrace\x2dscript|oncrpc|rpc|rpcgen|unified\x2dparallel\x2dc|x\x2dbitmap|x\x2dpixmap|xdr|(?:.*\.)?(?:c|cats|h|idc|opencl|upc|xbm|xpm|xs)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
2930 <key>beginCaptures</key>
2931 <dict>
2932 <key>1</key>
2933 <dict>
2934 <key>name</key>
2935 <string>string.other.begin.code.fenced.mdx</string>
2936 </dict>
2937 <key>2</key>
2938 <dict>
2939 <key>name</key>
2940 <string>entity.name.function.mdx</string>
2941 <key>patterns</key>
2942 <array>
2943 <dict>
2944 <key>include</key>
2945 <string>#markdown-string</string>
2946 </dict>
2947 </array>
2948 </dict>
2949 <key>3</key>
2950 <dict>
2951 <key>patterns</key>
2952 <array>
2953 <dict>
2954 <key>include</key>
2955 <string>#markdown-string</string>
2956 </dict>
2957 </array>
2958 </dict>
2959 </dict>
2960 <key>end</key>
2961 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
2962 <key>endCaptures</key>
2963 <dict>
2964 <key>1</key>
2965 <dict>
2966 <key>name</key>
2967 <string>string.other.end.code.fenced.mdx</string>
2968 </dict>
2969 </dict>
2970 <key>name</key>
2971 <string>markup.code.c.mdx</string>
2972 <key>patterns</key>
2973 <array>
2974 <dict>
2975 <key>begin</key>
2976 <string>(^|\G)(\s*)(.*)</string>
2977 <key>while</key>
2978 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
2979 <key>contentName</key>
2980 <string>meta.embedded.c</string>
2981 <key>patterns</key>
2982 <array>
2983 <dict>
2984 <key>include</key>
2985 <string>source.c</string>
2986 </dict>
2987 </array>
2988 </dict>
2989 </array>
2990 </dict>
2991 <dict>
2992 <key>begin</key>
2993 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:dtrace|dtrace\x2dscript|oncrpc|rpc|rpcgen|unified\x2dparallel\x2dc|x\x2dbitmap|x\x2dpixmap|xdr|(?:.*\.)?(?:c|cats|h|idc|opencl|upc|xbm|xpm|xs)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
2994 <key>beginCaptures</key>
2995 <dict>
2996 <key>1</key>
2997 <dict>
2998 <key>name</key>
2999 <string>string.other.begin.code.fenced.mdx</string>
3000 </dict>
3001 <key>2</key>
3002 <dict>
3003 <key>name</key>
3004 <string>entity.name.function.mdx</string>
3005 <key>patterns</key>
3006 <array>
3007 <dict>
3008 <key>include</key>
3009 <string>#markdown-string</string>
3010 </dict>
3011 </array>
3012 </dict>
3013 <key>3</key>
3014 <dict>
3015 <key>patterns</key>
3016 <array>
3017 <dict>
3018 <key>include</key>
3019 <string>#markdown-string</string>
3020 </dict>
3021 </array>
3022 </dict>
3023 </dict>
3024 <key>end</key>
3025 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3026 <key>endCaptures</key>
3027 <dict>
3028 <key>1</key>
3029 <dict>
3030 <key>name</key>
3031 <string>string.other.end.code.fenced.mdx</string>
3032 </dict>
3033 </dict>
3034 <key>name</key>
3035 <string>markup.code.c.mdx</string>
3036 <key>patterns</key>
3037 <array>
3038 <dict>
3039 <key>begin</key>
3040 <string>(^|\G)(\s*)(.*)</string>
3041 <key>while</key>
3042 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3043 <key>contentName</key>
3044 <string>meta.embedded.c</string>
3045 <key>patterns</key>
3046 <array>
3047 <dict>
3048 <key>include</key>
3049 <string>source.c</string>
3050 </dict>
3051 </array>
3052 </dict>
3053 </array>
3054 </dict>
3055 </array>
3056 </dict>
3057 <key>commonmark-code-fenced-clojure</key>
3058 <dict>
3059 <key>patterns</key>
3060 <array>
3061 <dict>
3062 <key>begin</key>
3063 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:clojure|rouge|(?:.*\.)?(?:boot|cl2|clj|cljc|cljs|cljs\.hl|cljscm|cljx|edn|hic|rg|wisp)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
3064 <key>beginCaptures</key>
3065 <dict>
3066 <key>1</key>
3067 <dict>
3068 <key>name</key>
3069 <string>string.other.begin.code.fenced.mdx</string>
3070 </dict>
3071 <key>2</key>
3072 <dict>
3073 <key>name</key>
3074 <string>entity.name.function.mdx</string>
3075 <key>patterns</key>
3076 <array>
3077 <dict>
3078 <key>include</key>
3079 <string>#markdown-string</string>
3080 </dict>
3081 </array>
3082 </dict>
3083 <key>3</key>
3084 <dict>
3085 <key>patterns</key>
3086 <array>
3087 <dict>
3088 <key>include</key>
3089 <string>#markdown-string</string>
3090 </dict>
3091 </array>
3092 </dict>
3093 </dict>
3094 <key>end</key>
3095 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3096 <key>endCaptures</key>
3097 <dict>
3098 <key>1</key>
3099 <dict>
3100 <key>name</key>
3101 <string>string.other.end.code.fenced.mdx</string>
3102 </dict>
3103 </dict>
3104 <key>name</key>
3105 <string>markup.code.clojure.mdx</string>
3106 <key>patterns</key>
3107 <array>
3108 <dict>
3109 <key>begin</key>
3110 <string>(^|\G)(\s*)(.*)</string>
3111 <key>while</key>
3112 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3113 <key>contentName</key>
3114 <string>meta.embedded.clojure</string>
3115 <key>patterns</key>
3116 <array>
3117 <dict>
3118 <key>include</key>
3119 <string>source.clojure</string>
3120 </dict>
3121 </array>
3122 </dict>
3123 </array>
3124 </dict>
3125 <dict>
3126 <key>begin</key>
3127 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:clojure|rouge|(?:.*\.)?(?:boot|cl2|clj|cljc|cljs|cljs\.hl|cljscm|cljx|edn|hic|rg|wisp)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
3128 <key>beginCaptures</key>
3129 <dict>
3130 <key>1</key>
3131 <dict>
3132 <key>name</key>
3133 <string>string.other.begin.code.fenced.mdx</string>
3134 </dict>
3135 <key>2</key>
3136 <dict>
3137 <key>name</key>
3138 <string>entity.name.function.mdx</string>
3139 <key>patterns</key>
3140 <array>
3141 <dict>
3142 <key>include</key>
3143 <string>#markdown-string</string>
3144 </dict>
3145 </array>
3146 </dict>
3147 <key>3</key>
3148 <dict>
3149 <key>patterns</key>
3150 <array>
3151 <dict>
3152 <key>include</key>
3153 <string>#markdown-string</string>
3154 </dict>
3155 </array>
3156 </dict>
3157 </dict>
3158 <key>end</key>
3159 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3160 <key>endCaptures</key>
3161 <dict>
3162 <key>1</key>
3163 <dict>
3164 <key>name</key>
3165 <string>string.other.end.code.fenced.mdx</string>
3166 </dict>
3167 </dict>
3168 <key>name</key>
3169 <string>markup.code.clojure.mdx</string>
3170 <key>patterns</key>
3171 <array>
3172 <dict>
3173 <key>begin</key>
3174 <string>(^|\G)(\s*)(.*)</string>
3175 <key>while</key>
3176 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3177 <key>contentName</key>
3178 <string>meta.embedded.clojure</string>
3179 <key>patterns</key>
3180 <array>
3181 <dict>
3182 <key>include</key>
3183 <string>source.clojure</string>
3184 </dict>
3185 </array>
3186 </dict>
3187 </array>
3188 </dict>
3189 </array>
3190 </dict>
3191 <key>commonmark-code-fenced-coffee</key>
3192 <dict>
3193 <key>patterns</key>
3194 <array>
3195 <dict>
3196 <key>begin</key>
3197 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:coffee\x2dscript|coffeescript|(?:.*\.)?(?:_coffee|cjsx|coffee|cson|em|emberscript|iced)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
3198 <key>beginCaptures</key>
3199 <dict>
3200 <key>1</key>
3201 <dict>
3202 <key>name</key>
3203 <string>string.other.begin.code.fenced.mdx</string>
3204 </dict>
3205 <key>2</key>
3206 <dict>
3207 <key>name</key>
3208 <string>entity.name.function.mdx</string>
3209 <key>patterns</key>
3210 <array>
3211 <dict>
3212 <key>include</key>
3213 <string>#markdown-string</string>
3214 </dict>
3215 </array>
3216 </dict>
3217 <key>3</key>
3218 <dict>
3219 <key>patterns</key>
3220 <array>
3221 <dict>
3222 <key>include</key>
3223 <string>#markdown-string</string>
3224 </dict>
3225 </array>
3226 </dict>
3227 </dict>
3228 <key>end</key>
3229 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3230 <key>endCaptures</key>
3231 <dict>
3232 <key>1</key>
3233 <dict>
3234 <key>name</key>
3235 <string>string.other.end.code.fenced.mdx</string>
3236 </dict>
3237 </dict>
3238 <key>name</key>
3239 <string>markup.code.coffee.mdx</string>
3240 <key>patterns</key>
3241 <array>
3242 <dict>
3243 <key>begin</key>
3244 <string>(^|\G)(\s*)(.*)</string>
3245 <key>while</key>
3246 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3247 <key>contentName</key>
3248 <string>meta.embedded.coffee</string>
3249 <key>patterns</key>
3250 <array>
3251 <dict>
3252 <key>include</key>
3253 <string>source.coffee</string>
3254 </dict>
3255 </array>
3256 </dict>
3257 </array>
3258 </dict>
3259 <dict>
3260 <key>begin</key>
3261 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:coffee\x2dscript|coffeescript|(?:.*\.)?(?:_coffee|cjsx|coffee|cson|em|emberscript|iced)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
3262 <key>beginCaptures</key>
3263 <dict>
3264 <key>1</key>
3265 <dict>
3266 <key>name</key>
3267 <string>string.other.begin.code.fenced.mdx</string>
3268 </dict>
3269 <key>2</key>
3270 <dict>
3271 <key>name</key>
3272 <string>entity.name.function.mdx</string>
3273 <key>patterns</key>
3274 <array>
3275 <dict>
3276 <key>include</key>
3277 <string>#markdown-string</string>
3278 </dict>
3279 </array>
3280 </dict>
3281 <key>3</key>
3282 <dict>
3283 <key>patterns</key>
3284 <array>
3285 <dict>
3286 <key>include</key>
3287 <string>#markdown-string</string>
3288 </dict>
3289 </array>
3290 </dict>
3291 </dict>
3292 <key>end</key>
3293 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3294 <key>endCaptures</key>
3295 <dict>
3296 <key>1</key>
3297 <dict>
3298 <key>name</key>
3299 <string>string.other.end.code.fenced.mdx</string>
3300 </dict>
3301 </dict>
3302 <key>name</key>
3303 <string>markup.code.coffee.mdx</string>
3304 <key>patterns</key>
3305 <array>
3306 <dict>
3307 <key>begin</key>
3308 <string>(^|\G)(\s*)(.*)</string>
3309 <key>while</key>
3310 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3311 <key>contentName</key>
3312 <string>meta.embedded.coffee</string>
3313 <key>patterns</key>
3314 <array>
3315 <dict>
3316 <key>include</key>
3317 <string>source.coffee</string>
3318 </dict>
3319 </array>
3320 </dict>
3321 </array>
3322 </dict>
3323 </array>
3324 </dict>
3325 <key>commonmark-code-fenced-console</key>
3326 <dict>
3327 <key>patterns</key>
3328 <array>
3329 <dict>
3330 <key>begin</key>
3331 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:pycon|python\x2dconsole))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
3332 <key>beginCaptures</key>
3333 <dict>
3334 <key>1</key>
3335 <dict>
3336 <key>name</key>
3337 <string>string.other.begin.code.fenced.mdx</string>
3338 </dict>
3339 <key>2</key>
3340 <dict>
3341 <key>name</key>
3342 <string>entity.name.function.mdx</string>
3343 <key>patterns</key>
3344 <array>
3345 <dict>
3346 <key>include</key>
3347 <string>#markdown-string</string>
3348 </dict>
3349 </array>
3350 </dict>
3351 <key>3</key>
3352 <dict>
3353 <key>patterns</key>
3354 <array>
3355 <dict>
3356 <key>include</key>
3357 <string>#markdown-string</string>
3358 </dict>
3359 </array>
3360 </dict>
3361 </dict>
3362 <key>end</key>
3363 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3364 <key>endCaptures</key>
3365 <dict>
3366 <key>1</key>
3367 <dict>
3368 <key>name</key>
3369 <string>string.other.end.code.fenced.mdx</string>
3370 </dict>
3371 </dict>
3372 <key>name</key>
3373 <string>markup.code.console.mdx</string>
3374 <key>patterns</key>
3375 <array>
3376 <dict>
3377 <key>begin</key>
3378 <string>(^|\G)(\s*)(.*)</string>
3379 <key>while</key>
3380 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3381 <key>contentName</key>
3382 <string>meta.embedded.console</string>
3383 <key>patterns</key>
3384 <array>
3385 <dict>
3386 <key>include</key>
3387 <string>text.python.console</string>
3388 </dict>
3389 </array>
3390 </dict>
3391 </array>
3392 </dict>
3393 <dict>
3394 <key>begin</key>
3395 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:pycon|python\x2dconsole))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
3396 <key>beginCaptures</key>
3397 <dict>
3398 <key>1</key>
3399 <dict>
3400 <key>name</key>
3401 <string>string.other.begin.code.fenced.mdx</string>
3402 </dict>
3403 <key>2</key>
3404 <dict>
3405 <key>name</key>
3406 <string>entity.name.function.mdx</string>
3407 <key>patterns</key>
3408 <array>
3409 <dict>
3410 <key>include</key>
3411 <string>#markdown-string</string>
3412 </dict>
3413 </array>
3414 </dict>
3415 <key>3</key>
3416 <dict>
3417 <key>patterns</key>
3418 <array>
3419 <dict>
3420 <key>include</key>
3421 <string>#markdown-string</string>
3422 </dict>
3423 </array>
3424 </dict>
3425 </dict>
3426 <key>end</key>
3427 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3428 <key>endCaptures</key>
3429 <dict>
3430 <key>1</key>
3431 <dict>
3432 <key>name</key>
3433 <string>string.other.end.code.fenced.mdx</string>
3434 </dict>
3435 </dict>
3436 <key>name</key>
3437 <string>markup.code.console.mdx</string>
3438 <key>patterns</key>
3439 <array>
3440 <dict>
3441 <key>begin</key>
3442 <string>(^|\G)(\s*)(.*)</string>
3443 <key>while</key>
3444 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3445 <key>contentName</key>
3446 <string>meta.embedded.console</string>
3447 <key>patterns</key>
3448 <array>
3449 <dict>
3450 <key>include</key>
3451 <string>text.python.console</string>
3452 </dict>
3453 </array>
3454 </dict>
3455 </array>
3456 </dict>
3457 </array>
3458 </dict>
3459 <key>commonmark-code-fenced-cpp</key>
3460 <dict>
3461 <key>patterns</key>
3462 <array>
3463 <dict>
3464 <key>begin</key>
3465 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:ags|ags\x2dscript|asymptote|c\+\+|edje\x2ddata\x2dcollection|game\x2dmaker\x2dlanguage|swig|(?:.*\.)?(?:asc|ash|asy|c\+\+|cc|cp|cpp|cppm|cxx|edc|gml|h\+\+|hh|hpp|hxx|inl|ino|ipp|ixx|metal|re|tcc|tpp|txx)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
3466 <key>beginCaptures</key>
3467 <dict>
3468 <key>1</key>
3469 <dict>
3470 <key>name</key>
3471 <string>string.other.begin.code.fenced.mdx</string>
3472 </dict>
3473 <key>2</key>
3474 <dict>
3475 <key>name</key>
3476 <string>entity.name.function.mdx</string>
3477 <key>patterns</key>
3478 <array>
3479 <dict>
3480 <key>include</key>
3481 <string>#markdown-string</string>
3482 </dict>
3483 </array>
3484 </dict>
3485 <key>3</key>
3486 <dict>
3487 <key>patterns</key>
3488 <array>
3489 <dict>
3490 <key>include</key>
3491 <string>#markdown-string</string>
3492 </dict>
3493 </array>
3494 </dict>
3495 </dict>
3496 <key>end</key>
3497 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3498 <key>endCaptures</key>
3499 <dict>
3500 <key>1</key>
3501 <dict>
3502 <key>name</key>
3503 <string>string.other.end.code.fenced.mdx</string>
3504 </dict>
3505 </dict>
3506 <key>name</key>
3507 <string>markup.code.cpp.mdx</string>
3508 <key>patterns</key>
3509 <array>
3510 <dict>
3511 <key>begin</key>
3512 <string>(^|\G)(\s*)(.*)</string>
3513 <key>while</key>
3514 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3515 <key>contentName</key>
3516 <string>meta.embedded.cpp</string>
3517 <key>patterns</key>
3518 <array>
3519 <dict>
3520 <key>include</key>
3521 <string>source.c++</string>
3522 </dict>
3523 <dict>
3524 <key>include</key>
3525 <string>source.cpp</string>
3526 </dict>
3527 </array>
3528 </dict>
3529 </array>
3530 </dict>
3531 <dict>
3532 <key>begin</key>
3533 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:ags|ags\x2dscript|asymptote|c\+\+|edje\x2ddata\x2dcollection|game\x2dmaker\x2dlanguage|swig|(?:.*\.)?(?:asc|ash|asy|c\+\+|cc|cp|cpp|cppm|cxx|edc|gml|h\+\+|hh|hpp|hxx|inl|ino|ipp|ixx|metal|re|tcc|tpp|txx)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
3534 <key>beginCaptures</key>
3535 <dict>
3536 <key>1</key>
3537 <dict>
3538 <key>name</key>
3539 <string>string.other.begin.code.fenced.mdx</string>
3540 </dict>
3541 <key>2</key>
3542 <dict>
3543 <key>name</key>
3544 <string>entity.name.function.mdx</string>
3545 <key>patterns</key>
3546 <array>
3547 <dict>
3548 <key>include</key>
3549 <string>#markdown-string</string>
3550 </dict>
3551 </array>
3552 </dict>
3553 <key>3</key>
3554 <dict>
3555 <key>patterns</key>
3556 <array>
3557 <dict>
3558 <key>include</key>
3559 <string>#markdown-string</string>
3560 </dict>
3561 </array>
3562 </dict>
3563 </dict>
3564 <key>end</key>
3565 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3566 <key>endCaptures</key>
3567 <dict>
3568 <key>1</key>
3569 <dict>
3570 <key>name</key>
3571 <string>string.other.end.code.fenced.mdx</string>
3572 </dict>
3573 </dict>
3574 <key>name</key>
3575 <string>markup.code.cpp.mdx</string>
3576 <key>patterns</key>
3577 <array>
3578 <dict>
3579 <key>begin</key>
3580 <string>(^|\G)(\s*)(.*)</string>
3581 <key>while</key>
3582 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3583 <key>contentName</key>
3584 <string>meta.embedded.cpp</string>
3585 <key>patterns</key>
3586 <array>
3587 <dict>
3588 <key>include</key>
3589 <string>source.c++</string>
3590 </dict>
3591 <dict>
3592 <key>include</key>
3593 <string>source.cpp</string>
3594 </dict>
3595 </array>
3596 </dict>
3597 </array>
3598 </dict>
3599 </array>
3600 </dict>
3601 <key>commonmark-code-fenced-cs</key>
3602 <dict>
3603 <key>patterns</key>
3604 <array>
3605 <dict>
3606 <key>begin</key>
3607 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:beef|c#|cakescript|csharp|(?:.*\.)?(?:bf|cake|cs|cs\.pp|csx|eq|linq|uno)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
3608 <key>beginCaptures</key>
3609 <dict>
3610 <key>1</key>
3611 <dict>
3612 <key>name</key>
3613 <string>string.other.begin.code.fenced.mdx</string>
3614 </dict>
3615 <key>2</key>
3616 <dict>
3617 <key>name</key>
3618 <string>entity.name.function.mdx</string>
3619 <key>patterns</key>
3620 <array>
3621 <dict>
3622 <key>include</key>
3623 <string>#markdown-string</string>
3624 </dict>
3625 </array>
3626 </dict>
3627 <key>3</key>
3628 <dict>
3629 <key>patterns</key>
3630 <array>
3631 <dict>
3632 <key>include</key>
3633 <string>#markdown-string</string>
3634 </dict>
3635 </array>
3636 </dict>
3637 </dict>
3638 <key>end</key>
3639 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3640 <key>endCaptures</key>
3641 <dict>
3642 <key>1</key>
3643 <dict>
3644 <key>name</key>
3645 <string>string.other.end.code.fenced.mdx</string>
3646 </dict>
3647 </dict>
3648 <key>name</key>
3649 <string>markup.code.cs.mdx</string>
3650 <key>patterns</key>
3651 <array>
3652 <dict>
3653 <key>begin</key>
3654 <string>(^|\G)(\s*)(.*)</string>
3655 <key>while</key>
3656 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3657 <key>contentName</key>
3658 <string>meta.embedded.cs</string>
3659 <key>patterns</key>
3660 <array>
3661 <dict>
3662 <key>include</key>
3663 <string>source.cs</string>
3664 </dict>
3665 </array>
3666 </dict>
3667 </array>
3668 </dict>
3669 <dict>
3670 <key>begin</key>
3671 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:beef|c#|cakescript|csharp|(?:.*\.)?(?:bf|cake|cs|cs\.pp|csx|eq|linq|uno)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
3672 <key>beginCaptures</key>
3673 <dict>
3674 <key>1</key>
3675 <dict>
3676 <key>name</key>
3677 <string>string.other.begin.code.fenced.mdx</string>
3678 </dict>
3679 <key>2</key>
3680 <dict>
3681 <key>name</key>
3682 <string>entity.name.function.mdx</string>
3683 <key>patterns</key>
3684 <array>
3685 <dict>
3686 <key>include</key>
3687 <string>#markdown-string</string>
3688 </dict>
3689 </array>
3690 </dict>
3691 <key>3</key>
3692 <dict>
3693 <key>patterns</key>
3694 <array>
3695 <dict>
3696 <key>include</key>
3697 <string>#markdown-string</string>
3698 </dict>
3699 </array>
3700 </dict>
3701 </dict>
3702 <key>end</key>
3703 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3704 <key>endCaptures</key>
3705 <dict>
3706 <key>1</key>
3707 <dict>
3708 <key>name</key>
3709 <string>string.other.end.code.fenced.mdx</string>
3710 </dict>
3711 </dict>
3712 <key>name</key>
3713 <string>markup.code.cs.mdx</string>
3714 <key>patterns</key>
3715 <array>
3716 <dict>
3717 <key>begin</key>
3718 <string>(^|\G)(\s*)(.*)</string>
3719 <key>while</key>
3720 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3721 <key>contentName</key>
3722 <string>meta.embedded.cs</string>
3723 <key>patterns</key>
3724 <array>
3725 <dict>
3726 <key>include</key>
3727 <string>source.cs</string>
3728 </dict>
3729 </array>
3730 </dict>
3731 </array>
3732 </dict>
3733 </array>
3734 </dict>
3735 <key>commonmark-code-fenced-css</key>
3736 <dict>
3737 <key>patterns</key>
3738 <array>
3739 <dict>
3740 <key>begin</key>
3741 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:(?:.*\.)?css))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
3742 <key>beginCaptures</key>
3743 <dict>
3744 <key>1</key>
3745 <dict>
3746 <key>name</key>
3747 <string>string.other.begin.code.fenced.mdx</string>
3748 </dict>
3749 <key>2</key>
3750 <dict>
3751 <key>name</key>
3752 <string>entity.name.function.mdx</string>
3753 <key>patterns</key>
3754 <array>
3755 <dict>
3756 <key>include</key>
3757 <string>#markdown-string</string>
3758 </dict>
3759 </array>
3760 </dict>
3761 <key>3</key>
3762 <dict>
3763 <key>patterns</key>
3764 <array>
3765 <dict>
3766 <key>include</key>
3767 <string>#markdown-string</string>
3768 </dict>
3769 </array>
3770 </dict>
3771 </dict>
3772 <key>end</key>
3773 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3774 <key>endCaptures</key>
3775 <dict>
3776 <key>1</key>
3777 <dict>
3778 <key>name</key>
3779 <string>string.other.end.code.fenced.mdx</string>
3780 </dict>
3781 </dict>
3782 <key>name</key>
3783 <string>markup.code.css.mdx</string>
3784 <key>patterns</key>
3785 <array>
3786 <dict>
3787 <key>begin</key>
3788 <string>(^|\G)(\s*)(.*)</string>
3789 <key>while</key>
3790 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3791 <key>contentName</key>
3792 <string>meta.embedded.css</string>
3793 <key>patterns</key>
3794 <array>
3795 <dict>
3796 <key>include</key>
3797 <string>source.css</string>
3798 </dict>
3799 </array>
3800 </dict>
3801 </array>
3802 </dict>
3803 <dict>
3804 <key>begin</key>
3805 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:(?:.*\.)?css))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
3806 <key>beginCaptures</key>
3807 <dict>
3808 <key>1</key>
3809 <dict>
3810 <key>name</key>
3811 <string>string.other.begin.code.fenced.mdx</string>
3812 </dict>
3813 <key>2</key>
3814 <dict>
3815 <key>name</key>
3816 <string>entity.name.function.mdx</string>
3817 <key>patterns</key>
3818 <array>
3819 <dict>
3820 <key>include</key>
3821 <string>#markdown-string</string>
3822 </dict>
3823 </array>
3824 </dict>
3825 <key>3</key>
3826 <dict>
3827 <key>patterns</key>
3828 <array>
3829 <dict>
3830 <key>include</key>
3831 <string>#markdown-string</string>
3832 </dict>
3833 </array>
3834 </dict>
3835 </dict>
3836 <key>end</key>
3837 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3838 <key>endCaptures</key>
3839 <dict>
3840 <key>1</key>
3841 <dict>
3842 <key>name</key>
3843 <string>string.other.end.code.fenced.mdx</string>
3844 </dict>
3845 </dict>
3846 <key>name</key>
3847 <string>markup.code.css.mdx</string>
3848 <key>patterns</key>
3849 <array>
3850 <dict>
3851 <key>begin</key>
3852 <string>(^|\G)(\s*)(.*)</string>
3853 <key>while</key>
3854 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3855 <key>contentName</key>
3856 <string>meta.embedded.css</string>
3857 <key>patterns</key>
3858 <array>
3859 <dict>
3860 <key>include</key>
3861 <string>source.css</string>
3862 </dict>
3863 </array>
3864 </dict>
3865 </array>
3866 </dict>
3867 </array>
3868 </dict>
3869 <key>commonmark-code-fenced-diff</key>
3870 <dict>
3871 <key>patterns</key>
3872 <array>
3873 <dict>
3874 <key>begin</key>
3875 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:udiff|(?:.*\.)?(?:diff|patch)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
3876 <key>beginCaptures</key>
3877 <dict>
3878 <key>1</key>
3879 <dict>
3880 <key>name</key>
3881 <string>string.other.begin.code.fenced.mdx</string>
3882 </dict>
3883 <key>2</key>
3884 <dict>
3885 <key>name</key>
3886 <string>entity.name.function.mdx</string>
3887 <key>patterns</key>
3888 <array>
3889 <dict>
3890 <key>include</key>
3891 <string>#markdown-string</string>
3892 </dict>
3893 </array>
3894 </dict>
3895 <key>3</key>
3896 <dict>
3897 <key>patterns</key>
3898 <array>
3899 <dict>
3900 <key>include</key>
3901 <string>#markdown-string</string>
3902 </dict>
3903 </array>
3904 </dict>
3905 </dict>
3906 <key>end</key>
3907 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3908 <key>endCaptures</key>
3909 <dict>
3910 <key>1</key>
3911 <dict>
3912 <key>name</key>
3913 <string>string.other.end.code.fenced.mdx</string>
3914 </dict>
3915 </dict>
3916 <key>name</key>
3917 <string>markup.code.diff.mdx</string>
3918 <key>patterns</key>
3919 <array>
3920 <dict>
3921 <key>begin</key>
3922 <string>(^|\G)(\s*)(.*)</string>
3923 <key>while</key>
3924 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3925 <key>contentName</key>
3926 <string>meta.embedded.diff</string>
3927 <key>patterns</key>
3928 <array>
3929 <dict>
3930 <key>include</key>
3931 <string>source.diff</string>
3932 </dict>
3933 </array>
3934 </dict>
3935 </array>
3936 </dict>
3937 <dict>
3938 <key>begin</key>
3939 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:udiff|(?:.*\.)?(?:diff|patch)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
3940 <key>beginCaptures</key>
3941 <dict>
3942 <key>1</key>
3943 <dict>
3944 <key>name</key>
3945 <string>string.other.begin.code.fenced.mdx</string>
3946 </dict>
3947 <key>2</key>
3948 <dict>
3949 <key>name</key>
3950 <string>entity.name.function.mdx</string>
3951 <key>patterns</key>
3952 <array>
3953 <dict>
3954 <key>include</key>
3955 <string>#markdown-string</string>
3956 </dict>
3957 </array>
3958 </dict>
3959 <key>3</key>
3960 <dict>
3961 <key>patterns</key>
3962 <array>
3963 <dict>
3964 <key>include</key>
3965 <string>#markdown-string</string>
3966 </dict>
3967 </array>
3968 </dict>
3969 </dict>
3970 <key>end</key>
3971 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
3972 <key>endCaptures</key>
3973 <dict>
3974 <key>1</key>
3975 <dict>
3976 <key>name</key>
3977 <string>string.other.end.code.fenced.mdx</string>
3978 </dict>
3979 </dict>
3980 <key>name</key>
3981 <string>markup.code.diff.mdx</string>
3982 <key>patterns</key>
3983 <array>
3984 <dict>
3985 <key>begin</key>
3986 <string>(^|\G)(\s*)(.*)</string>
3987 <key>while</key>
3988 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
3989 <key>contentName</key>
3990 <string>meta.embedded.diff</string>
3991 <key>patterns</key>
3992 <array>
3993 <dict>
3994 <key>include</key>
3995 <string>source.diff</string>
3996 </dict>
3997 </array>
3998 </dict>
3999 </array>
4000 </dict>
4001 </array>
4002 </dict>
4003 <key>commonmark-code-fenced-dockerfile</key>
4004 <dict>
4005 <key>patterns</key>
4006 <array>
4007 <dict>
4008 <key>begin</key>
4009 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:containerfile|(?:.*\.)?dockerfile))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
4010 <key>beginCaptures</key>
4011 <dict>
4012 <key>1</key>
4013 <dict>
4014 <key>name</key>
4015 <string>string.other.begin.code.fenced.mdx</string>
4016 </dict>
4017 <key>2</key>
4018 <dict>
4019 <key>name</key>
4020 <string>entity.name.function.mdx</string>
4021 <key>patterns</key>
4022 <array>
4023 <dict>
4024 <key>include</key>
4025 <string>#markdown-string</string>
4026 </dict>
4027 </array>
4028 </dict>
4029 <key>3</key>
4030 <dict>
4031 <key>patterns</key>
4032 <array>
4033 <dict>
4034 <key>include</key>
4035 <string>#markdown-string</string>
4036 </dict>
4037 </array>
4038 </dict>
4039 </dict>
4040 <key>end</key>
4041 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4042 <key>endCaptures</key>
4043 <dict>
4044 <key>1</key>
4045 <dict>
4046 <key>name</key>
4047 <string>string.other.end.code.fenced.mdx</string>
4048 </dict>
4049 </dict>
4050 <key>name</key>
4051 <string>markup.code.dockerfile.mdx</string>
4052 <key>patterns</key>
4053 <array>
4054 <dict>
4055 <key>begin</key>
4056 <string>(^|\G)(\s*)(.*)</string>
4057 <key>while</key>
4058 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4059 <key>contentName</key>
4060 <string>meta.embedded.dockerfile</string>
4061 <key>patterns</key>
4062 <array>
4063 <dict>
4064 <key>include</key>
4065 <string>source.dockerfile</string>
4066 </dict>
4067 </array>
4068 </dict>
4069 </array>
4070 </dict>
4071 <dict>
4072 <key>begin</key>
4073 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:containerfile|(?:.*\.)?dockerfile))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
4074 <key>beginCaptures</key>
4075 <dict>
4076 <key>1</key>
4077 <dict>
4078 <key>name</key>
4079 <string>string.other.begin.code.fenced.mdx</string>
4080 </dict>
4081 <key>2</key>
4082 <dict>
4083 <key>name</key>
4084 <string>entity.name.function.mdx</string>
4085 <key>patterns</key>
4086 <array>
4087 <dict>
4088 <key>include</key>
4089 <string>#markdown-string</string>
4090 </dict>
4091 </array>
4092 </dict>
4093 <key>3</key>
4094 <dict>
4095 <key>patterns</key>
4096 <array>
4097 <dict>
4098 <key>include</key>
4099 <string>#markdown-string</string>
4100 </dict>
4101 </array>
4102 </dict>
4103 </dict>
4104 <key>end</key>
4105 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4106 <key>endCaptures</key>
4107 <dict>
4108 <key>1</key>
4109 <dict>
4110 <key>name</key>
4111 <string>string.other.end.code.fenced.mdx</string>
4112 </dict>
4113 </dict>
4114 <key>name</key>
4115 <string>markup.code.dockerfile.mdx</string>
4116 <key>patterns</key>
4117 <array>
4118 <dict>
4119 <key>begin</key>
4120 <string>(^|\G)(\s*)(.*)</string>
4121 <key>while</key>
4122 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4123 <key>contentName</key>
4124 <string>meta.embedded.dockerfile</string>
4125 <key>patterns</key>
4126 <array>
4127 <dict>
4128 <key>include</key>
4129 <string>source.dockerfile</string>
4130 </dict>
4131 </array>
4132 </dict>
4133 </array>
4134 </dict>
4135 </array>
4136 </dict>
4137 <key>commonmark-code-fenced-elixir</key>
4138 <dict>
4139 <key>patterns</key>
4140 <array>
4141 <dict>
4142 <key>begin</key>
4143 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:elixir|(?:.*\.)?(?:ex|exs)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
4144 <key>beginCaptures</key>
4145 <dict>
4146 <key>1</key>
4147 <dict>
4148 <key>name</key>
4149 <string>string.other.begin.code.fenced.mdx</string>
4150 </dict>
4151 <key>2</key>
4152 <dict>
4153 <key>name</key>
4154 <string>entity.name.function.mdx</string>
4155 <key>patterns</key>
4156 <array>
4157 <dict>
4158 <key>include</key>
4159 <string>#markdown-string</string>
4160 </dict>
4161 </array>
4162 </dict>
4163 <key>3</key>
4164 <dict>
4165 <key>patterns</key>
4166 <array>
4167 <dict>
4168 <key>include</key>
4169 <string>#markdown-string</string>
4170 </dict>
4171 </array>
4172 </dict>
4173 </dict>
4174 <key>end</key>
4175 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4176 <key>endCaptures</key>
4177 <dict>
4178 <key>1</key>
4179 <dict>
4180 <key>name</key>
4181 <string>string.other.end.code.fenced.mdx</string>
4182 </dict>
4183 </dict>
4184 <key>name</key>
4185 <string>markup.code.elixir.mdx</string>
4186 <key>patterns</key>
4187 <array>
4188 <dict>
4189 <key>begin</key>
4190 <string>(^|\G)(\s*)(.*)</string>
4191 <key>while</key>
4192 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4193 <key>contentName</key>
4194 <string>meta.embedded.elixir</string>
4195 <key>patterns</key>
4196 <array>
4197 <dict>
4198 <key>include</key>
4199 <string>source.elixir</string>
4200 </dict>
4201 </array>
4202 </dict>
4203 </array>
4204 </dict>
4205 <dict>
4206 <key>begin</key>
4207 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:elixir|(?:.*\.)?(?:ex|exs)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
4208 <key>beginCaptures</key>
4209 <dict>
4210 <key>1</key>
4211 <dict>
4212 <key>name</key>
4213 <string>string.other.begin.code.fenced.mdx</string>
4214 </dict>
4215 <key>2</key>
4216 <dict>
4217 <key>name</key>
4218 <string>entity.name.function.mdx</string>
4219 <key>patterns</key>
4220 <array>
4221 <dict>
4222 <key>include</key>
4223 <string>#markdown-string</string>
4224 </dict>
4225 </array>
4226 </dict>
4227 <key>3</key>
4228 <dict>
4229 <key>patterns</key>
4230 <array>
4231 <dict>
4232 <key>include</key>
4233 <string>#markdown-string</string>
4234 </dict>
4235 </array>
4236 </dict>
4237 </dict>
4238 <key>end</key>
4239 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4240 <key>endCaptures</key>
4241 <dict>
4242 <key>1</key>
4243 <dict>
4244 <key>name</key>
4245 <string>string.other.end.code.fenced.mdx</string>
4246 </dict>
4247 </dict>
4248 <key>name</key>
4249 <string>markup.code.elixir.mdx</string>
4250 <key>patterns</key>
4251 <array>
4252 <dict>
4253 <key>begin</key>
4254 <string>(^|\G)(\s*)(.*)</string>
4255 <key>while</key>
4256 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4257 <key>contentName</key>
4258 <string>meta.embedded.elixir</string>
4259 <key>patterns</key>
4260 <array>
4261 <dict>
4262 <key>include</key>
4263 <string>source.elixir</string>
4264 </dict>
4265 </array>
4266 </dict>
4267 </array>
4268 </dict>
4269 </array>
4270 </dict>
4271 <key>commonmark-code-fenced-elm</key>
4272 <dict>
4273 <key>patterns</key>
4274 <array>
4275 <dict>
4276 <key>begin</key>
4277 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:(?:.*\.)?elm))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
4278 <key>beginCaptures</key>
4279 <dict>
4280 <key>1</key>
4281 <dict>
4282 <key>name</key>
4283 <string>string.other.begin.code.fenced.mdx</string>
4284 </dict>
4285 <key>2</key>
4286 <dict>
4287 <key>name</key>
4288 <string>entity.name.function.mdx</string>
4289 <key>patterns</key>
4290 <array>
4291 <dict>
4292 <key>include</key>
4293 <string>#markdown-string</string>
4294 </dict>
4295 </array>
4296 </dict>
4297 <key>3</key>
4298 <dict>
4299 <key>patterns</key>
4300 <array>
4301 <dict>
4302 <key>include</key>
4303 <string>#markdown-string</string>
4304 </dict>
4305 </array>
4306 </dict>
4307 </dict>
4308 <key>end</key>
4309 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4310 <key>endCaptures</key>
4311 <dict>
4312 <key>1</key>
4313 <dict>
4314 <key>name</key>
4315 <string>string.other.end.code.fenced.mdx</string>
4316 </dict>
4317 </dict>
4318 <key>name</key>
4319 <string>markup.code.elm.mdx</string>
4320 <key>patterns</key>
4321 <array>
4322 <dict>
4323 <key>begin</key>
4324 <string>(^|\G)(\s*)(.*)</string>
4325 <key>while</key>
4326 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4327 <key>contentName</key>
4328 <string>meta.embedded.elm</string>
4329 <key>patterns</key>
4330 <array>
4331 <dict>
4332 <key>include</key>
4333 <string>source.elm</string>
4334 </dict>
4335 </array>
4336 </dict>
4337 </array>
4338 </dict>
4339 <dict>
4340 <key>begin</key>
4341 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:(?:.*\.)?elm))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
4342 <key>beginCaptures</key>
4343 <dict>
4344 <key>1</key>
4345 <dict>
4346 <key>name</key>
4347 <string>string.other.begin.code.fenced.mdx</string>
4348 </dict>
4349 <key>2</key>
4350 <dict>
4351 <key>name</key>
4352 <string>entity.name.function.mdx</string>
4353 <key>patterns</key>
4354 <array>
4355 <dict>
4356 <key>include</key>
4357 <string>#markdown-string</string>
4358 </dict>
4359 </array>
4360 </dict>
4361 <key>3</key>
4362 <dict>
4363 <key>patterns</key>
4364 <array>
4365 <dict>
4366 <key>include</key>
4367 <string>#markdown-string</string>
4368 </dict>
4369 </array>
4370 </dict>
4371 </dict>
4372 <key>end</key>
4373 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4374 <key>endCaptures</key>
4375 <dict>
4376 <key>1</key>
4377 <dict>
4378 <key>name</key>
4379 <string>string.other.end.code.fenced.mdx</string>
4380 </dict>
4381 </dict>
4382 <key>name</key>
4383 <string>markup.code.elm.mdx</string>
4384 <key>patterns</key>
4385 <array>
4386 <dict>
4387 <key>begin</key>
4388 <string>(^|\G)(\s*)(.*)</string>
4389 <key>while</key>
4390 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4391 <key>contentName</key>
4392 <string>meta.embedded.elm</string>
4393 <key>patterns</key>
4394 <array>
4395 <dict>
4396 <key>include</key>
4397 <string>source.elm</string>
4398 </dict>
4399 </array>
4400 </dict>
4401 </array>
4402 </dict>
4403 </array>
4404 </dict>
4405 <key>commonmark-code-fenced-erlang</key>
4406 <dict>
4407 <key>patterns</key>
4408 <array>
4409 <dict>
4410 <key>begin</key>
4411 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:erlang|(?:.*\.)?(?:app|app\.src|erl|es|escript|hrl|xrl|yrl)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
4412 <key>beginCaptures</key>
4413 <dict>
4414 <key>1</key>
4415 <dict>
4416 <key>name</key>
4417 <string>string.other.begin.code.fenced.mdx</string>
4418 </dict>
4419 <key>2</key>
4420 <dict>
4421 <key>name</key>
4422 <string>entity.name.function.mdx</string>
4423 <key>patterns</key>
4424 <array>
4425 <dict>
4426 <key>include</key>
4427 <string>#markdown-string</string>
4428 </dict>
4429 </array>
4430 </dict>
4431 <key>3</key>
4432 <dict>
4433 <key>patterns</key>
4434 <array>
4435 <dict>
4436 <key>include</key>
4437 <string>#markdown-string</string>
4438 </dict>
4439 </array>
4440 </dict>
4441 </dict>
4442 <key>end</key>
4443 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4444 <key>endCaptures</key>
4445 <dict>
4446 <key>1</key>
4447 <dict>
4448 <key>name</key>
4449 <string>string.other.end.code.fenced.mdx</string>
4450 </dict>
4451 </dict>
4452 <key>name</key>
4453 <string>markup.code.erlang.mdx</string>
4454 <key>patterns</key>
4455 <array>
4456 <dict>
4457 <key>begin</key>
4458 <string>(^|\G)(\s*)(.*)</string>
4459 <key>while</key>
4460 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4461 <key>contentName</key>
4462 <string>meta.embedded.erlang</string>
4463 <key>patterns</key>
4464 <array>
4465 <dict>
4466 <key>include</key>
4467 <string>source.erlang</string>
4468 </dict>
4469 </array>
4470 </dict>
4471 </array>
4472 </dict>
4473 <dict>
4474 <key>begin</key>
4475 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:erlang|(?:.*\.)?(?:app|app\.src|erl|es|escript|hrl|xrl|yrl)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
4476 <key>beginCaptures</key>
4477 <dict>
4478 <key>1</key>
4479 <dict>
4480 <key>name</key>
4481 <string>string.other.begin.code.fenced.mdx</string>
4482 </dict>
4483 <key>2</key>
4484 <dict>
4485 <key>name</key>
4486 <string>entity.name.function.mdx</string>
4487 <key>patterns</key>
4488 <array>
4489 <dict>
4490 <key>include</key>
4491 <string>#markdown-string</string>
4492 </dict>
4493 </array>
4494 </dict>
4495 <key>3</key>
4496 <dict>
4497 <key>patterns</key>
4498 <array>
4499 <dict>
4500 <key>include</key>
4501 <string>#markdown-string</string>
4502 </dict>
4503 </array>
4504 </dict>
4505 </dict>
4506 <key>end</key>
4507 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4508 <key>endCaptures</key>
4509 <dict>
4510 <key>1</key>
4511 <dict>
4512 <key>name</key>
4513 <string>string.other.end.code.fenced.mdx</string>
4514 </dict>
4515 </dict>
4516 <key>name</key>
4517 <string>markup.code.erlang.mdx</string>
4518 <key>patterns</key>
4519 <array>
4520 <dict>
4521 <key>begin</key>
4522 <string>(^|\G)(\s*)(.*)</string>
4523 <key>while</key>
4524 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4525 <key>contentName</key>
4526 <string>meta.embedded.erlang</string>
4527 <key>patterns</key>
4528 <array>
4529 <dict>
4530 <key>include</key>
4531 <string>source.erlang</string>
4532 </dict>
4533 </array>
4534 </dict>
4535 </array>
4536 </dict>
4537 </array>
4538 </dict>
4539 <key>commonmark-code-fenced-gitconfig</key>
4540 <dict>
4541 <key>patterns</key>
4542 <array>
4543 <dict>
4544 <key>begin</key>
4545 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:git\x2dconfig|gitmodules|(?:.*\.)?gitconfig))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
4546 <key>beginCaptures</key>
4547 <dict>
4548 <key>1</key>
4549 <dict>
4550 <key>name</key>
4551 <string>string.other.begin.code.fenced.mdx</string>
4552 </dict>
4553 <key>2</key>
4554 <dict>
4555 <key>name</key>
4556 <string>entity.name.function.mdx</string>
4557 <key>patterns</key>
4558 <array>
4559 <dict>
4560 <key>include</key>
4561 <string>#markdown-string</string>
4562 </dict>
4563 </array>
4564 </dict>
4565 <key>3</key>
4566 <dict>
4567 <key>patterns</key>
4568 <array>
4569 <dict>
4570 <key>include</key>
4571 <string>#markdown-string</string>
4572 </dict>
4573 </array>
4574 </dict>
4575 </dict>
4576 <key>end</key>
4577 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4578 <key>endCaptures</key>
4579 <dict>
4580 <key>1</key>
4581 <dict>
4582 <key>name</key>
4583 <string>string.other.end.code.fenced.mdx</string>
4584 </dict>
4585 </dict>
4586 <key>name</key>
4587 <string>markup.code.gitconfig.mdx</string>
4588 <key>patterns</key>
4589 <array>
4590 <dict>
4591 <key>begin</key>
4592 <string>(^|\G)(\s*)(.*)</string>
4593 <key>while</key>
4594 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4595 <key>contentName</key>
4596 <string>meta.embedded.gitconfig</string>
4597 <key>patterns</key>
4598 <array>
4599 <dict>
4600 <key>include</key>
4601 <string>source.gitconfig</string>
4602 </dict>
4603 </array>
4604 </dict>
4605 </array>
4606 </dict>
4607 <dict>
4608 <key>begin</key>
4609 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:git\x2dconfig|gitmodules|(?:.*\.)?gitconfig))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
4610 <key>beginCaptures</key>
4611 <dict>
4612 <key>1</key>
4613 <dict>
4614 <key>name</key>
4615 <string>string.other.begin.code.fenced.mdx</string>
4616 </dict>
4617 <key>2</key>
4618 <dict>
4619 <key>name</key>
4620 <string>entity.name.function.mdx</string>
4621 <key>patterns</key>
4622 <array>
4623 <dict>
4624 <key>include</key>
4625 <string>#markdown-string</string>
4626 </dict>
4627 </array>
4628 </dict>
4629 <key>3</key>
4630 <dict>
4631 <key>patterns</key>
4632 <array>
4633 <dict>
4634 <key>include</key>
4635 <string>#markdown-string</string>
4636 </dict>
4637 </array>
4638 </dict>
4639 </dict>
4640 <key>end</key>
4641 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4642 <key>endCaptures</key>
4643 <dict>
4644 <key>1</key>
4645 <dict>
4646 <key>name</key>
4647 <string>string.other.end.code.fenced.mdx</string>
4648 </dict>
4649 </dict>
4650 <key>name</key>
4651 <string>markup.code.gitconfig.mdx</string>
4652 <key>patterns</key>
4653 <array>
4654 <dict>
4655 <key>begin</key>
4656 <string>(^|\G)(\s*)(.*)</string>
4657 <key>while</key>
4658 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4659 <key>contentName</key>
4660 <string>meta.embedded.gitconfig</string>
4661 <key>patterns</key>
4662 <array>
4663 <dict>
4664 <key>include</key>
4665 <string>source.gitconfig</string>
4666 </dict>
4667 </array>
4668 </dict>
4669 </array>
4670 </dict>
4671 </array>
4672 </dict>
4673 <key>commonmark-code-fenced-go</key>
4674 <dict>
4675 <key>patterns</key>
4676 <array>
4677 <dict>
4678 <key>begin</key>
4679 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:golang|(?:.*\.)?go))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
4680 <key>beginCaptures</key>
4681 <dict>
4682 <key>1</key>
4683 <dict>
4684 <key>name</key>
4685 <string>string.other.begin.code.fenced.mdx</string>
4686 </dict>
4687 <key>2</key>
4688 <dict>
4689 <key>name</key>
4690 <string>entity.name.function.mdx</string>
4691 <key>patterns</key>
4692 <array>
4693 <dict>
4694 <key>include</key>
4695 <string>#markdown-string</string>
4696 </dict>
4697 </array>
4698 </dict>
4699 <key>3</key>
4700 <dict>
4701 <key>patterns</key>
4702 <array>
4703 <dict>
4704 <key>include</key>
4705 <string>#markdown-string</string>
4706 </dict>
4707 </array>
4708 </dict>
4709 </dict>
4710 <key>end</key>
4711 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4712 <key>endCaptures</key>
4713 <dict>
4714 <key>1</key>
4715 <dict>
4716 <key>name</key>
4717 <string>string.other.end.code.fenced.mdx</string>
4718 </dict>
4719 </dict>
4720 <key>name</key>
4721 <string>markup.code.go.mdx</string>
4722 <key>patterns</key>
4723 <array>
4724 <dict>
4725 <key>begin</key>
4726 <string>(^|\G)(\s*)(.*)</string>
4727 <key>while</key>
4728 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4729 <key>contentName</key>
4730 <string>meta.embedded.go</string>
4731 <key>patterns</key>
4732 <array>
4733 <dict>
4734 <key>include</key>
4735 <string>source.go</string>
4736 </dict>
4737 </array>
4738 </dict>
4739 </array>
4740 </dict>
4741 <dict>
4742 <key>begin</key>
4743 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:golang|(?:.*\.)?go))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
4744 <key>beginCaptures</key>
4745 <dict>
4746 <key>1</key>
4747 <dict>
4748 <key>name</key>
4749 <string>string.other.begin.code.fenced.mdx</string>
4750 </dict>
4751 <key>2</key>
4752 <dict>
4753 <key>name</key>
4754 <string>entity.name.function.mdx</string>
4755 <key>patterns</key>
4756 <array>
4757 <dict>
4758 <key>include</key>
4759 <string>#markdown-string</string>
4760 </dict>
4761 </array>
4762 </dict>
4763 <key>3</key>
4764 <dict>
4765 <key>patterns</key>
4766 <array>
4767 <dict>
4768 <key>include</key>
4769 <string>#markdown-string</string>
4770 </dict>
4771 </array>
4772 </dict>
4773 </dict>
4774 <key>end</key>
4775 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4776 <key>endCaptures</key>
4777 <dict>
4778 <key>1</key>
4779 <dict>
4780 <key>name</key>
4781 <string>string.other.end.code.fenced.mdx</string>
4782 </dict>
4783 </dict>
4784 <key>name</key>
4785 <string>markup.code.go.mdx</string>
4786 <key>patterns</key>
4787 <array>
4788 <dict>
4789 <key>begin</key>
4790 <string>(^|\G)(\s*)(.*)</string>
4791 <key>while</key>
4792 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4793 <key>contentName</key>
4794 <string>meta.embedded.go</string>
4795 <key>patterns</key>
4796 <array>
4797 <dict>
4798 <key>include</key>
4799 <string>source.go</string>
4800 </dict>
4801 </array>
4802 </dict>
4803 </array>
4804 </dict>
4805 </array>
4806 </dict>
4807 <key>commonmark-code-fenced-graphql</key>
4808 <dict>
4809 <key>patterns</key>
4810 <array>
4811 <dict>
4812 <key>begin</key>
4813 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:(?:.*\.)?(?:gql|graphql|graphqls)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
4814 <key>beginCaptures</key>
4815 <dict>
4816 <key>1</key>
4817 <dict>
4818 <key>name</key>
4819 <string>string.other.begin.code.fenced.mdx</string>
4820 </dict>
4821 <key>2</key>
4822 <dict>
4823 <key>name</key>
4824 <string>entity.name.function.mdx</string>
4825 <key>patterns</key>
4826 <array>
4827 <dict>
4828 <key>include</key>
4829 <string>#markdown-string</string>
4830 </dict>
4831 </array>
4832 </dict>
4833 <key>3</key>
4834 <dict>
4835 <key>patterns</key>
4836 <array>
4837 <dict>
4838 <key>include</key>
4839 <string>#markdown-string</string>
4840 </dict>
4841 </array>
4842 </dict>
4843 </dict>
4844 <key>end</key>
4845 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4846 <key>endCaptures</key>
4847 <dict>
4848 <key>1</key>
4849 <dict>
4850 <key>name</key>
4851 <string>string.other.end.code.fenced.mdx</string>
4852 </dict>
4853 </dict>
4854 <key>name</key>
4855 <string>markup.code.graphql.mdx</string>
4856 <key>patterns</key>
4857 <array>
4858 <dict>
4859 <key>begin</key>
4860 <string>(^|\G)(\s*)(.*)</string>
4861 <key>while</key>
4862 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4863 <key>contentName</key>
4864 <string>meta.embedded.graphql</string>
4865 <key>patterns</key>
4866 <array>
4867 <dict>
4868 <key>include</key>
4869 <string>source.graphql</string>
4870 </dict>
4871 </array>
4872 </dict>
4873 </array>
4874 </dict>
4875 <dict>
4876 <key>begin</key>
4877 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:(?:.*\.)?(?:gql|graphql|graphqls)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
4878 <key>beginCaptures</key>
4879 <dict>
4880 <key>1</key>
4881 <dict>
4882 <key>name</key>
4883 <string>string.other.begin.code.fenced.mdx</string>
4884 </dict>
4885 <key>2</key>
4886 <dict>
4887 <key>name</key>
4888 <string>entity.name.function.mdx</string>
4889 <key>patterns</key>
4890 <array>
4891 <dict>
4892 <key>include</key>
4893 <string>#markdown-string</string>
4894 </dict>
4895 </array>
4896 </dict>
4897 <key>3</key>
4898 <dict>
4899 <key>patterns</key>
4900 <array>
4901 <dict>
4902 <key>include</key>
4903 <string>#markdown-string</string>
4904 </dict>
4905 </array>
4906 </dict>
4907 </dict>
4908 <key>end</key>
4909 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4910 <key>endCaptures</key>
4911 <dict>
4912 <key>1</key>
4913 <dict>
4914 <key>name</key>
4915 <string>string.other.end.code.fenced.mdx</string>
4916 </dict>
4917 </dict>
4918 <key>name</key>
4919 <string>markup.code.graphql.mdx</string>
4920 <key>patterns</key>
4921 <array>
4922 <dict>
4923 <key>begin</key>
4924 <string>(^|\G)(\s*)(.*)</string>
4925 <key>while</key>
4926 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4927 <key>contentName</key>
4928 <string>meta.embedded.graphql</string>
4929 <key>patterns</key>
4930 <array>
4931 <dict>
4932 <key>include</key>
4933 <string>source.graphql</string>
4934 </dict>
4935 </array>
4936 </dict>
4937 </array>
4938 </dict>
4939 </array>
4940 </dict>
4941 <key>commonmark-code-fenced-haskell</key>
4942 <dict>
4943 <key>patterns</key>
4944 <array>
4945 <dict>
4946 <key>begin</key>
4947 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:c2hs|c2hs\x2dhaskell|frege|haskell|(?:.*\.)?(?:chs|dhall|hs|hs\x2dboot|hsc)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
4948 <key>beginCaptures</key>
4949 <dict>
4950 <key>1</key>
4951 <dict>
4952 <key>name</key>
4953 <string>string.other.begin.code.fenced.mdx</string>
4954 </dict>
4955 <key>2</key>
4956 <dict>
4957 <key>name</key>
4958 <string>entity.name.function.mdx</string>
4959 <key>patterns</key>
4960 <array>
4961 <dict>
4962 <key>include</key>
4963 <string>#markdown-string</string>
4964 </dict>
4965 </array>
4966 </dict>
4967 <key>3</key>
4968 <dict>
4969 <key>patterns</key>
4970 <array>
4971 <dict>
4972 <key>include</key>
4973 <string>#markdown-string</string>
4974 </dict>
4975 </array>
4976 </dict>
4977 </dict>
4978 <key>end</key>
4979 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
4980 <key>endCaptures</key>
4981 <dict>
4982 <key>1</key>
4983 <dict>
4984 <key>name</key>
4985 <string>string.other.end.code.fenced.mdx</string>
4986 </dict>
4987 </dict>
4988 <key>name</key>
4989 <string>markup.code.haskell.mdx</string>
4990 <key>patterns</key>
4991 <array>
4992 <dict>
4993 <key>begin</key>
4994 <string>(^|\G)(\s*)(.*)</string>
4995 <key>while</key>
4996 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
4997 <key>contentName</key>
4998 <string>meta.embedded.haskell</string>
4999 <key>patterns</key>
5000 <array>
5001 <dict>
5002 <key>include</key>
5003 <string>source.haskell</string>
5004 </dict>
5005 </array>
5006 </dict>
5007 </array>
5008 </dict>
5009 <dict>
5010 <key>begin</key>
5011 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:c2hs|c2hs\x2dhaskell|frege|haskell|(?:.*\.)?(?:chs|dhall|hs|hs\x2dboot|hsc)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
5012 <key>beginCaptures</key>
5013 <dict>
5014 <key>1</key>
5015 <dict>
5016 <key>name</key>
5017 <string>string.other.begin.code.fenced.mdx</string>
5018 </dict>
5019 <key>2</key>
5020 <dict>
5021 <key>name</key>
5022 <string>entity.name.function.mdx</string>
5023 <key>patterns</key>
5024 <array>
5025 <dict>
5026 <key>include</key>
5027 <string>#markdown-string</string>
5028 </dict>
5029 </array>
5030 </dict>
5031 <key>3</key>
5032 <dict>
5033 <key>patterns</key>
5034 <array>
5035 <dict>
5036 <key>include</key>
5037 <string>#markdown-string</string>
5038 </dict>
5039 </array>
5040 </dict>
5041 </dict>
5042 <key>end</key>
5043 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5044 <key>endCaptures</key>
5045 <dict>
5046 <key>1</key>
5047 <dict>
5048 <key>name</key>
5049 <string>string.other.end.code.fenced.mdx</string>
5050 </dict>
5051 </dict>
5052 <key>name</key>
5053 <string>markup.code.haskell.mdx</string>
5054 <key>patterns</key>
5055 <array>
5056 <dict>
5057 <key>begin</key>
5058 <string>(^|\G)(\s*)(.*)</string>
5059 <key>while</key>
5060 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5061 <key>contentName</key>
5062 <string>meta.embedded.haskell</string>
5063 <key>patterns</key>
5064 <array>
5065 <dict>
5066 <key>include</key>
5067 <string>source.haskell</string>
5068 </dict>
5069 </array>
5070 </dict>
5071 </array>
5072 </dict>
5073 </array>
5074 </dict>
5075 <key>commonmark-code-fenced-html</key>
5076 <dict>
5077 <key>patterns</key>
5078 <array>
5079 <dict>
5080 <key>begin</key>
5081 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:html|(?:.*\.)?(?:hta|htm|html\.hl|kit|mtml|xht|xhtml)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
5082 <key>beginCaptures</key>
5083 <dict>
5084 <key>1</key>
5085 <dict>
5086 <key>name</key>
5087 <string>string.other.begin.code.fenced.mdx</string>
5088 </dict>
5089 <key>2</key>
5090 <dict>
5091 <key>name</key>
5092 <string>entity.name.function.mdx</string>
5093 <key>patterns</key>
5094 <array>
5095 <dict>
5096 <key>include</key>
5097 <string>#markdown-string</string>
5098 </dict>
5099 </array>
5100 </dict>
5101 <key>3</key>
5102 <dict>
5103 <key>patterns</key>
5104 <array>
5105 <dict>
5106 <key>include</key>
5107 <string>#markdown-string</string>
5108 </dict>
5109 </array>
5110 </dict>
5111 </dict>
5112 <key>end</key>
5113 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5114 <key>endCaptures</key>
5115 <dict>
5116 <key>1</key>
5117 <dict>
5118 <key>name</key>
5119 <string>string.other.end.code.fenced.mdx</string>
5120 </dict>
5121 </dict>
5122 <key>name</key>
5123 <string>markup.code.html.mdx</string>
5124 <key>patterns</key>
5125 <array>
5126 <dict>
5127 <key>begin</key>
5128 <string>(^|\G)(\s*)(.*)</string>
5129 <key>while</key>
5130 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5131 <key>contentName</key>
5132 <string>meta.embedded.html</string>
5133 <key>patterns</key>
5134 <array>
5135 <dict>
5136 <key>include</key>
5137 <string>text.html.basic</string>
5138 </dict>
5139 </array>
5140 </dict>
5141 </array>
5142 </dict>
5143 <dict>
5144 <key>begin</key>
5145 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:html|(?:.*\.)?(?:hta|htm|html\.hl|kit|mtml|xht|xhtml)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
5146 <key>beginCaptures</key>
5147 <dict>
5148 <key>1</key>
5149 <dict>
5150 <key>name</key>
5151 <string>string.other.begin.code.fenced.mdx</string>
5152 </dict>
5153 <key>2</key>
5154 <dict>
5155 <key>name</key>
5156 <string>entity.name.function.mdx</string>
5157 <key>patterns</key>
5158 <array>
5159 <dict>
5160 <key>include</key>
5161 <string>#markdown-string</string>
5162 </dict>
5163 </array>
5164 </dict>
5165 <key>3</key>
5166 <dict>
5167 <key>patterns</key>
5168 <array>
5169 <dict>
5170 <key>include</key>
5171 <string>#markdown-string</string>
5172 </dict>
5173 </array>
5174 </dict>
5175 </dict>
5176 <key>end</key>
5177 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5178 <key>endCaptures</key>
5179 <dict>
5180 <key>1</key>
5181 <dict>
5182 <key>name</key>
5183 <string>string.other.end.code.fenced.mdx</string>
5184 </dict>
5185 </dict>
5186 <key>name</key>
5187 <string>markup.code.html.mdx</string>
5188 <key>patterns</key>
5189 <array>
5190 <dict>
5191 <key>begin</key>
5192 <string>(^|\G)(\s*)(.*)</string>
5193 <key>while</key>
5194 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5195 <key>contentName</key>
5196 <string>meta.embedded.html</string>
5197 <key>patterns</key>
5198 <array>
5199 <dict>
5200 <key>include</key>
5201 <string>text.html.basic</string>
5202 </dict>
5203 </array>
5204 </dict>
5205 </array>
5206 </dict>
5207 </array>
5208 </dict>
5209 <key>commonmark-code-fenced-ini</key>
5210 <dict>
5211 <key>patterns</key>
5212 <array>
5213 <dict>
5214 <key>begin</key>
5215 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:altium|altium\x2ddesigner|dosini|(?:.*\.)?(?:cnf|dof|ini|lektorproject|outjob|pcbdoc|prefs|prjpcb|properties|schdoc|url)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
5216 <key>beginCaptures</key>
5217 <dict>
5218 <key>1</key>
5219 <dict>
5220 <key>name</key>
5221 <string>string.other.begin.code.fenced.mdx</string>
5222 </dict>
5223 <key>2</key>
5224 <dict>
5225 <key>name</key>
5226 <string>entity.name.function.mdx</string>
5227 <key>patterns</key>
5228 <array>
5229 <dict>
5230 <key>include</key>
5231 <string>#markdown-string</string>
5232 </dict>
5233 </array>
5234 </dict>
5235 <key>3</key>
5236 <dict>
5237 <key>patterns</key>
5238 <array>
5239 <dict>
5240 <key>include</key>
5241 <string>#markdown-string</string>
5242 </dict>
5243 </array>
5244 </dict>
5245 </dict>
5246 <key>end</key>
5247 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5248 <key>endCaptures</key>
5249 <dict>
5250 <key>1</key>
5251 <dict>
5252 <key>name</key>
5253 <string>string.other.end.code.fenced.mdx</string>
5254 </dict>
5255 </dict>
5256 <key>name</key>
5257 <string>markup.code.ini.mdx</string>
5258 <key>patterns</key>
5259 <array>
5260 <dict>
5261 <key>begin</key>
5262 <string>(^|\G)(\s*)(.*)</string>
5263 <key>while</key>
5264 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5265 <key>contentName</key>
5266 <string>meta.embedded.ini</string>
5267 <key>patterns</key>
5268 <array>
5269 <dict>
5270 <key>include</key>
5271 <string>source.ini</string>
5272 </dict>
5273 </array>
5274 </dict>
5275 </array>
5276 </dict>
5277 <dict>
5278 <key>begin</key>
5279 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:altium|altium\x2ddesigner|dosini|(?:.*\.)?(?:cnf|dof|ini|lektorproject|outjob|pcbdoc|prefs|prjpcb|properties|schdoc|url)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
5280 <key>beginCaptures</key>
5281 <dict>
5282 <key>1</key>
5283 <dict>
5284 <key>name</key>
5285 <string>string.other.begin.code.fenced.mdx</string>
5286 </dict>
5287 <key>2</key>
5288 <dict>
5289 <key>name</key>
5290 <string>entity.name.function.mdx</string>
5291 <key>patterns</key>
5292 <array>
5293 <dict>
5294 <key>include</key>
5295 <string>#markdown-string</string>
5296 </dict>
5297 </array>
5298 </dict>
5299 <key>3</key>
5300 <dict>
5301 <key>patterns</key>
5302 <array>
5303 <dict>
5304 <key>include</key>
5305 <string>#markdown-string</string>
5306 </dict>
5307 </array>
5308 </dict>
5309 </dict>
5310 <key>end</key>
5311 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5312 <key>endCaptures</key>
5313 <dict>
5314 <key>1</key>
5315 <dict>
5316 <key>name</key>
5317 <string>string.other.end.code.fenced.mdx</string>
5318 </dict>
5319 </dict>
5320 <key>name</key>
5321 <string>markup.code.ini.mdx</string>
5322 <key>patterns</key>
5323 <array>
5324 <dict>
5325 <key>begin</key>
5326 <string>(^|\G)(\s*)(.*)</string>
5327 <key>while</key>
5328 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5329 <key>contentName</key>
5330 <string>meta.embedded.ini</string>
5331 <key>patterns</key>
5332 <array>
5333 <dict>
5334 <key>include</key>
5335 <string>source.ini</string>
5336 </dict>
5337 </array>
5338 </dict>
5339 </array>
5340 </dict>
5341 </array>
5342 </dict>
5343 <key>commonmark-code-fenced-java</key>
5344 <dict>
5345 <key>patterns</key>
5346 <array>
5347 <dict>
5348 <key>begin</key>
5349 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:chuck|unrealscript|(?:.*\.)?(?:ck|jav|java|jsh|uc)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
5350 <key>beginCaptures</key>
5351 <dict>
5352 <key>1</key>
5353 <dict>
5354 <key>name</key>
5355 <string>string.other.begin.code.fenced.mdx</string>
5356 </dict>
5357 <key>2</key>
5358 <dict>
5359 <key>name</key>
5360 <string>entity.name.function.mdx</string>
5361 <key>patterns</key>
5362 <array>
5363 <dict>
5364 <key>include</key>
5365 <string>#markdown-string</string>
5366 </dict>
5367 </array>
5368 </dict>
5369 <key>3</key>
5370 <dict>
5371 <key>patterns</key>
5372 <array>
5373 <dict>
5374 <key>include</key>
5375 <string>#markdown-string</string>
5376 </dict>
5377 </array>
5378 </dict>
5379 </dict>
5380 <key>end</key>
5381 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5382 <key>endCaptures</key>
5383 <dict>
5384 <key>1</key>
5385 <dict>
5386 <key>name</key>
5387 <string>string.other.end.code.fenced.mdx</string>
5388 </dict>
5389 </dict>
5390 <key>name</key>
5391 <string>markup.code.java.mdx</string>
5392 <key>patterns</key>
5393 <array>
5394 <dict>
5395 <key>begin</key>
5396 <string>(^|\G)(\s*)(.*)</string>
5397 <key>while</key>
5398 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5399 <key>contentName</key>
5400 <string>meta.embedded.java</string>
5401 <key>patterns</key>
5402 <array>
5403 <dict>
5404 <key>include</key>
5405 <string>source.java</string>
5406 </dict>
5407 </array>
5408 </dict>
5409 </array>
5410 </dict>
5411 <dict>
5412 <key>begin</key>
5413 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:chuck|unrealscript|(?:.*\.)?(?:ck|jav|java|jsh|uc)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
5414 <key>beginCaptures</key>
5415 <dict>
5416 <key>1</key>
5417 <dict>
5418 <key>name</key>
5419 <string>string.other.begin.code.fenced.mdx</string>
5420 </dict>
5421 <key>2</key>
5422 <dict>
5423 <key>name</key>
5424 <string>entity.name.function.mdx</string>
5425 <key>patterns</key>
5426 <array>
5427 <dict>
5428 <key>include</key>
5429 <string>#markdown-string</string>
5430 </dict>
5431 </array>
5432 </dict>
5433 <key>3</key>
5434 <dict>
5435 <key>patterns</key>
5436 <array>
5437 <dict>
5438 <key>include</key>
5439 <string>#markdown-string</string>
5440 </dict>
5441 </array>
5442 </dict>
5443 </dict>
5444 <key>end</key>
5445 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5446 <key>endCaptures</key>
5447 <dict>
5448 <key>1</key>
5449 <dict>
5450 <key>name</key>
5451 <string>string.other.end.code.fenced.mdx</string>
5452 </dict>
5453 </dict>
5454 <key>name</key>
5455 <string>markup.code.java.mdx</string>
5456 <key>patterns</key>
5457 <array>
5458 <dict>
5459 <key>begin</key>
5460 <string>(^|\G)(\s*)(.*)</string>
5461 <key>while</key>
5462 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5463 <key>contentName</key>
5464 <string>meta.embedded.java</string>
5465 <key>patterns</key>
5466 <array>
5467 <dict>
5468 <key>include</key>
5469 <string>source.java</string>
5470 </dict>
5471 </array>
5472 </dict>
5473 </array>
5474 </dict>
5475 </array>
5476 </dict>
5477 <key>commonmark-code-fenced-js</key>
5478 <dict>
5479 <key>patterns</key>
5480 <array>
5481 <dict>
5482 <key>begin</key>
5483 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:cycript|javascript\+erb|json\x2dwith\x2dcomments|node|qt\x2dscript|(?:.*\.)?(?:_js|bones|cjs|code\x2dsnippets|code\x2dworkspace|cy|es6|jake|javascript|js|js\.erb|jsb|jscad|jsfl|jslib|jsm|json5|jsonc|jsonld|jspre|jss|jsx|mjs|njs|pac|sjs|ssjs|sublime\x2dbuild|sublime\x2dcolor\x2dscheme|sublime\x2dcommands|sublime\x2dcompletions|sublime\x2dkeymap|sublime\x2dmacro|sublime\x2dmenu|sublime\x2dmousemap|sublime\x2dproject|sublime\x2dsettings|sublime\x2dtheme|sublime\x2dworkspace|sublime_metrics|sublime_session|xsjs|xsjslib)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
5484 <key>beginCaptures</key>
5485 <dict>
5486 <key>1</key>
5487 <dict>
5488 <key>name</key>
5489 <string>string.other.begin.code.fenced.mdx</string>
5490 </dict>
5491 <key>2</key>
5492 <dict>
5493 <key>name</key>
5494 <string>entity.name.function.mdx</string>
5495 <key>patterns</key>
5496 <array>
5497 <dict>
5498 <key>include</key>
5499 <string>#markdown-string</string>
5500 </dict>
5501 </array>
5502 </dict>
5503 <key>3</key>
5504 <dict>
5505 <key>patterns</key>
5506 <array>
5507 <dict>
5508 <key>include</key>
5509 <string>#markdown-string</string>
5510 </dict>
5511 </array>
5512 </dict>
5513 </dict>
5514 <key>end</key>
5515 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5516 <key>endCaptures</key>
5517 <dict>
5518 <key>1</key>
5519 <dict>
5520 <key>name</key>
5521 <string>string.other.end.code.fenced.mdx</string>
5522 </dict>
5523 </dict>
5524 <key>name</key>
5525 <string>markup.code.js.mdx</string>
5526 <key>patterns</key>
5527 <array>
5528 <dict>
5529 <key>begin</key>
5530 <string>(^|\G)(\s*)(.*)</string>
5531 <key>while</key>
5532 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5533 <key>contentName</key>
5534 <string>meta.embedded.js</string>
5535 <key>patterns</key>
5536 <array>
5537 <dict>
5538 <key>include</key>
5539 <string>source.js</string>
5540 </dict>
5541 </array>
5542 </dict>
5543 </array>
5544 </dict>
5545 <dict>
5546 <key>begin</key>
5547 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:cycript|javascript\+erb|json\x2dwith\x2dcomments|node|qt\x2dscript|(?:.*\.)?(?:_js|bones|cjs|code\x2dsnippets|code\x2dworkspace|cy|es6|jake|javascript|js|js\.erb|jsb|jscad|jsfl|jslib|jsm|json5|jsonc|jsonld|jspre|jss|jsx|mjs|njs|pac|sjs|ssjs|sublime\x2dbuild|sublime\x2dcolor\x2dscheme|sublime\x2dcommands|sublime\x2dcompletions|sublime\x2dkeymap|sublime\x2dmacro|sublime\x2dmenu|sublime\x2dmousemap|sublime\x2dproject|sublime\x2dsettings|sublime\x2dtheme|sublime\x2dworkspace|sublime_metrics|sublime_session|xsjs|xsjslib)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
5548 <key>beginCaptures</key>
5549 <dict>
5550 <key>1</key>
5551 <dict>
5552 <key>name</key>
5553 <string>string.other.begin.code.fenced.mdx</string>
5554 </dict>
5555 <key>2</key>
5556 <dict>
5557 <key>name</key>
5558 <string>entity.name.function.mdx</string>
5559 <key>patterns</key>
5560 <array>
5561 <dict>
5562 <key>include</key>
5563 <string>#markdown-string</string>
5564 </dict>
5565 </array>
5566 </dict>
5567 <key>3</key>
5568 <dict>
5569 <key>patterns</key>
5570 <array>
5571 <dict>
5572 <key>include</key>
5573 <string>#markdown-string</string>
5574 </dict>
5575 </array>
5576 </dict>
5577 </dict>
5578 <key>end</key>
5579 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5580 <key>endCaptures</key>
5581 <dict>
5582 <key>1</key>
5583 <dict>
5584 <key>name</key>
5585 <string>string.other.end.code.fenced.mdx</string>
5586 </dict>
5587 </dict>
5588 <key>name</key>
5589 <string>markup.code.js.mdx</string>
5590 <key>patterns</key>
5591 <array>
5592 <dict>
5593 <key>begin</key>
5594 <string>(^|\G)(\s*)(.*)</string>
5595 <key>while</key>
5596 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5597 <key>contentName</key>
5598 <string>meta.embedded.js</string>
5599 <key>patterns</key>
5600 <array>
5601 <dict>
5602 <key>include</key>
5603 <string>source.js</string>
5604 </dict>
5605 </array>
5606 </dict>
5607 </array>
5608 </dict>
5609 </array>
5610 </dict>
5611 <key>commonmark-code-fenced-json</key>
5612 <dict>
5613 <key>patterns</key>
5614 <array>
5615 <dict>
5616 <key>begin</key>
5617 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:ecere\x2dprojects|ipython\x2dnotebook|jupyter\x2dnotebook|max|max/msp|maxmsp|oasv2\x2djson|oasv3\x2djson|(?:.*\.)?(?:4dform|4dproject|avsc|epj|geojson|gltf|har|ice|ipynb|json|json|json|json\x2dtmlanguage|jsonl|maxhelp|maxpat|maxproj|mcmeta|mxt|pat|sarif|tfstate|tfstate\.backup|topojson|webapp|webmanifest|yy|yyp)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
5618 <key>beginCaptures</key>
5619 <dict>
5620 <key>1</key>
5621 <dict>
5622 <key>name</key>
5623 <string>string.other.begin.code.fenced.mdx</string>
5624 </dict>
5625 <key>2</key>
5626 <dict>
5627 <key>name</key>
5628 <string>entity.name.function.mdx</string>
5629 <key>patterns</key>
5630 <array>
5631 <dict>
5632 <key>include</key>
5633 <string>#markdown-string</string>
5634 </dict>
5635 </array>
5636 </dict>
5637 <key>3</key>
5638 <dict>
5639 <key>patterns</key>
5640 <array>
5641 <dict>
5642 <key>include</key>
5643 <string>#markdown-string</string>
5644 </dict>
5645 </array>
5646 </dict>
5647 </dict>
5648 <key>end</key>
5649 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5650 <key>endCaptures</key>
5651 <dict>
5652 <key>1</key>
5653 <dict>
5654 <key>name</key>
5655 <string>string.other.end.code.fenced.mdx</string>
5656 </dict>
5657 </dict>
5658 <key>name</key>
5659 <string>markup.code.json.mdx</string>
5660 <key>patterns</key>
5661 <array>
5662 <dict>
5663 <key>begin</key>
5664 <string>(^|\G)(\s*)(.*)</string>
5665 <key>while</key>
5666 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5667 <key>contentName</key>
5668 <string>meta.embedded.json</string>
5669 <key>patterns</key>
5670 <array>
5671 <dict>
5672 <key>include</key>
5673 <string>source.json</string>
5674 </dict>
5675 </array>
5676 </dict>
5677 </array>
5678 </dict>
5679 <dict>
5680 <key>begin</key>
5681 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:ecere\x2dprojects|ipython\x2dnotebook|jupyter\x2dnotebook|max|max/msp|maxmsp|oasv2\x2djson|oasv3\x2djson|(?:.*\.)?(?:4dform|4dproject|avsc|epj|geojson|gltf|har|ice|ipynb|json|json|json|json\x2dtmlanguage|jsonl|maxhelp|maxpat|maxproj|mcmeta|mxt|pat|sarif|tfstate|tfstate\.backup|topojson|webapp|webmanifest|yy|yyp)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
5682 <key>beginCaptures</key>
5683 <dict>
5684 <key>1</key>
5685 <dict>
5686 <key>name</key>
5687 <string>string.other.begin.code.fenced.mdx</string>
5688 </dict>
5689 <key>2</key>
5690 <dict>
5691 <key>name</key>
5692 <string>entity.name.function.mdx</string>
5693 <key>patterns</key>
5694 <array>
5695 <dict>
5696 <key>include</key>
5697 <string>#markdown-string</string>
5698 </dict>
5699 </array>
5700 </dict>
5701 <key>3</key>
5702 <dict>
5703 <key>patterns</key>
5704 <array>
5705 <dict>
5706 <key>include</key>
5707 <string>#markdown-string</string>
5708 </dict>
5709 </array>
5710 </dict>
5711 </dict>
5712 <key>end</key>
5713 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5714 <key>endCaptures</key>
5715 <dict>
5716 <key>1</key>
5717 <dict>
5718 <key>name</key>
5719 <string>string.other.end.code.fenced.mdx</string>
5720 </dict>
5721 </dict>
5722 <key>name</key>
5723 <string>markup.code.json.mdx</string>
5724 <key>patterns</key>
5725 <array>
5726 <dict>
5727 <key>begin</key>
5728 <string>(^|\G)(\s*)(.*)</string>
5729 <key>while</key>
5730 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5731 <key>contentName</key>
5732 <string>meta.embedded.json</string>
5733 <key>patterns</key>
5734 <array>
5735 <dict>
5736 <key>include</key>
5737 <string>source.json</string>
5738 </dict>
5739 </array>
5740 </dict>
5741 </array>
5742 </dict>
5743 </array>
5744 </dict>
5745 <key>commonmark-code-fenced-julia</key>
5746 <dict>
5747 <key>patterns</key>
5748 <array>
5749 <dict>
5750 <key>begin</key>
5751 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:julia|(?:.*\.)?jl))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
5752 <key>beginCaptures</key>
5753 <dict>
5754 <key>1</key>
5755 <dict>
5756 <key>name</key>
5757 <string>string.other.begin.code.fenced.mdx</string>
5758 </dict>
5759 <key>2</key>
5760 <dict>
5761 <key>name</key>
5762 <string>entity.name.function.mdx</string>
5763 <key>patterns</key>
5764 <array>
5765 <dict>
5766 <key>include</key>
5767 <string>#markdown-string</string>
5768 </dict>
5769 </array>
5770 </dict>
5771 <key>3</key>
5772 <dict>
5773 <key>patterns</key>
5774 <array>
5775 <dict>
5776 <key>include</key>
5777 <string>#markdown-string</string>
5778 </dict>
5779 </array>
5780 </dict>
5781 </dict>
5782 <key>end</key>
5783 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5784 <key>endCaptures</key>
5785 <dict>
5786 <key>1</key>
5787 <dict>
5788 <key>name</key>
5789 <string>string.other.end.code.fenced.mdx</string>
5790 </dict>
5791 </dict>
5792 <key>name</key>
5793 <string>markup.code.julia.mdx</string>
5794 <key>patterns</key>
5795 <array>
5796 <dict>
5797 <key>begin</key>
5798 <string>(^|\G)(\s*)(.*)</string>
5799 <key>while</key>
5800 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5801 <key>contentName</key>
5802 <string>meta.embedded.julia</string>
5803 <key>patterns</key>
5804 <array>
5805 <dict>
5806 <key>include</key>
5807 <string>source.julia</string>
5808 </dict>
5809 </array>
5810 </dict>
5811 </array>
5812 </dict>
5813 <dict>
5814 <key>begin</key>
5815 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:julia|(?:.*\.)?jl))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
5816 <key>beginCaptures</key>
5817 <dict>
5818 <key>1</key>
5819 <dict>
5820 <key>name</key>
5821 <string>string.other.begin.code.fenced.mdx</string>
5822 </dict>
5823 <key>2</key>
5824 <dict>
5825 <key>name</key>
5826 <string>entity.name.function.mdx</string>
5827 <key>patterns</key>
5828 <array>
5829 <dict>
5830 <key>include</key>
5831 <string>#markdown-string</string>
5832 </dict>
5833 </array>
5834 </dict>
5835 <key>3</key>
5836 <dict>
5837 <key>patterns</key>
5838 <array>
5839 <dict>
5840 <key>include</key>
5841 <string>#markdown-string</string>
5842 </dict>
5843 </array>
5844 </dict>
5845 </dict>
5846 <key>end</key>
5847 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5848 <key>endCaptures</key>
5849 <dict>
5850 <key>1</key>
5851 <dict>
5852 <key>name</key>
5853 <string>string.other.end.code.fenced.mdx</string>
5854 </dict>
5855 </dict>
5856 <key>name</key>
5857 <string>markup.code.julia.mdx</string>
5858 <key>patterns</key>
5859 <array>
5860 <dict>
5861 <key>begin</key>
5862 <string>(^|\G)(\s*)(.*)</string>
5863 <key>while</key>
5864 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5865 <key>contentName</key>
5866 <string>meta.embedded.julia</string>
5867 <key>patterns</key>
5868 <array>
5869 <dict>
5870 <key>include</key>
5871 <string>source.julia</string>
5872 </dict>
5873 </array>
5874 </dict>
5875 </array>
5876 </dict>
5877 </array>
5878 </dict>
5879 <key>commonmark-code-fenced-kotlin</key>
5880 <dict>
5881 <key>patterns</key>
5882 <array>
5883 <dict>
5884 <key>begin</key>
5885 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:gradle\x2dkotlin\x2ddsl|kotlin|(?:.*\.)?(?:gradle\.kts|kt|ktm|kts)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
5886 <key>beginCaptures</key>
5887 <dict>
5888 <key>1</key>
5889 <dict>
5890 <key>name</key>
5891 <string>string.other.begin.code.fenced.mdx</string>
5892 </dict>
5893 <key>2</key>
5894 <dict>
5895 <key>name</key>
5896 <string>entity.name.function.mdx</string>
5897 <key>patterns</key>
5898 <array>
5899 <dict>
5900 <key>include</key>
5901 <string>#markdown-string</string>
5902 </dict>
5903 </array>
5904 </dict>
5905 <key>3</key>
5906 <dict>
5907 <key>patterns</key>
5908 <array>
5909 <dict>
5910 <key>include</key>
5911 <string>#markdown-string</string>
5912 </dict>
5913 </array>
5914 </dict>
5915 </dict>
5916 <key>end</key>
5917 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5918 <key>endCaptures</key>
5919 <dict>
5920 <key>1</key>
5921 <dict>
5922 <key>name</key>
5923 <string>string.other.end.code.fenced.mdx</string>
5924 </dict>
5925 </dict>
5926 <key>name</key>
5927 <string>markup.code.kotlin.mdx</string>
5928 <key>patterns</key>
5929 <array>
5930 <dict>
5931 <key>begin</key>
5932 <string>(^|\G)(\s*)(.*)</string>
5933 <key>while</key>
5934 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5935 <key>contentName</key>
5936 <string>meta.embedded.kotlin</string>
5937 <key>patterns</key>
5938 <array>
5939 <dict>
5940 <key>include</key>
5941 <string>source.kotlin</string>
5942 </dict>
5943 </array>
5944 </dict>
5945 </array>
5946 </dict>
5947 <dict>
5948 <key>begin</key>
5949 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:gradle\x2dkotlin\x2ddsl|kotlin|(?:.*\.)?(?:gradle\.kts|kt|ktm|kts)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
5950 <key>beginCaptures</key>
5951 <dict>
5952 <key>1</key>
5953 <dict>
5954 <key>name</key>
5955 <string>string.other.begin.code.fenced.mdx</string>
5956 </dict>
5957 <key>2</key>
5958 <dict>
5959 <key>name</key>
5960 <string>entity.name.function.mdx</string>
5961 <key>patterns</key>
5962 <array>
5963 <dict>
5964 <key>include</key>
5965 <string>#markdown-string</string>
5966 </dict>
5967 </array>
5968 </dict>
5969 <key>3</key>
5970 <dict>
5971 <key>patterns</key>
5972 <array>
5973 <dict>
5974 <key>include</key>
5975 <string>#markdown-string</string>
5976 </dict>
5977 </array>
5978 </dict>
5979 </dict>
5980 <key>end</key>
5981 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
5982 <key>endCaptures</key>
5983 <dict>
5984 <key>1</key>
5985 <dict>
5986 <key>name</key>
5987 <string>string.other.end.code.fenced.mdx</string>
5988 </dict>
5989 </dict>
5990 <key>name</key>
5991 <string>markup.code.kotlin.mdx</string>
5992 <key>patterns</key>
5993 <array>
5994 <dict>
5995 <key>begin</key>
5996 <string>(^|\G)(\s*)(.*)</string>
5997 <key>while</key>
5998 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
5999 <key>contentName</key>
6000 <string>meta.embedded.kotlin</string>
6001 <key>patterns</key>
6002 <array>
6003 <dict>
6004 <key>include</key>
6005 <string>source.kotlin</string>
6006 </dict>
6007 </array>
6008 </dict>
6009 </array>
6010 </dict>
6011 </array>
6012 </dict>
6013 <key>commonmark-code-fenced-less</key>
6014 <dict>
6015 <key>patterns</key>
6016 <array>
6017 <dict>
6018 <key>begin</key>
6019 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:less\x2dcss|(?:.*\.)?less))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
6020 <key>beginCaptures</key>
6021 <dict>
6022 <key>1</key>
6023 <dict>
6024 <key>name</key>
6025 <string>string.other.begin.code.fenced.mdx</string>
6026 </dict>
6027 <key>2</key>
6028 <dict>
6029 <key>name</key>
6030 <string>entity.name.function.mdx</string>
6031 <key>patterns</key>
6032 <array>
6033 <dict>
6034 <key>include</key>
6035 <string>#markdown-string</string>
6036 </dict>
6037 </array>
6038 </dict>
6039 <key>3</key>
6040 <dict>
6041 <key>patterns</key>
6042 <array>
6043 <dict>
6044 <key>include</key>
6045 <string>#markdown-string</string>
6046 </dict>
6047 </array>
6048 </dict>
6049 </dict>
6050 <key>end</key>
6051 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
6052 <key>endCaptures</key>
6053 <dict>
6054 <key>1</key>
6055 <dict>
6056 <key>name</key>
6057 <string>string.other.end.code.fenced.mdx</string>
6058 </dict>
6059 </dict>
6060 <key>name</key>
6061 <string>markup.code.less.mdx</string>
6062 <key>patterns</key>
6063 <array>
6064 <dict>
6065 <key>begin</key>
6066 <string>(^|\G)(\s*)(.*)</string>
6067 <key>while</key>
6068 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
6069 <key>contentName</key>
6070 <string>meta.embedded.less</string>
6071 <key>patterns</key>
6072 <array>
6073 <dict>
6074 <key>include</key>
6075 <string>source.css.less</string>
6076 </dict>
6077 </array>
6078 </dict>
6079 </array>
6080 </dict>
6081 <dict>
6082 <key>begin</key>
6083 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:less\x2dcss|(?:.*\.)?less))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
6084 <key>beginCaptures</key>
6085 <dict>
6086 <key>1</key>
6087 <dict>
6088 <key>name</key>
6089 <string>string.other.begin.code.fenced.mdx</string>
6090 </dict>
6091 <key>2</key>
6092 <dict>
6093 <key>name</key>
6094 <string>entity.name.function.mdx</string>
6095 <key>patterns</key>
6096 <array>
6097 <dict>
6098 <key>include</key>
6099 <string>#markdown-string</string>
6100 </dict>
6101 </array>
6102 </dict>
6103 <key>3</key>
6104 <dict>
6105 <key>patterns</key>
6106 <array>
6107 <dict>
6108 <key>include</key>
6109 <string>#markdown-string</string>
6110 </dict>
6111 </array>
6112 </dict>
6113 </dict>
6114 <key>end</key>
6115 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
6116 <key>endCaptures</key>
6117 <dict>
6118 <key>1</key>
6119 <dict>
6120 <key>name</key>
6121 <string>string.other.end.code.fenced.mdx</string>
6122 </dict>
6123 </dict>
6124 <key>name</key>
6125 <string>markup.code.less.mdx</string>
6126 <key>patterns</key>
6127 <array>
6128 <dict>
6129 <key>begin</key>
6130 <string>(^|\G)(\s*)(.*)</string>
6131 <key>while</key>
6132 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
6133 <key>contentName</key>
6134 <string>meta.embedded.less</string>
6135 <key>patterns</key>
6136 <array>
6137 <dict>
6138 <key>include</key>
6139 <string>source.css.less</string>
6140 </dict>
6141 </array>
6142 </dict>
6143 </array>
6144 </dict>
6145 </array>
6146 </dict>
6147 <key>commonmark-code-fenced-lua</key>
6148 <dict>
6149 <key>patterns</key>
6150 <array>
6151 <dict>
6152 <key>begin</key>
6153 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:(?:.*\.)?(?:fcgi|lua|nse|p8|pd_lua|rbxs|rockspec|wlua)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
6154 <key>beginCaptures</key>
6155 <dict>
6156 <key>1</key>
6157 <dict>
6158 <key>name</key>
6159 <string>string.other.begin.code.fenced.mdx</string>
6160 </dict>
6161 <key>2</key>
6162 <dict>
6163 <key>name</key>
6164 <string>entity.name.function.mdx</string>
6165 <key>patterns</key>
6166 <array>
6167 <dict>
6168 <key>include</key>
6169 <string>#markdown-string</string>
6170 </dict>
6171 </array>
6172 </dict>
6173 <key>3</key>
6174 <dict>
6175 <key>patterns</key>
6176 <array>
6177 <dict>
6178 <key>include</key>
6179 <string>#markdown-string</string>
6180 </dict>
6181 </array>
6182 </dict>
6183 </dict>
6184 <key>end</key>
6185 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
6186 <key>endCaptures</key>
6187 <dict>
6188 <key>1</key>
6189 <dict>
6190 <key>name</key>
6191 <string>string.other.end.code.fenced.mdx</string>
6192 </dict>
6193 </dict>
6194 <key>name</key>
6195 <string>markup.code.lua.mdx</string>
6196 <key>patterns</key>
6197 <array>
6198 <dict>
6199 <key>begin</key>
6200 <string>(^|\G)(\s*)(.*)</string>
6201 <key>while</key>
6202 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
6203 <key>contentName</key>
6204 <string>meta.embedded.lua</string>
6205 <key>patterns</key>
6206 <array>
6207 <dict>
6208 <key>include</key>
6209 <string>source.lua</string>
6210 </dict>
6211 </array>
6212 </dict>
6213 </array>
6214 </dict>
6215 <dict>
6216 <key>begin</key>
6217 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:(?:.*\.)?(?:fcgi|lua|nse|p8|pd_lua|rbxs|rockspec|wlua)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
6218 <key>beginCaptures</key>
6219 <dict>
6220 <key>1</key>
6221 <dict>
6222 <key>name</key>
6223 <string>string.other.begin.code.fenced.mdx</string>
6224 </dict>
6225 <key>2</key>
6226 <dict>
6227 <key>name</key>
6228 <string>entity.name.function.mdx</string>
6229 <key>patterns</key>
6230 <array>
6231 <dict>
6232 <key>include</key>
6233 <string>#markdown-string</string>
6234 </dict>
6235 </array>
6236 </dict>
6237 <key>3</key>
6238 <dict>
6239 <key>patterns</key>
6240 <array>
6241 <dict>
6242 <key>include</key>
6243 <string>#markdown-string</string>
6244 </dict>
6245 </array>
6246 </dict>
6247 </dict>
6248 <key>end</key>
6249 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
6250 <key>endCaptures</key>
6251 <dict>
6252 <key>1</key>
6253 <dict>
6254 <key>name</key>
6255 <string>string.other.end.code.fenced.mdx</string>
6256 </dict>
6257 </dict>
6258 <key>name</key>
6259 <string>markup.code.lua.mdx</string>
6260 <key>patterns</key>
6261 <array>
6262 <dict>
6263 <key>begin</key>
6264 <string>(^|\G)(\s*)(.*)</string>
6265 <key>while</key>
6266 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
6267 <key>contentName</key>
6268 <string>meta.embedded.lua</string>
6269 <key>patterns</key>
6270 <array>
6271 <dict>
6272 <key>include</key>
6273 <string>source.lua</string>
6274 </dict>
6275 </array>
6276 </dict>
6277 </array>
6278 </dict>
6279 </array>
6280 </dict>
6281 <key>commonmark-code-fenced-makefile</key>
6282 <dict>
6283 <key>patterns</key>
6284 <array>
6285 <dict>
6286 <key>begin</key>
6287 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:bsdmake|mf|(?:.*\.)?(?:mak|make|makefile|mk|mkfile)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
6288 <key>beginCaptures</key>
6289 <dict>
6290 <key>1</key>
6291 <dict>
6292 <key>name</key>
6293 <string>string.other.begin.code.fenced.mdx</string>
6294 </dict>
6295 <key>2</key>
6296 <dict>
6297 <key>name</key>
6298 <string>entity.name.function.mdx</string>
6299 <key>patterns</key>
6300 <array>
6301 <dict>
6302 <key>include</key>
6303 <string>#markdown-string</string>
6304 </dict>
6305 </array>
6306 </dict>
6307 <key>3</key>
6308 <dict>
6309 <key>patterns</key>
6310 <array>
6311 <dict>
6312 <key>include</key>
6313 <string>#markdown-string</string>
6314 </dict>
6315 </array>
6316 </dict>
6317 </dict>
6318 <key>end</key>
6319 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
6320 <key>endCaptures</key>
6321 <dict>
6322 <key>1</key>
6323 <dict>
6324 <key>name</key>
6325 <string>string.other.end.code.fenced.mdx</string>
6326 </dict>
6327 </dict>
6328 <key>name</key>
6329 <string>markup.code.makefile.mdx</string>
6330 <key>patterns</key>
6331 <array>
6332 <dict>
6333 <key>begin</key>
6334 <string>(^|\G)(\s*)(.*)</string>
6335 <key>while</key>
6336 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
6337 <key>contentName</key>
6338 <string>meta.embedded.makefile</string>
6339 <key>patterns</key>
6340 <array>
6341 <dict>
6342 <key>include</key>
6343 <string>source.makefile</string>
6344 </dict>
6345 </array>
6346 </dict>
6347 </array>
6348 </dict>
6349 <dict>
6350 <key>begin</key>
6351 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:bsdmake|mf|(?:.*\.)?(?:mak|make|makefile|mk|mkfile)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
6352 <key>beginCaptures</key>
6353 <dict>
6354 <key>1</key>
6355 <dict>
6356 <key>name</key>
6357 <string>string.other.begin.code.fenced.mdx</string>
6358 </dict>
6359 <key>2</key>
6360 <dict>
6361 <key>name</key>
6362 <string>entity.name.function.mdx</string>
6363 <key>patterns</key>
6364 <array>
6365 <dict>
6366 <key>include</key>
6367 <string>#markdown-string</string>
6368 </dict>
6369 </array>
6370 </dict>
6371 <key>3</key>
6372 <dict>
6373 <key>patterns</key>
6374 <array>
6375 <dict>
6376 <key>include</key>
6377 <string>#markdown-string</string>
6378 </dict>
6379 </array>
6380 </dict>
6381 </dict>
6382 <key>end</key>
6383 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
6384 <key>endCaptures</key>
6385 <dict>
6386 <key>1</key>
6387 <dict>
6388 <key>name</key>
6389 <string>string.other.end.code.fenced.mdx</string>
6390 </dict>
6391 </dict>
6392 <key>name</key>
6393 <string>markup.code.makefile.mdx</string>
6394 <key>patterns</key>
6395 <array>
6396 <dict>
6397 <key>begin</key>
6398 <string>(^|\G)(\s*)(.*)</string>
6399 <key>while</key>
6400 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
6401 <key>contentName</key>
6402 <string>meta.embedded.makefile</string>
6403 <key>patterns</key>
6404 <array>
6405 <dict>
6406 <key>include</key>
6407 <string>source.makefile</string>
6408 </dict>
6409 </array>
6410 </dict>
6411 </array>
6412 </dict>
6413 </array>
6414 </dict>
6415 <key>commonmark-code-fenced-md</key>
6416 <dict>
6417 <key>patterns</key>
6418 <array>
6419 <dict>
6420 <key>begin</key>
6421 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:md|pandoc|rmarkdown|(?:.*\.)?(?:livemd|markdown|mdown|mdwn|mkd|mkdn|mkdown|qmd|rmd|ronn|scd|workbook)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
6422 <key>beginCaptures</key>
6423 <dict>
6424 <key>1</key>
6425 <dict>
6426 <key>name</key>
6427 <string>string.other.begin.code.fenced.mdx</string>
6428 </dict>
6429 <key>2</key>
6430 <dict>
6431 <key>name</key>
6432 <string>entity.name.function.mdx</string>
6433 <key>patterns</key>
6434 <array>
6435 <dict>
6436 <key>include</key>
6437 <string>#markdown-string</string>
6438 </dict>
6439 </array>
6440 </dict>
6441 <key>3</key>
6442 <dict>
6443 <key>patterns</key>
6444 <array>
6445 <dict>
6446 <key>include</key>
6447 <string>#markdown-string</string>
6448 </dict>
6449 </array>
6450 </dict>
6451 </dict>
6452 <key>end</key>
6453 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
6454 <key>endCaptures</key>
6455 <dict>
6456 <key>1</key>
6457 <dict>
6458 <key>name</key>
6459 <string>string.other.end.code.fenced.mdx</string>
6460 </dict>
6461 </dict>
6462 <key>name</key>
6463 <string>markup.code.md.mdx</string>
6464 <key>patterns</key>
6465 <array>
6466 <dict>
6467 <key>begin</key>
6468 <string>(^|\G)(\s*)(.*)</string>
6469 <key>while</key>
6470 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
6471 <key>contentName</key>
6472 <string>meta.embedded.md</string>
6473 <key>patterns</key>
6474 <array>
6475 <dict>
6476 <key>include</key>
6477 <string>text.md</string>
6478 </dict>
6479 <dict>
6480 <key>include</key>
6481 <string>source.gfm</string>
6482 </dict>
6483 <dict>
6484 <key>include</key>
6485 <string>text.html.markdown</string>
6486 </dict>
6487 </array>
6488 </dict>
6489 </array>
6490 </dict>
6491 <dict>
6492 <key>begin</key>
6493 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:md|pandoc|rmarkdown|(?:.*\.)?(?:livemd|markdown|mdown|mdwn|mkd|mkdn|mkdown|qmd|rmd|ronn|scd|workbook)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
6494 <key>beginCaptures</key>
6495 <dict>
6496 <key>1</key>
6497 <dict>
6498 <key>name</key>
6499 <string>string.other.begin.code.fenced.mdx</string>
6500 </dict>
6501 <key>2</key>
6502 <dict>
6503 <key>name</key>
6504 <string>entity.name.function.mdx</string>
6505 <key>patterns</key>
6506 <array>
6507 <dict>
6508 <key>include</key>
6509 <string>#markdown-string</string>
6510 </dict>
6511 </array>
6512 </dict>
6513 <key>3</key>
6514 <dict>
6515 <key>patterns</key>
6516 <array>
6517 <dict>
6518 <key>include</key>
6519 <string>#markdown-string</string>
6520 </dict>
6521 </array>
6522 </dict>
6523 </dict>
6524 <key>end</key>
6525 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
6526 <key>endCaptures</key>
6527 <dict>
6528 <key>1</key>
6529 <dict>
6530 <key>name</key>
6531 <string>string.other.end.code.fenced.mdx</string>
6532 </dict>
6533 </dict>
6534 <key>name</key>
6535 <string>markup.code.md.mdx</string>
6536 <key>patterns</key>
6537 <array>
6538 <dict>
6539 <key>begin</key>
6540 <string>(^|\G)(\s*)(.*)</string>
6541 <key>while</key>
6542 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
6543 <key>contentName</key>
6544 <string>meta.embedded.md</string>
6545 <key>patterns</key>
6546 <array>
6547 <dict>
6548 <key>include</key>
6549 <string>text.md</string>
6550 </dict>
6551 <dict>
6552 <key>include</key>
6553 <string>source.gfm</string>
6554 </dict>
6555 <dict>
6556 <key>include</key>
6557 <string>text.html.markdown</string>
6558 </dict>
6559 </array>
6560 </dict>
6561 </array>
6562 </dict>
6563 </array>
6564 </dict>
6565 <key>commonmark-code-fenced-mdx</key>
6566 <dict>
6567 <key>patterns</key>
6568 <array>
6569 <dict>
6570 <key>begin</key>
6571 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:(?:.*\.)?mdx))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
6572 <key>beginCaptures</key>
6573 <dict>
6574 <key>1</key>
6575 <dict>
6576 <key>name</key>
6577 <string>string.other.begin.code.fenced.mdx</string>
6578 </dict>
6579 <key>2</key>
6580 <dict>
6581 <key>name</key>
6582 <string>entity.name.function.mdx</string>
6583 <key>patterns</key>
6584 <array>
6585 <dict>
6586 <key>include</key>
6587 <string>#markdown-string</string>
6588 </dict>
6589 </array>
6590 </dict>
6591 <key>3</key>
6592 <dict>
6593 <key>patterns</key>
6594 <array>
6595 <dict>
6596 <key>include</key>
6597 <string>#markdown-string</string>
6598 </dict>
6599 </array>
6600 </dict>
6601 </dict>
6602 <key>end</key>
6603 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
6604 <key>endCaptures</key>
6605 <dict>
6606 <key>1</key>
6607 <dict>
6608 <key>name</key>
6609 <string>string.other.end.code.fenced.mdx</string>
6610 </dict>
6611 </dict>
6612 <key>name</key>
6613 <string>markup.code.mdx.mdx</string>
6614 <key>patterns</key>
6615 <array>
6616 <dict>
6617 <key>begin</key>
6618 <string>(^|\G)(\s*)(.*)</string>
6619 <key>while</key>
6620 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
6621 <key>contentName</key>
6622 <string>meta.embedded.mdx</string>
6623 <key>patterns</key>
6624 <array>
6625 <dict>
6626 <key>include</key>
6627 <string>source.mdx</string>
6628 </dict>
6629 </array>
6630 </dict>
6631 </array>
6632 </dict>
6633 <dict>
6634 <key>begin</key>
6635 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:(?:.*\.)?mdx))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
6636 <key>beginCaptures</key>
6637 <dict>
6638 <key>1</key>
6639 <dict>
6640 <key>name</key>
6641 <string>string.other.begin.code.fenced.mdx</string>
6642 </dict>
6643 <key>2</key>
6644 <dict>
6645 <key>name</key>
6646 <string>entity.name.function.mdx</string>
6647 <key>patterns</key>
6648 <array>
6649 <dict>
6650 <key>include</key>
6651 <string>#markdown-string</string>
6652 </dict>
6653 </array>
6654 </dict>
6655 <key>3</key>
6656 <dict>
6657 <key>patterns</key>
6658 <array>
6659 <dict>
6660 <key>include</key>
6661 <string>#markdown-string</string>
6662 </dict>
6663 </array>
6664 </dict>
6665 </dict>
6666 <key>end</key>
6667 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
6668 <key>endCaptures</key>
6669 <dict>
6670 <key>1</key>
6671 <dict>
6672 <key>name</key>
6673 <string>string.other.end.code.fenced.mdx</string>
6674 </dict>
6675 </dict>
6676 <key>name</key>
6677 <string>markup.code.mdx.mdx</string>
6678 <key>patterns</key>
6679 <array>
6680 <dict>
6681 <key>begin</key>
6682 <string>(^|\G)(\s*)(.*)</string>
6683 <key>while</key>
6684 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
6685 <key>contentName</key>
6686 <string>meta.embedded.mdx</string>
6687 <key>patterns</key>
6688 <array>
6689 <dict>
6690 <key>include</key>
6691 <string>source.mdx</string>
6692 </dict>
6693 </array>
6694 </dict>
6695 </array>
6696 </dict>
6697 </array>
6698 </dict>
6699 <key>commonmark-code-fenced-objc</key>
6700 <dict>
6701 <key>patterns</key>
6702 <array>
6703 <dict>
6704 <key>begin</key>
6705 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:obj\x2dc|objc|objective\x2dc|objectivec))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
6706 <key>beginCaptures</key>
6707 <dict>
6708 <key>1</key>
6709 <dict>
6710 <key>name</key>
6711 <string>string.other.begin.code.fenced.mdx</string>
6712 </dict>
6713 <key>2</key>
6714 <dict>
6715 <key>name</key>
6716 <string>entity.name.function.mdx</string>
6717 <key>patterns</key>
6718 <array>
6719 <dict>
6720 <key>include</key>
6721 <string>#markdown-string</string>
6722 </dict>
6723 </array>
6724 </dict>
6725 <key>3</key>
6726 <dict>
6727 <key>patterns</key>
6728 <array>
6729 <dict>
6730 <key>include</key>
6731 <string>#markdown-string</string>
6732 </dict>
6733 </array>
6734 </dict>
6735 </dict>
6736 <key>end</key>
6737 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
6738 <key>endCaptures</key>
6739 <dict>
6740 <key>1</key>
6741 <dict>
6742 <key>name</key>
6743 <string>string.other.end.code.fenced.mdx</string>
6744 </dict>
6745 </dict>
6746 <key>name</key>
6747 <string>markup.code.objc.mdx</string>
6748 <key>patterns</key>
6749 <array>
6750 <dict>
6751 <key>begin</key>
6752 <string>(^|\G)(\s*)(.*)</string>
6753 <key>while</key>
6754 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
6755 <key>contentName</key>
6756 <string>meta.embedded.objc</string>
6757 <key>patterns</key>
6758 <array>
6759 <dict>
6760 <key>include</key>
6761 <string>source.objc</string>
6762 </dict>
6763 </array>
6764 </dict>
6765 </array>
6766 </dict>
6767 <dict>
6768 <key>begin</key>
6769 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:obj\x2dc|objc|objective\x2dc|objectivec))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
6770 <key>beginCaptures</key>
6771 <dict>
6772 <key>1</key>
6773 <dict>
6774 <key>name</key>
6775 <string>string.other.begin.code.fenced.mdx</string>
6776 </dict>
6777 <key>2</key>
6778 <dict>
6779 <key>name</key>
6780 <string>entity.name.function.mdx</string>
6781 <key>patterns</key>
6782 <array>
6783 <dict>
6784 <key>include</key>
6785 <string>#markdown-string</string>
6786 </dict>
6787 </array>
6788 </dict>
6789 <key>3</key>
6790 <dict>
6791 <key>patterns</key>
6792 <array>
6793 <dict>
6794 <key>include</key>
6795 <string>#markdown-string</string>
6796 </dict>
6797 </array>
6798 </dict>
6799 </dict>
6800 <key>end</key>
6801 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
6802 <key>endCaptures</key>
6803 <dict>
6804 <key>1</key>
6805 <dict>
6806 <key>name</key>
6807 <string>string.other.end.code.fenced.mdx</string>
6808 </dict>
6809 </dict>
6810 <key>name</key>
6811 <string>markup.code.objc.mdx</string>
6812 <key>patterns</key>
6813 <array>
6814 <dict>
6815 <key>begin</key>
6816 <string>(^|\G)(\s*)(.*)</string>
6817 <key>while</key>
6818 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
6819 <key>contentName</key>
6820 <string>meta.embedded.objc</string>
6821 <key>patterns</key>
6822 <array>
6823 <dict>
6824 <key>include</key>
6825 <string>source.objc</string>
6826 </dict>
6827 </array>
6828 </dict>
6829 </array>
6830 </dict>
6831 </array>
6832 </dict>
6833 <key>commonmark-code-fenced-perl</key>
6834 <dict>
6835 <key>patterns</key>
6836 <array>
6837 <dict>
6838 <key>begin</key>
6839 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:cperl|(?:.*\.)?(?:cgi|perl|ph|pl|plx|pm|psgi|t)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
6840 <key>beginCaptures</key>
6841 <dict>
6842 <key>1</key>
6843 <dict>
6844 <key>name</key>
6845 <string>string.other.begin.code.fenced.mdx</string>
6846 </dict>
6847 <key>2</key>
6848 <dict>
6849 <key>name</key>
6850 <string>entity.name.function.mdx</string>
6851 <key>patterns</key>
6852 <array>
6853 <dict>
6854 <key>include</key>
6855 <string>#markdown-string</string>
6856 </dict>
6857 </array>
6858 </dict>
6859 <key>3</key>
6860 <dict>
6861 <key>patterns</key>
6862 <array>
6863 <dict>
6864 <key>include</key>
6865 <string>#markdown-string</string>
6866 </dict>
6867 </array>
6868 </dict>
6869 </dict>
6870 <key>end</key>
6871 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
6872 <key>endCaptures</key>
6873 <dict>
6874 <key>1</key>
6875 <dict>
6876 <key>name</key>
6877 <string>string.other.end.code.fenced.mdx</string>
6878 </dict>
6879 </dict>
6880 <key>name</key>
6881 <string>markup.code.perl.mdx</string>
6882 <key>patterns</key>
6883 <array>
6884 <dict>
6885 <key>begin</key>
6886 <string>(^|\G)(\s*)(.*)</string>
6887 <key>while</key>
6888 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
6889 <key>contentName</key>
6890 <string>meta.embedded.perl</string>
6891 <key>patterns</key>
6892 <array>
6893 <dict>
6894 <key>include</key>
6895 <string>source.perl</string>
6896 </dict>
6897 </array>
6898 </dict>
6899 </array>
6900 </dict>
6901 <dict>
6902 <key>begin</key>
6903 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:cperl|(?:.*\.)?(?:cgi|perl|ph|pl|plx|pm|psgi|t)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
6904 <key>beginCaptures</key>
6905 <dict>
6906 <key>1</key>
6907 <dict>
6908 <key>name</key>
6909 <string>string.other.begin.code.fenced.mdx</string>
6910 </dict>
6911 <key>2</key>
6912 <dict>
6913 <key>name</key>
6914 <string>entity.name.function.mdx</string>
6915 <key>patterns</key>
6916 <array>
6917 <dict>
6918 <key>include</key>
6919 <string>#markdown-string</string>
6920 </dict>
6921 </array>
6922 </dict>
6923 <key>3</key>
6924 <dict>
6925 <key>patterns</key>
6926 <array>
6927 <dict>
6928 <key>include</key>
6929 <string>#markdown-string</string>
6930 </dict>
6931 </array>
6932 </dict>
6933 </dict>
6934 <key>end</key>
6935 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
6936 <key>endCaptures</key>
6937 <dict>
6938 <key>1</key>
6939 <dict>
6940 <key>name</key>
6941 <string>string.other.end.code.fenced.mdx</string>
6942 </dict>
6943 </dict>
6944 <key>name</key>
6945 <string>markup.code.perl.mdx</string>
6946 <key>patterns</key>
6947 <array>
6948 <dict>
6949 <key>begin</key>
6950 <string>(^|\G)(\s*)(.*)</string>
6951 <key>while</key>
6952 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
6953 <key>contentName</key>
6954 <string>meta.embedded.perl</string>
6955 <key>patterns</key>
6956 <array>
6957 <dict>
6958 <key>include</key>
6959 <string>source.perl</string>
6960 </dict>
6961 </array>
6962 </dict>
6963 </array>
6964 </dict>
6965 </array>
6966 </dict>
6967 <key>commonmark-code-fenced-php</key>
6968 <dict>
6969 <key>patterns</key>
6970 <array>
6971 <dict>
6972 <key>begin</key>
6973 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:html\+php|inc|php|(?:.*\.)?(?:aw|ctp|php3|php4|php5|phps|phpt|phtml)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
6974 <key>beginCaptures</key>
6975 <dict>
6976 <key>1</key>
6977 <dict>
6978 <key>name</key>
6979 <string>string.other.begin.code.fenced.mdx</string>
6980 </dict>
6981 <key>2</key>
6982 <dict>
6983 <key>name</key>
6984 <string>entity.name.function.mdx</string>
6985 <key>patterns</key>
6986 <array>
6987 <dict>
6988 <key>include</key>
6989 <string>#markdown-string</string>
6990 </dict>
6991 </array>
6992 </dict>
6993 <key>3</key>
6994 <dict>
6995 <key>patterns</key>
6996 <array>
6997 <dict>
6998 <key>include</key>
6999 <string>#markdown-string</string>
7000 </dict>
7001 </array>
7002 </dict>
7003 </dict>
7004 <key>end</key>
7005 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7006 <key>endCaptures</key>
7007 <dict>
7008 <key>1</key>
7009 <dict>
7010 <key>name</key>
7011 <string>string.other.end.code.fenced.mdx</string>
7012 </dict>
7013 </dict>
7014 <key>name</key>
7015 <string>markup.code.php.mdx</string>
7016 <key>patterns</key>
7017 <array>
7018 <dict>
7019 <key>begin</key>
7020 <string>(^|\G)(\s*)(.*)</string>
7021 <key>while</key>
7022 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7023 <key>contentName</key>
7024 <string>meta.embedded.php</string>
7025 <key>patterns</key>
7026 <array>
7027 <dict>
7028 <key>include</key>
7029 <string>text.html.php</string>
7030 </dict>
7031 </array>
7032 </dict>
7033 </array>
7034 </dict>
7035 <dict>
7036 <key>begin</key>
7037 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:html\+php|inc|php|(?:.*\.)?(?:aw|ctp|php3|php4|php5|phps|phpt|phtml)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
7038 <key>beginCaptures</key>
7039 <dict>
7040 <key>1</key>
7041 <dict>
7042 <key>name</key>
7043 <string>string.other.begin.code.fenced.mdx</string>
7044 </dict>
7045 <key>2</key>
7046 <dict>
7047 <key>name</key>
7048 <string>entity.name.function.mdx</string>
7049 <key>patterns</key>
7050 <array>
7051 <dict>
7052 <key>include</key>
7053 <string>#markdown-string</string>
7054 </dict>
7055 </array>
7056 </dict>
7057 <key>3</key>
7058 <dict>
7059 <key>patterns</key>
7060 <array>
7061 <dict>
7062 <key>include</key>
7063 <string>#markdown-string</string>
7064 </dict>
7065 </array>
7066 </dict>
7067 </dict>
7068 <key>end</key>
7069 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7070 <key>endCaptures</key>
7071 <dict>
7072 <key>1</key>
7073 <dict>
7074 <key>name</key>
7075 <string>string.other.end.code.fenced.mdx</string>
7076 </dict>
7077 </dict>
7078 <key>name</key>
7079 <string>markup.code.php.mdx</string>
7080 <key>patterns</key>
7081 <array>
7082 <dict>
7083 <key>begin</key>
7084 <string>(^|\G)(\s*)(.*)</string>
7085 <key>while</key>
7086 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7087 <key>contentName</key>
7088 <string>meta.embedded.php</string>
7089 <key>patterns</key>
7090 <array>
7091 <dict>
7092 <key>include</key>
7093 <string>text.html.php</string>
7094 </dict>
7095 </array>
7096 </dict>
7097 </array>
7098 </dict>
7099 </array>
7100 </dict>
7101 <key>commonmark-code-fenced-python</key>
7102 <dict>
7103 <key>patterns</key>
7104 <array>
7105 <dict>
7106 <key>begin</key>
7107 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:bazel|easybuild|python|python3|rusthon|snakemake|starlark|xonsh|(?:.*\.)?(?:bzl|eb|gyp|gypi|lmi|py|py3|pyde|pyi|pyp|pyt|pyw|rpy|sage|sagews|smk|snakefile|spec|tac|wsgi|xpy|xsh)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
7108 <key>beginCaptures</key>
7109 <dict>
7110 <key>1</key>
7111 <dict>
7112 <key>name</key>
7113 <string>string.other.begin.code.fenced.mdx</string>
7114 </dict>
7115 <key>2</key>
7116 <dict>
7117 <key>name</key>
7118 <string>entity.name.function.mdx</string>
7119 <key>patterns</key>
7120 <array>
7121 <dict>
7122 <key>include</key>
7123 <string>#markdown-string</string>
7124 </dict>
7125 </array>
7126 </dict>
7127 <key>3</key>
7128 <dict>
7129 <key>patterns</key>
7130 <array>
7131 <dict>
7132 <key>include</key>
7133 <string>#markdown-string</string>
7134 </dict>
7135 </array>
7136 </dict>
7137 </dict>
7138 <key>end</key>
7139 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7140 <key>endCaptures</key>
7141 <dict>
7142 <key>1</key>
7143 <dict>
7144 <key>name</key>
7145 <string>string.other.end.code.fenced.mdx</string>
7146 </dict>
7147 </dict>
7148 <key>name</key>
7149 <string>markup.code.python.mdx</string>
7150 <key>patterns</key>
7151 <array>
7152 <dict>
7153 <key>begin</key>
7154 <string>(^|\G)(\s*)(.*)</string>
7155 <key>while</key>
7156 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7157 <key>contentName</key>
7158 <string>meta.embedded.python</string>
7159 <key>patterns</key>
7160 <array>
7161 <dict>
7162 <key>include</key>
7163 <string>source.python</string>
7164 </dict>
7165 </array>
7166 </dict>
7167 </array>
7168 </dict>
7169 <dict>
7170 <key>begin</key>
7171 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:bazel|easybuild|python|python3|rusthon|snakemake|starlark|xonsh|(?:.*\.)?(?:bzl|eb|gyp|gypi|lmi|py|py3|pyde|pyi|pyp|pyt|pyw|rpy|sage|sagews|smk|snakefile|spec|tac|wsgi|xpy|xsh)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
7172 <key>beginCaptures</key>
7173 <dict>
7174 <key>1</key>
7175 <dict>
7176 <key>name</key>
7177 <string>string.other.begin.code.fenced.mdx</string>
7178 </dict>
7179 <key>2</key>
7180 <dict>
7181 <key>name</key>
7182 <string>entity.name.function.mdx</string>
7183 <key>patterns</key>
7184 <array>
7185 <dict>
7186 <key>include</key>
7187 <string>#markdown-string</string>
7188 </dict>
7189 </array>
7190 </dict>
7191 <key>3</key>
7192 <dict>
7193 <key>patterns</key>
7194 <array>
7195 <dict>
7196 <key>include</key>
7197 <string>#markdown-string</string>
7198 </dict>
7199 </array>
7200 </dict>
7201 </dict>
7202 <key>end</key>
7203 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7204 <key>endCaptures</key>
7205 <dict>
7206 <key>1</key>
7207 <dict>
7208 <key>name</key>
7209 <string>string.other.end.code.fenced.mdx</string>
7210 </dict>
7211 </dict>
7212 <key>name</key>
7213 <string>markup.code.python.mdx</string>
7214 <key>patterns</key>
7215 <array>
7216 <dict>
7217 <key>begin</key>
7218 <string>(^|\G)(\s*)(.*)</string>
7219 <key>while</key>
7220 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7221 <key>contentName</key>
7222 <string>meta.embedded.python</string>
7223 <key>patterns</key>
7224 <array>
7225 <dict>
7226 <key>include</key>
7227 <string>source.python</string>
7228 </dict>
7229 </array>
7230 </dict>
7231 </array>
7232 </dict>
7233 </array>
7234 </dict>
7235 <key>commonmark-code-fenced-r</key>
7236 <dict>
7237 <key>patterns</key>
7238 <array>
7239 <dict>
7240 <key>begin</key>
7241 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:rscript|splus|(?:.*\.)?(?:r|rd|rsx)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
7242 <key>beginCaptures</key>
7243 <dict>
7244 <key>1</key>
7245 <dict>
7246 <key>name</key>
7247 <string>string.other.begin.code.fenced.mdx</string>
7248 </dict>
7249 <key>2</key>
7250 <dict>
7251 <key>name</key>
7252 <string>entity.name.function.mdx</string>
7253 <key>patterns</key>
7254 <array>
7255 <dict>
7256 <key>include</key>
7257 <string>#markdown-string</string>
7258 </dict>
7259 </array>
7260 </dict>
7261 <key>3</key>
7262 <dict>
7263 <key>patterns</key>
7264 <array>
7265 <dict>
7266 <key>include</key>
7267 <string>#markdown-string</string>
7268 </dict>
7269 </array>
7270 </dict>
7271 </dict>
7272 <key>end</key>
7273 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7274 <key>endCaptures</key>
7275 <dict>
7276 <key>1</key>
7277 <dict>
7278 <key>name</key>
7279 <string>string.other.end.code.fenced.mdx</string>
7280 </dict>
7281 </dict>
7282 <key>name</key>
7283 <string>markup.code.r.mdx</string>
7284 <key>patterns</key>
7285 <array>
7286 <dict>
7287 <key>begin</key>
7288 <string>(^|\G)(\s*)(.*)</string>
7289 <key>while</key>
7290 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7291 <key>contentName</key>
7292 <string>meta.embedded.r</string>
7293 <key>patterns</key>
7294 <array>
7295 <dict>
7296 <key>include</key>
7297 <string>source.r</string>
7298 </dict>
7299 </array>
7300 </dict>
7301 </array>
7302 </dict>
7303 <dict>
7304 <key>begin</key>
7305 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:rscript|splus|(?:.*\.)?(?:r|rd|rsx)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
7306 <key>beginCaptures</key>
7307 <dict>
7308 <key>1</key>
7309 <dict>
7310 <key>name</key>
7311 <string>string.other.begin.code.fenced.mdx</string>
7312 </dict>
7313 <key>2</key>
7314 <dict>
7315 <key>name</key>
7316 <string>entity.name.function.mdx</string>
7317 <key>patterns</key>
7318 <array>
7319 <dict>
7320 <key>include</key>
7321 <string>#markdown-string</string>
7322 </dict>
7323 </array>
7324 </dict>
7325 <key>3</key>
7326 <dict>
7327 <key>patterns</key>
7328 <array>
7329 <dict>
7330 <key>include</key>
7331 <string>#markdown-string</string>
7332 </dict>
7333 </array>
7334 </dict>
7335 </dict>
7336 <key>end</key>
7337 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7338 <key>endCaptures</key>
7339 <dict>
7340 <key>1</key>
7341 <dict>
7342 <key>name</key>
7343 <string>string.other.end.code.fenced.mdx</string>
7344 </dict>
7345 </dict>
7346 <key>name</key>
7347 <string>markup.code.r.mdx</string>
7348 <key>patterns</key>
7349 <array>
7350 <dict>
7351 <key>begin</key>
7352 <string>(^|\G)(\s*)(.*)</string>
7353 <key>while</key>
7354 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7355 <key>contentName</key>
7356 <string>meta.embedded.r</string>
7357 <key>patterns</key>
7358 <array>
7359 <dict>
7360 <key>include</key>
7361 <string>source.r</string>
7362 </dict>
7363 </array>
7364 </dict>
7365 </array>
7366 </dict>
7367 </array>
7368 </dict>
7369 <key>commonmark-code-fenced-raku</key>
7370 <dict>
7371 <key>patterns</key>
7372 <array>
7373 <dict>
7374 <key>begin</key>
7375 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:perl\x2d6|perl6|pod\x2d6|(?:.*\.)?(?:6pl|6pm|nqp|p6|p6l|p6m|pl6|pm6|pod|pod6|raku|rakumod)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
7376 <key>beginCaptures</key>
7377 <dict>
7378 <key>1</key>
7379 <dict>
7380 <key>name</key>
7381 <string>string.other.begin.code.fenced.mdx</string>
7382 </dict>
7383 <key>2</key>
7384 <dict>
7385 <key>name</key>
7386 <string>entity.name.function.mdx</string>
7387 <key>patterns</key>
7388 <array>
7389 <dict>
7390 <key>include</key>
7391 <string>#markdown-string</string>
7392 </dict>
7393 </array>
7394 </dict>
7395 <key>3</key>
7396 <dict>
7397 <key>patterns</key>
7398 <array>
7399 <dict>
7400 <key>include</key>
7401 <string>#markdown-string</string>
7402 </dict>
7403 </array>
7404 </dict>
7405 </dict>
7406 <key>end</key>
7407 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7408 <key>endCaptures</key>
7409 <dict>
7410 <key>1</key>
7411 <dict>
7412 <key>name</key>
7413 <string>string.other.end.code.fenced.mdx</string>
7414 </dict>
7415 </dict>
7416 <key>name</key>
7417 <string>markup.code.raku.mdx</string>
7418 <key>patterns</key>
7419 <array>
7420 <dict>
7421 <key>begin</key>
7422 <string>(^|\G)(\s*)(.*)</string>
7423 <key>while</key>
7424 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7425 <key>contentName</key>
7426 <string>meta.embedded.raku</string>
7427 <key>patterns</key>
7428 <array>
7429 <dict>
7430 <key>include</key>
7431 <string>source.raku</string>
7432 </dict>
7433 </array>
7434 </dict>
7435 </array>
7436 </dict>
7437 <dict>
7438 <key>begin</key>
7439 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:perl\x2d6|perl6|pod\x2d6|(?:.*\.)?(?:6pl|6pm|nqp|p6|p6l|p6m|pl6|pm6|pod|pod6|raku|rakumod)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
7440 <key>beginCaptures</key>
7441 <dict>
7442 <key>1</key>
7443 <dict>
7444 <key>name</key>
7445 <string>string.other.begin.code.fenced.mdx</string>
7446 </dict>
7447 <key>2</key>
7448 <dict>
7449 <key>name</key>
7450 <string>entity.name.function.mdx</string>
7451 <key>patterns</key>
7452 <array>
7453 <dict>
7454 <key>include</key>
7455 <string>#markdown-string</string>
7456 </dict>
7457 </array>
7458 </dict>
7459 <key>3</key>
7460 <dict>
7461 <key>patterns</key>
7462 <array>
7463 <dict>
7464 <key>include</key>
7465 <string>#markdown-string</string>
7466 </dict>
7467 </array>
7468 </dict>
7469 </dict>
7470 <key>end</key>
7471 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7472 <key>endCaptures</key>
7473 <dict>
7474 <key>1</key>
7475 <dict>
7476 <key>name</key>
7477 <string>string.other.end.code.fenced.mdx</string>
7478 </dict>
7479 </dict>
7480 <key>name</key>
7481 <string>markup.code.raku.mdx</string>
7482 <key>patterns</key>
7483 <array>
7484 <dict>
7485 <key>begin</key>
7486 <string>(^|\G)(\s*)(.*)</string>
7487 <key>while</key>
7488 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7489 <key>contentName</key>
7490 <string>meta.embedded.raku</string>
7491 <key>patterns</key>
7492 <array>
7493 <dict>
7494 <key>include</key>
7495 <string>source.raku</string>
7496 </dict>
7497 </array>
7498 </dict>
7499 </array>
7500 </dict>
7501 </array>
7502 </dict>
7503 <key>commonmark-code-fenced-ruby</key>
7504 <dict>
7505 <key>patterns</key>
7506 <array>
7507 <dict>
7508 <key>begin</key>
7509 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:jruby|macruby|(?:.*\.)?(?:builder|druby|duby|eye|gemspec|god|jbuilder|mirah|mspec|pluginspec|podspec|prawn|rabl|rake|rb|rbi|rbuild|rbw|rbx|ru|ruby|thor|watchr)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
7510 <key>beginCaptures</key>
7511 <dict>
7512 <key>1</key>
7513 <dict>
7514 <key>name</key>
7515 <string>string.other.begin.code.fenced.mdx</string>
7516 </dict>
7517 <key>2</key>
7518 <dict>
7519 <key>name</key>
7520 <string>entity.name.function.mdx</string>
7521 <key>patterns</key>
7522 <array>
7523 <dict>
7524 <key>include</key>
7525 <string>#markdown-string</string>
7526 </dict>
7527 </array>
7528 </dict>
7529 <key>3</key>
7530 <dict>
7531 <key>patterns</key>
7532 <array>
7533 <dict>
7534 <key>include</key>
7535 <string>#markdown-string</string>
7536 </dict>
7537 </array>
7538 </dict>
7539 </dict>
7540 <key>end</key>
7541 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7542 <key>endCaptures</key>
7543 <dict>
7544 <key>1</key>
7545 <dict>
7546 <key>name</key>
7547 <string>string.other.end.code.fenced.mdx</string>
7548 </dict>
7549 </dict>
7550 <key>name</key>
7551 <string>markup.code.ruby.mdx</string>
7552 <key>patterns</key>
7553 <array>
7554 <dict>
7555 <key>begin</key>
7556 <string>(^|\G)(\s*)(.*)</string>
7557 <key>while</key>
7558 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7559 <key>contentName</key>
7560 <string>meta.embedded.ruby</string>
7561 <key>patterns</key>
7562 <array>
7563 <dict>
7564 <key>include</key>
7565 <string>source.ruby</string>
7566 </dict>
7567 </array>
7568 </dict>
7569 </array>
7570 </dict>
7571 <dict>
7572 <key>begin</key>
7573 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:jruby|macruby|(?:.*\.)?(?:builder|druby|duby|eye|gemspec|god|jbuilder|mirah|mspec|pluginspec|podspec|prawn|rabl|rake|rb|rbi|rbuild|rbw|rbx|ru|ruby|thor|watchr)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
7574 <key>beginCaptures</key>
7575 <dict>
7576 <key>1</key>
7577 <dict>
7578 <key>name</key>
7579 <string>string.other.begin.code.fenced.mdx</string>
7580 </dict>
7581 <key>2</key>
7582 <dict>
7583 <key>name</key>
7584 <string>entity.name.function.mdx</string>
7585 <key>patterns</key>
7586 <array>
7587 <dict>
7588 <key>include</key>
7589 <string>#markdown-string</string>
7590 </dict>
7591 </array>
7592 </dict>
7593 <key>3</key>
7594 <dict>
7595 <key>patterns</key>
7596 <array>
7597 <dict>
7598 <key>include</key>
7599 <string>#markdown-string</string>
7600 </dict>
7601 </array>
7602 </dict>
7603 </dict>
7604 <key>end</key>
7605 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7606 <key>endCaptures</key>
7607 <dict>
7608 <key>1</key>
7609 <dict>
7610 <key>name</key>
7611 <string>string.other.end.code.fenced.mdx</string>
7612 </dict>
7613 </dict>
7614 <key>name</key>
7615 <string>markup.code.ruby.mdx</string>
7616 <key>patterns</key>
7617 <array>
7618 <dict>
7619 <key>begin</key>
7620 <string>(^|\G)(\s*)(.*)</string>
7621 <key>while</key>
7622 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7623 <key>contentName</key>
7624 <string>meta.embedded.ruby</string>
7625 <key>patterns</key>
7626 <array>
7627 <dict>
7628 <key>include</key>
7629 <string>source.ruby</string>
7630 </dict>
7631 </array>
7632 </dict>
7633 </array>
7634 </dict>
7635 </array>
7636 </dict>
7637 <key>commonmark-code-fenced-rust</key>
7638 <dict>
7639 <key>patterns</key>
7640 <array>
7641 <dict>
7642 <key>begin</key>
7643 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:rust|(?:.*\.)?(?:rs|rs\.in)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
7644 <key>beginCaptures</key>
7645 <dict>
7646 <key>1</key>
7647 <dict>
7648 <key>name</key>
7649 <string>string.other.begin.code.fenced.mdx</string>
7650 </dict>
7651 <key>2</key>
7652 <dict>
7653 <key>name</key>
7654 <string>entity.name.function.mdx</string>
7655 <key>patterns</key>
7656 <array>
7657 <dict>
7658 <key>include</key>
7659 <string>#markdown-string</string>
7660 </dict>
7661 </array>
7662 </dict>
7663 <key>3</key>
7664 <dict>
7665 <key>patterns</key>
7666 <array>
7667 <dict>
7668 <key>include</key>
7669 <string>#markdown-string</string>
7670 </dict>
7671 </array>
7672 </dict>
7673 </dict>
7674 <key>end</key>
7675 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7676 <key>endCaptures</key>
7677 <dict>
7678 <key>1</key>
7679 <dict>
7680 <key>name</key>
7681 <string>string.other.end.code.fenced.mdx</string>
7682 </dict>
7683 </dict>
7684 <key>name</key>
7685 <string>markup.code.rust.mdx</string>
7686 <key>patterns</key>
7687 <array>
7688 <dict>
7689 <key>begin</key>
7690 <string>(^|\G)(\s*)(.*)</string>
7691 <key>while</key>
7692 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7693 <key>contentName</key>
7694 <string>meta.embedded.rust</string>
7695 <key>patterns</key>
7696 <array>
7697 <dict>
7698 <key>include</key>
7699 <string>source.rust</string>
7700 </dict>
7701 </array>
7702 </dict>
7703 </array>
7704 </dict>
7705 <dict>
7706 <key>begin</key>
7707 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:rust|(?:.*\.)?(?:rs|rs\.in)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
7708 <key>beginCaptures</key>
7709 <dict>
7710 <key>1</key>
7711 <dict>
7712 <key>name</key>
7713 <string>string.other.begin.code.fenced.mdx</string>
7714 </dict>
7715 <key>2</key>
7716 <dict>
7717 <key>name</key>
7718 <string>entity.name.function.mdx</string>
7719 <key>patterns</key>
7720 <array>
7721 <dict>
7722 <key>include</key>
7723 <string>#markdown-string</string>
7724 </dict>
7725 </array>
7726 </dict>
7727 <key>3</key>
7728 <dict>
7729 <key>patterns</key>
7730 <array>
7731 <dict>
7732 <key>include</key>
7733 <string>#markdown-string</string>
7734 </dict>
7735 </array>
7736 </dict>
7737 </dict>
7738 <key>end</key>
7739 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7740 <key>endCaptures</key>
7741 <dict>
7742 <key>1</key>
7743 <dict>
7744 <key>name</key>
7745 <string>string.other.end.code.fenced.mdx</string>
7746 </dict>
7747 </dict>
7748 <key>name</key>
7749 <string>markup.code.rust.mdx</string>
7750 <key>patterns</key>
7751 <array>
7752 <dict>
7753 <key>begin</key>
7754 <string>(^|\G)(\s*)(.*)</string>
7755 <key>while</key>
7756 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7757 <key>contentName</key>
7758 <string>meta.embedded.rust</string>
7759 <key>patterns</key>
7760 <array>
7761 <dict>
7762 <key>include</key>
7763 <string>source.rust</string>
7764 </dict>
7765 </array>
7766 </dict>
7767 </array>
7768 </dict>
7769 </array>
7770 </dict>
7771 <key>commonmark-code-fenced-scala</key>
7772 <dict>
7773 <key>patterns</key>
7774 <array>
7775 <dict>
7776 <key>begin</key>
7777 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:(?:.*\.)?(?:kojo|sbt|sc|scala)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
7778 <key>beginCaptures</key>
7779 <dict>
7780 <key>1</key>
7781 <dict>
7782 <key>name</key>
7783 <string>string.other.begin.code.fenced.mdx</string>
7784 </dict>
7785 <key>2</key>
7786 <dict>
7787 <key>name</key>
7788 <string>entity.name.function.mdx</string>
7789 <key>patterns</key>
7790 <array>
7791 <dict>
7792 <key>include</key>
7793 <string>#markdown-string</string>
7794 </dict>
7795 </array>
7796 </dict>
7797 <key>3</key>
7798 <dict>
7799 <key>patterns</key>
7800 <array>
7801 <dict>
7802 <key>include</key>
7803 <string>#markdown-string</string>
7804 </dict>
7805 </array>
7806 </dict>
7807 </dict>
7808 <key>end</key>
7809 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7810 <key>endCaptures</key>
7811 <dict>
7812 <key>1</key>
7813 <dict>
7814 <key>name</key>
7815 <string>string.other.end.code.fenced.mdx</string>
7816 </dict>
7817 </dict>
7818 <key>name</key>
7819 <string>markup.code.scala.mdx</string>
7820 <key>patterns</key>
7821 <array>
7822 <dict>
7823 <key>begin</key>
7824 <string>(^|\G)(\s*)(.*)</string>
7825 <key>while</key>
7826 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7827 <key>contentName</key>
7828 <string>meta.embedded.scala</string>
7829 <key>patterns</key>
7830 <array>
7831 <dict>
7832 <key>include</key>
7833 <string>source.scala</string>
7834 </dict>
7835 </array>
7836 </dict>
7837 </array>
7838 </dict>
7839 <dict>
7840 <key>begin</key>
7841 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:(?:.*\.)?(?:kojo|sbt|sc|scala)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
7842 <key>beginCaptures</key>
7843 <dict>
7844 <key>1</key>
7845 <dict>
7846 <key>name</key>
7847 <string>string.other.begin.code.fenced.mdx</string>
7848 </dict>
7849 <key>2</key>
7850 <dict>
7851 <key>name</key>
7852 <string>entity.name.function.mdx</string>
7853 <key>patterns</key>
7854 <array>
7855 <dict>
7856 <key>include</key>
7857 <string>#markdown-string</string>
7858 </dict>
7859 </array>
7860 </dict>
7861 <key>3</key>
7862 <dict>
7863 <key>patterns</key>
7864 <array>
7865 <dict>
7866 <key>include</key>
7867 <string>#markdown-string</string>
7868 </dict>
7869 </array>
7870 </dict>
7871 </dict>
7872 <key>end</key>
7873 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7874 <key>endCaptures</key>
7875 <dict>
7876 <key>1</key>
7877 <dict>
7878 <key>name</key>
7879 <string>string.other.end.code.fenced.mdx</string>
7880 </dict>
7881 </dict>
7882 <key>name</key>
7883 <string>markup.code.scala.mdx</string>
7884 <key>patterns</key>
7885 <array>
7886 <dict>
7887 <key>begin</key>
7888 <string>(^|\G)(\s*)(.*)</string>
7889 <key>while</key>
7890 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7891 <key>contentName</key>
7892 <string>meta.embedded.scala</string>
7893 <key>patterns</key>
7894 <array>
7895 <dict>
7896 <key>include</key>
7897 <string>source.scala</string>
7898 </dict>
7899 </array>
7900 </dict>
7901 </array>
7902 </dict>
7903 </array>
7904 </dict>
7905 <key>commonmark-code-fenced-scss</key>
7906 <dict>
7907 <key>patterns</key>
7908 <array>
7909 <dict>
7910 <key>begin</key>
7911 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:(?:.*\.)?scss))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
7912 <key>beginCaptures</key>
7913 <dict>
7914 <key>1</key>
7915 <dict>
7916 <key>name</key>
7917 <string>string.other.begin.code.fenced.mdx</string>
7918 </dict>
7919 <key>2</key>
7920 <dict>
7921 <key>name</key>
7922 <string>entity.name.function.mdx</string>
7923 <key>patterns</key>
7924 <array>
7925 <dict>
7926 <key>include</key>
7927 <string>#markdown-string</string>
7928 </dict>
7929 </array>
7930 </dict>
7931 <key>3</key>
7932 <dict>
7933 <key>patterns</key>
7934 <array>
7935 <dict>
7936 <key>include</key>
7937 <string>#markdown-string</string>
7938 </dict>
7939 </array>
7940 </dict>
7941 </dict>
7942 <key>end</key>
7943 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
7944 <key>endCaptures</key>
7945 <dict>
7946 <key>1</key>
7947 <dict>
7948 <key>name</key>
7949 <string>string.other.end.code.fenced.mdx</string>
7950 </dict>
7951 </dict>
7952 <key>name</key>
7953 <string>markup.code.scss.mdx</string>
7954 <key>patterns</key>
7955 <array>
7956 <dict>
7957 <key>begin</key>
7958 <string>(^|\G)(\s*)(.*)</string>
7959 <key>while</key>
7960 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
7961 <key>contentName</key>
7962 <string>meta.embedded.scss</string>
7963 <key>patterns</key>
7964 <array>
7965 <dict>
7966 <key>include</key>
7967 <string>source.css.scss</string>
7968 </dict>
7969 </array>
7970 </dict>
7971 </array>
7972 </dict>
7973 <dict>
7974 <key>begin</key>
7975 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:(?:.*\.)?scss))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
7976 <key>beginCaptures</key>
7977 <dict>
7978 <key>1</key>
7979 <dict>
7980 <key>name</key>
7981 <string>string.other.begin.code.fenced.mdx</string>
7982 </dict>
7983 <key>2</key>
7984 <dict>
7985 <key>name</key>
7986 <string>entity.name.function.mdx</string>
7987 <key>patterns</key>
7988 <array>
7989 <dict>
7990 <key>include</key>
7991 <string>#markdown-string</string>
7992 </dict>
7993 </array>
7994 </dict>
7995 <key>3</key>
7996 <dict>
7997 <key>patterns</key>
7998 <array>
7999 <dict>
8000 <key>include</key>
8001 <string>#markdown-string</string>
8002 </dict>
8003 </array>
8004 </dict>
8005 </dict>
8006 <key>end</key>
8007 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8008 <key>endCaptures</key>
8009 <dict>
8010 <key>1</key>
8011 <dict>
8012 <key>name</key>
8013 <string>string.other.end.code.fenced.mdx</string>
8014 </dict>
8015 </dict>
8016 <key>name</key>
8017 <string>markup.code.scss.mdx</string>
8018 <key>patterns</key>
8019 <array>
8020 <dict>
8021 <key>begin</key>
8022 <string>(^|\G)(\s*)(.*)</string>
8023 <key>while</key>
8024 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8025 <key>contentName</key>
8026 <string>meta.embedded.scss</string>
8027 <key>patterns</key>
8028 <array>
8029 <dict>
8030 <key>include</key>
8031 <string>source.css.scss</string>
8032 </dict>
8033 </array>
8034 </dict>
8035 </array>
8036 </dict>
8037 </array>
8038 </dict>
8039 <key>commonmark-code-fenced-shell</key>
8040 <dict>
8041 <key>patterns</key>
8042 <array>
8043 <dict>
8044 <key>begin</key>
8045 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:abuild|alpine\x2dabuild|apkbuild|envrc|gentoo\x2debuild|gentoo\x2declass|openrc|openrc\x2drunscript|shell|shell\x2dscript|(?:.*\.)?(?:bash|bats|command|csh|ebuild|eclass|ksh|sh|sh\.in|tcsh|tmux|tool|zsh|zsh\x2dtheme)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
8046 <key>beginCaptures</key>
8047 <dict>
8048 <key>1</key>
8049 <dict>
8050 <key>name</key>
8051 <string>string.other.begin.code.fenced.mdx</string>
8052 </dict>
8053 <key>2</key>
8054 <dict>
8055 <key>name</key>
8056 <string>entity.name.function.mdx</string>
8057 <key>patterns</key>
8058 <array>
8059 <dict>
8060 <key>include</key>
8061 <string>#markdown-string</string>
8062 </dict>
8063 </array>
8064 </dict>
8065 <key>3</key>
8066 <dict>
8067 <key>patterns</key>
8068 <array>
8069 <dict>
8070 <key>include</key>
8071 <string>#markdown-string</string>
8072 </dict>
8073 </array>
8074 </dict>
8075 </dict>
8076 <key>end</key>
8077 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8078 <key>endCaptures</key>
8079 <dict>
8080 <key>1</key>
8081 <dict>
8082 <key>name</key>
8083 <string>string.other.end.code.fenced.mdx</string>
8084 </dict>
8085 </dict>
8086 <key>name</key>
8087 <string>markup.code.shell.mdx</string>
8088 <key>patterns</key>
8089 <array>
8090 <dict>
8091 <key>begin</key>
8092 <string>(^|\G)(\s*)(.*)</string>
8093 <key>while</key>
8094 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8095 <key>contentName</key>
8096 <string>meta.embedded.shell</string>
8097 <key>patterns</key>
8098 <array>
8099 <dict>
8100 <key>include</key>
8101 <string>source.shell</string>
8102 </dict>
8103 </array>
8104 </dict>
8105 </array>
8106 </dict>
8107 <dict>
8108 <key>begin</key>
8109 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:abuild|alpine\x2dabuild|apkbuild|envrc|gentoo\x2debuild|gentoo\x2declass|openrc|openrc\x2drunscript|shell|shell\x2dscript|(?:.*\.)?(?:bash|bats|command|csh|ebuild|eclass|ksh|sh|sh\.in|tcsh|tmux|tool|zsh|zsh\x2dtheme)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
8110 <key>beginCaptures</key>
8111 <dict>
8112 <key>1</key>
8113 <dict>
8114 <key>name</key>
8115 <string>string.other.begin.code.fenced.mdx</string>
8116 </dict>
8117 <key>2</key>
8118 <dict>
8119 <key>name</key>
8120 <string>entity.name.function.mdx</string>
8121 <key>patterns</key>
8122 <array>
8123 <dict>
8124 <key>include</key>
8125 <string>#markdown-string</string>
8126 </dict>
8127 </array>
8128 </dict>
8129 <key>3</key>
8130 <dict>
8131 <key>patterns</key>
8132 <array>
8133 <dict>
8134 <key>include</key>
8135 <string>#markdown-string</string>
8136 </dict>
8137 </array>
8138 </dict>
8139 </dict>
8140 <key>end</key>
8141 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8142 <key>endCaptures</key>
8143 <dict>
8144 <key>1</key>
8145 <dict>
8146 <key>name</key>
8147 <string>string.other.end.code.fenced.mdx</string>
8148 </dict>
8149 </dict>
8150 <key>name</key>
8151 <string>markup.code.shell.mdx</string>
8152 <key>patterns</key>
8153 <array>
8154 <dict>
8155 <key>begin</key>
8156 <string>(^|\G)(\s*)(.*)</string>
8157 <key>while</key>
8158 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8159 <key>contentName</key>
8160 <string>meta.embedded.shell</string>
8161 <key>patterns</key>
8162 <array>
8163 <dict>
8164 <key>include</key>
8165 <string>source.shell</string>
8166 </dict>
8167 </array>
8168 </dict>
8169 </array>
8170 </dict>
8171 </array>
8172 </dict>
8173 <key>commonmark-code-fenced-shell-session</key>
8174 <dict>
8175 <key>patterns</key>
8176 <array>
8177 <dict>
8178 <key>begin</key>
8179 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:bash\x2dsession|console|shellsession|(?:.*\.)?sh\x2dsession))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
8180 <key>beginCaptures</key>
8181 <dict>
8182 <key>1</key>
8183 <dict>
8184 <key>name</key>
8185 <string>string.other.begin.code.fenced.mdx</string>
8186 </dict>
8187 <key>2</key>
8188 <dict>
8189 <key>name</key>
8190 <string>entity.name.function.mdx</string>
8191 <key>patterns</key>
8192 <array>
8193 <dict>
8194 <key>include</key>
8195 <string>#markdown-string</string>
8196 </dict>
8197 </array>
8198 </dict>
8199 <key>3</key>
8200 <dict>
8201 <key>patterns</key>
8202 <array>
8203 <dict>
8204 <key>include</key>
8205 <string>#markdown-string</string>
8206 </dict>
8207 </array>
8208 </dict>
8209 </dict>
8210 <key>end</key>
8211 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8212 <key>endCaptures</key>
8213 <dict>
8214 <key>1</key>
8215 <dict>
8216 <key>name</key>
8217 <string>string.other.end.code.fenced.mdx</string>
8218 </dict>
8219 </dict>
8220 <key>name</key>
8221 <string>markup.code.shell-session.mdx</string>
8222 <key>patterns</key>
8223 <array>
8224 <dict>
8225 <key>begin</key>
8226 <string>(^|\G)(\s*)(.*)</string>
8227 <key>while</key>
8228 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8229 <key>contentName</key>
8230 <string>meta.embedded.shell-session</string>
8231 <key>patterns</key>
8232 <array>
8233 <dict>
8234 <key>include</key>
8235 <string>text.shell-session</string>
8236 </dict>
8237 </array>
8238 </dict>
8239 </array>
8240 </dict>
8241 <dict>
8242 <key>begin</key>
8243 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:bash\x2dsession|console|shellsession|(?:.*\.)?sh\x2dsession))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
8244 <key>beginCaptures</key>
8245 <dict>
8246 <key>1</key>
8247 <dict>
8248 <key>name</key>
8249 <string>string.other.begin.code.fenced.mdx</string>
8250 </dict>
8251 <key>2</key>
8252 <dict>
8253 <key>name</key>
8254 <string>entity.name.function.mdx</string>
8255 <key>patterns</key>
8256 <array>
8257 <dict>
8258 <key>include</key>
8259 <string>#markdown-string</string>
8260 </dict>
8261 </array>
8262 </dict>
8263 <key>3</key>
8264 <dict>
8265 <key>patterns</key>
8266 <array>
8267 <dict>
8268 <key>include</key>
8269 <string>#markdown-string</string>
8270 </dict>
8271 </array>
8272 </dict>
8273 </dict>
8274 <key>end</key>
8275 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8276 <key>endCaptures</key>
8277 <dict>
8278 <key>1</key>
8279 <dict>
8280 <key>name</key>
8281 <string>string.other.end.code.fenced.mdx</string>
8282 </dict>
8283 </dict>
8284 <key>name</key>
8285 <string>markup.code.shell-session.mdx</string>
8286 <key>patterns</key>
8287 <array>
8288 <dict>
8289 <key>begin</key>
8290 <string>(^|\G)(\s*)(.*)</string>
8291 <key>while</key>
8292 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8293 <key>contentName</key>
8294 <string>meta.embedded.shell-session</string>
8295 <key>patterns</key>
8296 <array>
8297 <dict>
8298 <key>include</key>
8299 <string>text.shell-session</string>
8300 </dict>
8301 </array>
8302 </dict>
8303 </array>
8304 </dict>
8305 </array>
8306 </dict>
8307 <key>commonmark-code-fenced-sql</key>
8308 <dict>
8309 <key>patterns</key>
8310 <array>
8311 <dict>
8312 <key>begin</key>
8313 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:plpgsql|sqlpl|(?:.*\.)?(?:cql|db2|ddl|mysql|pgsql|prc|sql|sql|sql|tab|udf|viw)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
8314 <key>beginCaptures</key>
8315 <dict>
8316 <key>1</key>
8317 <dict>
8318 <key>name</key>
8319 <string>string.other.begin.code.fenced.mdx</string>
8320 </dict>
8321 <key>2</key>
8322 <dict>
8323 <key>name</key>
8324 <string>entity.name.function.mdx</string>
8325 <key>patterns</key>
8326 <array>
8327 <dict>
8328 <key>include</key>
8329 <string>#markdown-string</string>
8330 </dict>
8331 </array>
8332 </dict>
8333 <key>3</key>
8334 <dict>
8335 <key>patterns</key>
8336 <array>
8337 <dict>
8338 <key>include</key>
8339 <string>#markdown-string</string>
8340 </dict>
8341 </array>
8342 </dict>
8343 </dict>
8344 <key>end</key>
8345 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8346 <key>endCaptures</key>
8347 <dict>
8348 <key>1</key>
8349 <dict>
8350 <key>name</key>
8351 <string>string.other.end.code.fenced.mdx</string>
8352 </dict>
8353 </dict>
8354 <key>name</key>
8355 <string>markup.code.sql.mdx</string>
8356 <key>patterns</key>
8357 <array>
8358 <dict>
8359 <key>begin</key>
8360 <string>(^|\G)(\s*)(.*)</string>
8361 <key>while</key>
8362 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8363 <key>contentName</key>
8364 <string>meta.embedded.sql</string>
8365 <key>patterns</key>
8366 <array>
8367 <dict>
8368 <key>include</key>
8369 <string>source.sql</string>
8370 </dict>
8371 </array>
8372 </dict>
8373 </array>
8374 </dict>
8375 <dict>
8376 <key>begin</key>
8377 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:plpgsql|sqlpl|(?:.*\.)?(?:cql|db2|ddl|mysql|pgsql|prc|sql|sql|sql|tab|udf|viw)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
8378 <key>beginCaptures</key>
8379 <dict>
8380 <key>1</key>
8381 <dict>
8382 <key>name</key>
8383 <string>string.other.begin.code.fenced.mdx</string>
8384 </dict>
8385 <key>2</key>
8386 <dict>
8387 <key>name</key>
8388 <string>entity.name.function.mdx</string>
8389 <key>patterns</key>
8390 <array>
8391 <dict>
8392 <key>include</key>
8393 <string>#markdown-string</string>
8394 </dict>
8395 </array>
8396 </dict>
8397 <key>3</key>
8398 <dict>
8399 <key>patterns</key>
8400 <array>
8401 <dict>
8402 <key>include</key>
8403 <string>#markdown-string</string>
8404 </dict>
8405 </array>
8406 </dict>
8407 </dict>
8408 <key>end</key>
8409 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8410 <key>endCaptures</key>
8411 <dict>
8412 <key>1</key>
8413 <dict>
8414 <key>name</key>
8415 <string>string.other.end.code.fenced.mdx</string>
8416 </dict>
8417 </dict>
8418 <key>name</key>
8419 <string>markup.code.sql.mdx</string>
8420 <key>patterns</key>
8421 <array>
8422 <dict>
8423 <key>begin</key>
8424 <string>(^|\G)(\s*)(.*)</string>
8425 <key>while</key>
8426 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8427 <key>contentName</key>
8428 <string>meta.embedded.sql</string>
8429 <key>patterns</key>
8430 <array>
8431 <dict>
8432 <key>include</key>
8433 <string>source.sql</string>
8434 </dict>
8435 </array>
8436 </dict>
8437 </array>
8438 </dict>
8439 </array>
8440 </dict>
8441 <key>commonmark-code-fenced-svg</key>
8442 <dict>
8443 <key>patterns</key>
8444 <array>
8445 <dict>
8446 <key>begin</key>
8447 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:(?:.*\.)?svg))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
8448 <key>beginCaptures</key>
8449 <dict>
8450 <key>1</key>
8451 <dict>
8452 <key>name</key>
8453 <string>string.other.begin.code.fenced.mdx</string>
8454 </dict>
8455 <key>2</key>
8456 <dict>
8457 <key>name</key>
8458 <string>entity.name.function.mdx</string>
8459 <key>patterns</key>
8460 <array>
8461 <dict>
8462 <key>include</key>
8463 <string>#markdown-string</string>
8464 </dict>
8465 </array>
8466 </dict>
8467 <key>3</key>
8468 <dict>
8469 <key>patterns</key>
8470 <array>
8471 <dict>
8472 <key>include</key>
8473 <string>#markdown-string</string>
8474 </dict>
8475 </array>
8476 </dict>
8477 </dict>
8478 <key>end</key>
8479 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8480 <key>endCaptures</key>
8481 <dict>
8482 <key>1</key>
8483 <dict>
8484 <key>name</key>
8485 <string>string.other.end.code.fenced.mdx</string>
8486 </dict>
8487 </dict>
8488 <key>name</key>
8489 <string>markup.code.svg.mdx</string>
8490 <key>patterns</key>
8491 <array>
8492 <dict>
8493 <key>begin</key>
8494 <string>(^|\G)(\s*)(.*)</string>
8495 <key>while</key>
8496 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8497 <key>contentName</key>
8498 <string>meta.embedded.svg</string>
8499 <key>patterns</key>
8500 <array>
8501 <dict>
8502 <key>include</key>
8503 <string>text.xml.svg</string>
8504 </dict>
8505 <dict>
8506 <key>include</key>
8507 <string>text.xml</string>
8508 </dict>
8509 </array>
8510 </dict>
8511 </array>
8512 </dict>
8513 <dict>
8514 <key>begin</key>
8515 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:(?:.*\.)?svg))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
8516 <key>beginCaptures</key>
8517 <dict>
8518 <key>1</key>
8519 <dict>
8520 <key>name</key>
8521 <string>string.other.begin.code.fenced.mdx</string>
8522 </dict>
8523 <key>2</key>
8524 <dict>
8525 <key>name</key>
8526 <string>entity.name.function.mdx</string>
8527 <key>patterns</key>
8528 <array>
8529 <dict>
8530 <key>include</key>
8531 <string>#markdown-string</string>
8532 </dict>
8533 </array>
8534 </dict>
8535 <key>3</key>
8536 <dict>
8537 <key>patterns</key>
8538 <array>
8539 <dict>
8540 <key>include</key>
8541 <string>#markdown-string</string>
8542 </dict>
8543 </array>
8544 </dict>
8545 </dict>
8546 <key>end</key>
8547 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8548 <key>endCaptures</key>
8549 <dict>
8550 <key>1</key>
8551 <dict>
8552 <key>name</key>
8553 <string>string.other.end.code.fenced.mdx</string>
8554 </dict>
8555 </dict>
8556 <key>name</key>
8557 <string>markup.code.svg.mdx</string>
8558 <key>patterns</key>
8559 <array>
8560 <dict>
8561 <key>begin</key>
8562 <string>(^|\G)(\s*)(.*)</string>
8563 <key>while</key>
8564 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8565 <key>contentName</key>
8566 <string>meta.embedded.svg</string>
8567 <key>patterns</key>
8568 <array>
8569 <dict>
8570 <key>include</key>
8571 <string>text.xml.svg</string>
8572 </dict>
8573 <dict>
8574 <key>include</key>
8575 <string>text.xml</string>
8576 </dict>
8577 </array>
8578 </dict>
8579 </array>
8580 </dict>
8581 </array>
8582 </dict>
8583 <key>commonmark-code-fenced-swift</key>
8584 <dict>
8585 <key>patterns</key>
8586 <array>
8587 <dict>
8588 <key>begin</key>
8589 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:(?:.*\.)?swift))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
8590 <key>beginCaptures</key>
8591 <dict>
8592 <key>1</key>
8593 <dict>
8594 <key>name</key>
8595 <string>string.other.begin.code.fenced.mdx</string>
8596 </dict>
8597 <key>2</key>
8598 <dict>
8599 <key>name</key>
8600 <string>entity.name.function.mdx</string>
8601 <key>patterns</key>
8602 <array>
8603 <dict>
8604 <key>include</key>
8605 <string>#markdown-string</string>
8606 </dict>
8607 </array>
8608 </dict>
8609 <key>3</key>
8610 <dict>
8611 <key>patterns</key>
8612 <array>
8613 <dict>
8614 <key>include</key>
8615 <string>#markdown-string</string>
8616 </dict>
8617 </array>
8618 </dict>
8619 </dict>
8620 <key>end</key>
8621 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8622 <key>endCaptures</key>
8623 <dict>
8624 <key>1</key>
8625 <dict>
8626 <key>name</key>
8627 <string>string.other.end.code.fenced.mdx</string>
8628 </dict>
8629 </dict>
8630 <key>name</key>
8631 <string>markup.code.swift.mdx</string>
8632 <key>patterns</key>
8633 <array>
8634 <dict>
8635 <key>begin</key>
8636 <string>(^|\G)(\s*)(.*)</string>
8637 <key>while</key>
8638 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8639 <key>contentName</key>
8640 <string>meta.embedded.swift</string>
8641 <key>patterns</key>
8642 <array>
8643 <dict>
8644 <key>include</key>
8645 <string>source.swift</string>
8646 </dict>
8647 </array>
8648 </dict>
8649 </array>
8650 </dict>
8651 <dict>
8652 <key>begin</key>
8653 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:(?:.*\.)?swift))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
8654 <key>beginCaptures</key>
8655 <dict>
8656 <key>1</key>
8657 <dict>
8658 <key>name</key>
8659 <string>string.other.begin.code.fenced.mdx</string>
8660 </dict>
8661 <key>2</key>
8662 <dict>
8663 <key>name</key>
8664 <string>entity.name.function.mdx</string>
8665 <key>patterns</key>
8666 <array>
8667 <dict>
8668 <key>include</key>
8669 <string>#markdown-string</string>
8670 </dict>
8671 </array>
8672 </dict>
8673 <key>3</key>
8674 <dict>
8675 <key>patterns</key>
8676 <array>
8677 <dict>
8678 <key>include</key>
8679 <string>#markdown-string</string>
8680 </dict>
8681 </array>
8682 </dict>
8683 </dict>
8684 <key>end</key>
8685 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8686 <key>endCaptures</key>
8687 <dict>
8688 <key>1</key>
8689 <dict>
8690 <key>name</key>
8691 <string>string.other.end.code.fenced.mdx</string>
8692 </dict>
8693 </dict>
8694 <key>name</key>
8695 <string>markup.code.swift.mdx</string>
8696 <key>patterns</key>
8697 <array>
8698 <dict>
8699 <key>begin</key>
8700 <string>(^|\G)(\s*)(.*)</string>
8701 <key>while</key>
8702 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8703 <key>contentName</key>
8704 <string>meta.embedded.swift</string>
8705 <key>patterns</key>
8706 <array>
8707 <dict>
8708 <key>include</key>
8709 <string>source.swift</string>
8710 </dict>
8711 </array>
8712 </dict>
8713 </array>
8714 </dict>
8715 </array>
8716 </dict>
8717 <key>commonmark-code-fenced-toml</key>
8718 <dict>
8719 <key>patterns</key>
8720 <array>
8721 <dict>
8722 <key>begin</key>
8723 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:(?:.*\.)?toml))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
8724 <key>beginCaptures</key>
8725 <dict>
8726 <key>1</key>
8727 <dict>
8728 <key>name</key>
8729 <string>string.other.begin.code.fenced.mdx</string>
8730 </dict>
8731 <key>2</key>
8732 <dict>
8733 <key>name</key>
8734 <string>entity.name.function.mdx</string>
8735 <key>patterns</key>
8736 <array>
8737 <dict>
8738 <key>include</key>
8739 <string>#markdown-string</string>
8740 </dict>
8741 </array>
8742 </dict>
8743 <key>3</key>
8744 <dict>
8745 <key>patterns</key>
8746 <array>
8747 <dict>
8748 <key>include</key>
8749 <string>#markdown-string</string>
8750 </dict>
8751 </array>
8752 </dict>
8753 </dict>
8754 <key>end</key>
8755 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8756 <key>endCaptures</key>
8757 <dict>
8758 <key>1</key>
8759 <dict>
8760 <key>name</key>
8761 <string>string.other.end.code.fenced.mdx</string>
8762 </dict>
8763 </dict>
8764 <key>name</key>
8765 <string>markup.code.toml.mdx</string>
8766 <key>patterns</key>
8767 <array>
8768 <dict>
8769 <key>begin</key>
8770 <string>(^|\G)(\s*)(.*)</string>
8771 <key>while</key>
8772 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8773 <key>contentName</key>
8774 <string>meta.embedded.toml</string>
8775 <key>patterns</key>
8776 <array>
8777 <dict>
8778 <key>include</key>
8779 <string>source.toml</string>
8780 </dict>
8781 </array>
8782 </dict>
8783 </array>
8784 </dict>
8785 <dict>
8786 <key>begin</key>
8787 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:(?:.*\.)?toml))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
8788 <key>beginCaptures</key>
8789 <dict>
8790 <key>1</key>
8791 <dict>
8792 <key>name</key>
8793 <string>string.other.begin.code.fenced.mdx</string>
8794 </dict>
8795 <key>2</key>
8796 <dict>
8797 <key>name</key>
8798 <string>entity.name.function.mdx</string>
8799 <key>patterns</key>
8800 <array>
8801 <dict>
8802 <key>include</key>
8803 <string>#markdown-string</string>
8804 </dict>
8805 </array>
8806 </dict>
8807 <key>3</key>
8808 <dict>
8809 <key>patterns</key>
8810 <array>
8811 <dict>
8812 <key>include</key>
8813 <string>#markdown-string</string>
8814 </dict>
8815 </array>
8816 </dict>
8817 </dict>
8818 <key>end</key>
8819 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8820 <key>endCaptures</key>
8821 <dict>
8822 <key>1</key>
8823 <dict>
8824 <key>name</key>
8825 <string>string.other.end.code.fenced.mdx</string>
8826 </dict>
8827 </dict>
8828 <key>name</key>
8829 <string>markup.code.toml.mdx</string>
8830 <key>patterns</key>
8831 <array>
8832 <dict>
8833 <key>begin</key>
8834 <string>(^|\G)(\s*)(.*)</string>
8835 <key>while</key>
8836 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8837 <key>contentName</key>
8838 <string>meta.embedded.toml</string>
8839 <key>patterns</key>
8840 <array>
8841 <dict>
8842 <key>include</key>
8843 <string>source.toml</string>
8844 </dict>
8845 </array>
8846 </dict>
8847 </array>
8848 </dict>
8849 </array>
8850 </dict>
8851 <key>commonmark-code-fenced-ts</key>
8852 <dict>
8853 <key>patterns</key>
8854 <array>
8855 <dict>
8856 <key>begin</key>
8857 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:typescript|(?:.*\.)?(?:cts|mts|ts)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
8858 <key>beginCaptures</key>
8859 <dict>
8860 <key>1</key>
8861 <dict>
8862 <key>name</key>
8863 <string>string.other.begin.code.fenced.mdx</string>
8864 </dict>
8865 <key>2</key>
8866 <dict>
8867 <key>name</key>
8868 <string>entity.name.function.mdx</string>
8869 <key>patterns</key>
8870 <array>
8871 <dict>
8872 <key>include</key>
8873 <string>#markdown-string</string>
8874 </dict>
8875 </array>
8876 </dict>
8877 <key>3</key>
8878 <dict>
8879 <key>patterns</key>
8880 <array>
8881 <dict>
8882 <key>include</key>
8883 <string>#markdown-string</string>
8884 </dict>
8885 </array>
8886 </dict>
8887 </dict>
8888 <key>end</key>
8889 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8890 <key>endCaptures</key>
8891 <dict>
8892 <key>1</key>
8893 <dict>
8894 <key>name</key>
8895 <string>string.other.end.code.fenced.mdx</string>
8896 </dict>
8897 </dict>
8898 <key>name</key>
8899 <string>markup.code.ts.mdx</string>
8900 <key>patterns</key>
8901 <array>
8902 <dict>
8903 <key>begin</key>
8904 <string>(^|\G)(\s*)(.*)</string>
8905 <key>while</key>
8906 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8907 <key>contentName</key>
8908 <string>meta.embedded.ts</string>
8909 <key>patterns</key>
8910 <array>
8911 <dict>
8912 <key>include</key>
8913 <string>source.ts</string>
8914 </dict>
8915 </array>
8916 </dict>
8917 </array>
8918 </dict>
8919 <dict>
8920 <key>begin</key>
8921 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:typescript|(?:.*\.)?(?:cts|mts|ts)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
8922 <key>beginCaptures</key>
8923 <dict>
8924 <key>1</key>
8925 <dict>
8926 <key>name</key>
8927 <string>string.other.begin.code.fenced.mdx</string>
8928 </dict>
8929 <key>2</key>
8930 <dict>
8931 <key>name</key>
8932 <string>entity.name.function.mdx</string>
8933 <key>patterns</key>
8934 <array>
8935 <dict>
8936 <key>include</key>
8937 <string>#markdown-string</string>
8938 </dict>
8939 </array>
8940 </dict>
8941 <key>3</key>
8942 <dict>
8943 <key>patterns</key>
8944 <array>
8945 <dict>
8946 <key>include</key>
8947 <string>#markdown-string</string>
8948 </dict>
8949 </array>
8950 </dict>
8951 </dict>
8952 <key>end</key>
8953 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
8954 <key>endCaptures</key>
8955 <dict>
8956 <key>1</key>
8957 <dict>
8958 <key>name</key>
8959 <string>string.other.end.code.fenced.mdx</string>
8960 </dict>
8961 </dict>
8962 <key>name</key>
8963 <string>markup.code.ts.mdx</string>
8964 <key>patterns</key>
8965 <array>
8966 <dict>
8967 <key>begin</key>
8968 <string>(^|\G)(\s*)(.*)</string>
8969 <key>while</key>
8970 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
8971 <key>contentName</key>
8972 <string>meta.embedded.ts</string>
8973 <key>patterns</key>
8974 <array>
8975 <dict>
8976 <key>include</key>
8977 <string>source.ts</string>
8978 </dict>
8979 </array>
8980 </dict>
8981 </array>
8982 </dict>
8983 </array>
8984 </dict>
8985 <key>commonmark-code-fenced-tsx</key>
8986 <dict>
8987 <key>patterns</key>
8988 <array>
8989 <dict>
8990 <key>begin</key>
8991 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:(?:.*\.)?tsx))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
8992 <key>beginCaptures</key>
8993 <dict>
8994 <key>1</key>
8995 <dict>
8996 <key>name</key>
8997 <string>string.other.begin.code.fenced.mdx</string>
8998 </dict>
8999 <key>2</key>
9000 <dict>
9001 <key>name</key>
9002 <string>entity.name.function.mdx</string>
9003 <key>patterns</key>
9004 <array>
9005 <dict>
9006 <key>include</key>
9007 <string>#markdown-string</string>
9008 </dict>
9009 </array>
9010 </dict>
9011 <key>3</key>
9012 <dict>
9013 <key>patterns</key>
9014 <array>
9015 <dict>
9016 <key>include</key>
9017 <string>#markdown-string</string>
9018 </dict>
9019 </array>
9020 </dict>
9021 </dict>
9022 <key>end</key>
9023 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
9024 <key>endCaptures</key>
9025 <dict>
9026 <key>1</key>
9027 <dict>
9028 <key>name</key>
9029 <string>string.other.end.code.fenced.mdx</string>
9030 </dict>
9031 </dict>
9032 <key>name</key>
9033 <string>markup.code.tsx.mdx</string>
9034 <key>patterns</key>
9035 <array>
9036 <dict>
9037 <key>begin</key>
9038 <string>(^|\G)(\s*)(.*)</string>
9039 <key>while</key>
9040 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
9041 <key>contentName</key>
9042 <string>meta.embedded.tsx</string>
9043 <key>patterns</key>
9044 <array>
9045 <dict>
9046 <key>include</key>
9047 <string>source.tsx</string>
9048 </dict>
9049 </array>
9050 </dict>
9051 </array>
9052 </dict>
9053 <dict>
9054 <key>begin</key>
9055 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:(?:.*\.)?tsx))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
9056 <key>beginCaptures</key>
9057 <dict>
9058 <key>1</key>
9059 <dict>
9060 <key>name</key>
9061 <string>string.other.begin.code.fenced.mdx</string>
9062 </dict>
9063 <key>2</key>
9064 <dict>
9065 <key>name</key>
9066 <string>entity.name.function.mdx</string>
9067 <key>patterns</key>
9068 <array>
9069 <dict>
9070 <key>include</key>
9071 <string>#markdown-string</string>
9072 </dict>
9073 </array>
9074 </dict>
9075 <key>3</key>
9076 <dict>
9077 <key>patterns</key>
9078 <array>
9079 <dict>
9080 <key>include</key>
9081 <string>#markdown-string</string>
9082 </dict>
9083 </array>
9084 </dict>
9085 </dict>
9086 <key>end</key>
9087 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
9088 <key>endCaptures</key>
9089 <dict>
9090 <key>1</key>
9091 <dict>
9092 <key>name</key>
9093 <string>string.other.end.code.fenced.mdx</string>
9094 </dict>
9095 </dict>
9096 <key>name</key>
9097 <string>markup.code.tsx.mdx</string>
9098 <key>patterns</key>
9099 <array>
9100 <dict>
9101 <key>begin</key>
9102 <string>(^|\G)(\s*)(.*)</string>
9103 <key>while</key>
9104 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
9105 <key>contentName</key>
9106 <string>meta.embedded.tsx</string>
9107 <key>patterns</key>
9108 <array>
9109 <dict>
9110 <key>include</key>
9111 <string>source.tsx</string>
9112 </dict>
9113 </array>
9114 </dict>
9115 </array>
9116 </dict>
9117 </array>
9118 </dict>
9119 <key>commonmark-code-fenced-vbnet</key>
9120 <dict>
9121 <key>patterns</key>
9122 <array>
9123 <dict>
9124 <key>begin</key>
9125 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:fb|freebasic|realbasic|vb\x2d\.net|vb\.net|vbnet|vbscript|visual\x2dbasic|visual\x2dbasic\x2d\.net|(?:.*\.)?(?:bi|rbbas|rbfrm|rbmnu|rbres|rbtbar|rbuistate|vb|vbhtml|vbs)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
9126 <key>beginCaptures</key>
9127 <dict>
9128 <key>1</key>
9129 <dict>
9130 <key>name</key>
9131 <string>string.other.begin.code.fenced.mdx</string>
9132 </dict>
9133 <key>2</key>
9134 <dict>
9135 <key>name</key>
9136 <string>entity.name.function.mdx</string>
9137 <key>patterns</key>
9138 <array>
9139 <dict>
9140 <key>include</key>
9141 <string>#markdown-string</string>
9142 </dict>
9143 </array>
9144 </dict>
9145 <key>3</key>
9146 <dict>
9147 <key>patterns</key>
9148 <array>
9149 <dict>
9150 <key>include</key>
9151 <string>#markdown-string</string>
9152 </dict>
9153 </array>
9154 </dict>
9155 </dict>
9156 <key>end</key>
9157 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
9158 <key>endCaptures</key>
9159 <dict>
9160 <key>1</key>
9161 <dict>
9162 <key>name</key>
9163 <string>string.other.end.code.fenced.mdx</string>
9164 </dict>
9165 </dict>
9166 <key>name</key>
9167 <string>markup.code.vbnet.mdx</string>
9168 <key>patterns</key>
9169 <array>
9170 <dict>
9171 <key>begin</key>
9172 <string>(^|\G)(\s*)(.*)</string>
9173 <key>while</key>
9174 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
9175 <key>contentName</key>
9176 <string>meta.embedded.vbnet</string>
9177 <key>patterns</key>
9178 <array>
9179 <dict>
9180 <key>include</key>
9181 <string>source.vbnet</string>
9182 </dict>
9183 </array>
9184 </dict>
9185 </array>
9186 </dict>
9187 <dict>
9188 <key>begin</key>
9189 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:fb|freebasic|realbasic|vb\x2d\.net|vb\.net|vbnet|vbscript|visual\x2dbasic|visual\x2dbasic\x2d\.net|(?:.*\.)?(?:bi|rbbas|rbfrm|rbmnu|rbres|rbtbar|rbuistate|vb|vbhtml|vbs)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
9190 <key>beginCaptures</key>
9191 <dict>
9192 <key>1</key>
9193 <dict>
9194 <key>name</key>
9195 <string>string.other.begin.code.fenced.mdx</string>
9196 </dict>
9197 <key>2</key>
9198 <dict>
9199 <key>name</key>
9200 <string>entity.name.function.mdx</string>
9201 <key>patterns</key>
9202 <array>
9203 <dict>
9204 <key>include</key>
9205 <string>#markdown-string</string>
9206 </dict>
9207 </array>
9208 </dict>
9209 <key>3</key>
9210 <dict>
9211 <key>patterns</key>
9212 <array>
9213 <dict>
9214 <key>include</key>
9215 <string>#markdown-string</string>
9216 </dict>
9217 </array>
9218 </dict>
9219 </dict>
9220 <key>end</key>
9221 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
9222 <key>endCaptures</key>
9223 <dict>
9224 <key>1</key>
9225 <dict>
9226 <key>name</key>
9227 <string>string.other.end.code.fenced.mdx</string>
9228 </dict>
9229 </dict>
9230 <key>name</key>
9231 <string>markup.code.vbnet.mdx</string>
9232 <key>patterns</key>
9233 <array>
9234 <dict>
9235 <key>begin</key>
9236 <string>(^|\G)(\s*)(.*)</string>
9237 <key>while</key>
9238 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
9239 <key>contentName</key>
9240 <string>meta.embedded.vbnet</string>
9241 <key>patterns</key>
9242 <array>
9243 <dict>
9244 <key>include</key>
9245 <string>source.vbnet</string>
9246 </dict>
9247 </array>
9248 </dict>
9249 </array>
9250 </dict>
9251 </array>
9252 </dict>
9253 <key>commonmark-code-fenced-xml</key>
9254 <dict>
9255 <key>patterns</key>
9256 <array>
9257 <dict>
9258 <key>begin</key>
9259 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:collada|eagle|labview|web\x2dontology\x2dlanguage|xpages|(?:.*\.)?(?:adml|admx|ant|axaml|axml|brd|builds|ccproj|ccxml|clixml|cproject|cscfg|csdef|csproj|ct|dae|depproj|dita|ditamap|ditaval|dll\.config|dotsettings|filters|fsproj|fxml|glade|gmx|grxml|hzp|iml|ivy|jelly|jsproj|kml|launch|lvclass|lvlib|lvproj|mdpolicy|mjml|mxml|natvis|ndproj|nproj|nuspec|odd|osm|owl|pkgproj|proj|props|ps1xml|psc1|pt|qhelp|rdf|resx|rss|sch|sch|scxml|sfproj|shproj|srdf|storyboard|sublime\x2dsnippet|targets|tml|ui|urdf|ux|vbproj|vcxproj|vsixmanifest|vssettings|vstemplate|vxml|wixproj|wsdl|wsf|wxi|wxl|wxs|x3d|xacro|xaml|xib|xlf|xliff|xmi|xml|xml\.dist|xmp|xpl|xproc|xproj|xsd|xsp\x2dconfig|xsp\.metadata|xspec|xul|zcml)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
9260 <key>beginCaptures</key>
9261 <dict>
9262 <key>1</key>
9263 <dict>
9264 <key>name</key>
9265 <string>string.other.begin.code.fenced.mdx</string>
9266 </dict>
9267 <key>2</key>
9268 <dict>
9269 <key>name</key>
9270 <string>entity.name.function.mdx</string>
9271 <key>patterns</key>
9272 <array>
9273 <dict>
9274 <key>include</key>
9275 <string>#markdown-string</string>
9276 </dict>
9277 </array>
9278 </dict>
9279 <key>3</key>
9280 <dict>
9281 <key>patterns</key>
9282 <array>
9283 <dict>
9284 <key>include</key>
9285 <string>#markdown-string</string>
9286 </dict>
9287 </array>
9288 </dict>
9289 </dict>
9290 <key>end</key>
9291 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
9292 <key>endCaptures</key>
9293 <dict>
9294 <key>1</key>
9295 <dict>
9296 <key>name</key>
9297 <string>string.other.end.code.fenced.mdx</string>
9298 </dict>
9299 </dict>
9300 <key>name</key>
9301 <string>markup.code.xml.mdx</string>
9302 <key>patterns</key>
9303 <array>
9304 <dict>
9305 <key>begin</key>
9306 <string>(^|\G)(\s*)(.*)</string>
9307 <key>while</key>
9308 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
9309 <key>contentName</key>
9310 <string>meta.embedded.xml</string>
9311 <key>patterns</key>
9312 <array>
9313 <dict>
9314 <key>include</key>
9315 <string>text.xml</string>
9316 </dict>
9317 </array>
9318 </dict>
9319 </array>
9320 </dict>
9321 <dict>
9322 <key>begin</key>
9323 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:collada|eagle|labview|web\x2dontology\x2dlanguage|xpages|(?:.*\.)?(?:adml|admx|ant|axaml|axml|brd|builds|ccproj|ccxml|clixml|cproject|cscfg|csdef|csproj|ct|dae|depproj|dita|ditamap|ditaval|dll\.config|dotsettings|filters|fsproj|fxml|glade|gmx|grxml|hzp|iml|ivy|jelly|jsproj|kml|launch|lvclass|lvlib|lvproj|mdpolicy|mjml|mxml|natvis|ndproj|nproj|nuspec|odd|osm|owl|pkgproj|proj|props|ps1xml|psc1|pt|qhelp|rdf|resx|rss|sch|sch|scxml|sfproj|shproj|srdf|storyboard|sublime\x2dsnippet|targets|tml|ui|urdf|ux|vbproj|vcxproj|vsixmanifest|vssettings|vstemplate|vxml|wixproj|wsdl|wsf|wxi|wxl|wxs|x3d|xacro|xaml|xib|xlf|xliff|xmi|xml|xml\.dist|xmp|xpl|xproc|xproj|xsd|xsp\x2dconfig|xsp\.metadata|xspec|xul|zcml)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
9324 <key>beginCaptures</key>
9325 <dict>
9326 <key>1</key>
9327 <dict>
9328 <key>name</key>
9329 <string>string.other.begin.code.fenced.mdx</string>
9330 </dict>
9331 <key>2</key>
9332 <dict>
9333 <key>name</key>
9334 <string>entity.name.function.mdx</string>
9335 <key>patterns</key>
9336 <array>
9337 <dict>
9338 <key>include</key>
9339 <string>#markdown-string</string>
9340 </dict>
9341 </array>
9342 </dict>
9343 <key>3</key>
9344 <dict>
9345 <key>patterns</key>
9346 <array>
9347 <dict>
9348 <key>include</key>
9349 <string>#markdown-string</string>
9350 </dict>
9351 </array>
9352 </dict>
9353 </dict>
9354 <key>end</key>
9355 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
9356 <key>endCaptures</key>
9357 <dict>
9358 <key>1</key>
9359 <dict>
9360 <key>name</key>
9361 <string>string.other.end.code.fenced.mdx</string>
9362 </dict>
9363 </dict>
9364 <key>name</key>
9365 <string>markup.code.xml.mdx</string>
9366 <key>patterns</key>
9367 <array>
9368 <dict>
9369 <key>begin</key>
9370 <string>(^|\G)(\s*)(.*)</string>
9371 <key>while</key>
9372 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
9373 <key>contentName</key>
9374 <string>meta.embedded.xml</string>
9375 <key>patterns</key>
9376 <array>
9377 <dict>
9378 <key>include</key>
9379 <string>text.xml</string>
9380 </dict>
9381 </array>
9382 </dict>
9383 </array>
9384 </dict>
9385 </array>
9386 </dict>
9387 <key>commonmark-code-fenced-yaml</key>
9388 <dict>
9389 <key>patterns</key>
9390 <array>
9391 <dict>
9392 <key>begin</key>
9393 <string>(?:^|\G)[\t ]*(`{3,})(?:[\t ]*((?i:jar\x2dmanifest|kaitai\x2dstruct|oasv2\x2dyaml|oasv3\x2dyaml|unity3d\x2dasset|yaml|yml|(?:.*\.)?(?:anim|asset|ksy|lkml|lookml|mat|meta|mir|prefab|raml|reek|rviz|sublime\x2dsyntax|syntax|unity|yaml\x2dtmlanguage|yaml\.sed|yml\.mysql)))(?:[\t ]+((?:[^\n\r`])+))?)(?:[\t ]*$)</string>
9394 <key>beginCaptures</key>
9395 <dict>
9396 <key>1</key>
9397 <dict>
9398 <key>name</key>
9399 <string>string.other.begin.code.fenced.mdx</string>
9400 </dict>
9401 <key>2</key>
9402 <dict>
9403 <key>name</key>
9404 <string>entity.name.function.mdx</string>
9405 <key>patterns</key>
9406 <array>
9407 <dict>
9408 <key>include</key>
9409 <string>#markdown-string</string>
9410 </dict>
9411 </array>
9412 </dict>
9413 <key>3</key>
9414 <dict>
9415 <key>patterns</key>
9416 <array>
9417 <dict>
9418 <key>include</key>
9419 <string>#markdown-string</string>
9420 </dict>
9421 </array>
9422 </dict>
9423 </dict>
9424 <key>end</key>
9425 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
9426 <key>endCaptures</key>
9427 <dict>
9428 <key>1</key>
9429 <dict>
9430 <key>name</key>
9431 <string>string.other.end.code.fenced.mdx</string>
9432 </dict>
9433 </dict>
9434 <key>name</key>
9435 <string>markup.code.yaml.mdx</string>
9436 <key>patterns</key>
9437 <array>
9438 <dict>
9439 <key>begin</key>
9440 <string>(^|\G)(\s*)(.*)</string>
9441 <key>while</key>
9442 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
9443 <key>contentName</key>
9444 <string>meta.embedded.yaml</string>
9445 <key>patterns</key>
9446 <array>
9447 <dict>
9448 <key>include</key>
9449 <string>source.yaml</string>
9450 </dict>
9451 </array>
9452 </dict>
9453 </array>
9454 </dict>
9455 <dict>
9456 <key>begin</key>
9457 <string>(?:^|\G)[\t ]*(~{3,})(?:[\t ]*((?i:jar\x2dmanifest|kaitai\x2dstruct|oasv2\x2dyaml|oasv3\x2dyaml|unity3d\x2dasset|yaml|yml|(?:.*\.)?(?:anim|asset|ksy|lkml|lookml|mat|meta|mir|prefab|raml|reek|rviz|sublime\x2dsyntax|syntax|unity|yaml\x2dtmlanguage|yaml\.sed|yml\.mysql)))(?:[\t ]+((?:[^\n\r])+))?)(?:[\t ]*$)</string>
9458 <key>beginCaptures</key>
9459 <dict>
9460 <key>1</key>
9461 <dict>
9462 <key>name</key>
9463 <string>string.other.begin.code.fenced.mdx</string>
9464 </dict>
9465 <key>2</key>
9466 <dict>
9467 <key>name</key>
9468 <string>entity.name.function.mdx</string>
9469 <key>patterns</key>
9470 <array>
9471 <dict>
9472 <key>include</key>
9473 <string>#markdown-string</string>
9474 </dict>
9475 </array>
9476 </dict>
9477 <key>3</key>
9478 <dict>
9479 <key>patterns</key>
9480 <array>
9481 <dict>
9482 <key>include</key>
9483 <string>#markdown-string</string>
9484 </dict>
9485 </array>
9486 </dict>
9487 </dict>
9488 <key>end</key>
9489 <string>(?:^|\G)[\t ]*(\1)(?:[\t ]*$)</string>
9490 <key>endCaptures</key>
9491 <dict>
9492 <key>1</key>
9493 <dict>
9494 <key>name</key>
9495 <string>string.other.end.code.fenced.mdx</string>
9496 </dict>
9497 </dict>
9498 <key>name</key>
9499 <string>markup.code.yaml.mdx</string>
9500 <key>patterns</key>
9501 <array>
9502 <dict>
9503 <key>begin</key>
9504 <string>(^|\G)(\s*)(.*)</string>
9505 <key>while</key>
9506 <string>(^|\G)(?![\t ]*([`~]{3,})[\t ]*$)</string>
9507 <key>contentName</key>
9508 <string>meta.embedded.yaml</string>
9509 <key>patterns</key>
9510 <array>
9511 <dict>
9512 <key>include</key>
9513 <string>source.yaml</string>
9514 </dict>
9515 </array>
9516 </dict>
9517 </array>
9518 </dict>
9519 </array>
9520 </dict>
9521 </dict>
9522 <key>scopeName</key>
9523 <string>source.mdx</string>
9524 <key>uuid</key>
9525 <string>fe65e2cd-7c73-4a27-8b5e-5902893626aa</string>
9526 </dict>
9527</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/php.plist created+4019
......@@ -0,0 +1,4019 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>comment</key>
6 <string>TODO:
7• Try to improve parameters list syntax – scope numbers, ‘=’, ‘,’ and possibly be intelligent about entity ordering
8• Is meta.function-call the correct scope? I've added it to my theme but by default it's not highlighted</string>
9 <key>fileTypes</key>
10 <array>
11 <string>php</string>
12 <string>php3</string>
13 <string>php4</string>
14 <string>php5</string>
15 <string>phpt</string>
16 <string>phtml</string>
17 <string>aw</string>
18 <string>ctp</string>
19 </array>
20 <key>firstLineMatch</key>
21 <string>^#!.*(?&lt;!-)php[0-9]{0,1}\b|&lt;\?php</string>
22 <key>foldingStartMarker</key>
23 <string>(/\*|\{\s*$|&lt;&lt;&lt;HTML)</string>
24 <key>foldingStopMarker</key>
25 <string>(\*/|^\s*\}|^HTML;)</string>
26 <key>injections</key>
27 <dict>
28 <key>^text.html - (meta.embedded | meta.tag), L:^text.html meta.tag, L:text.html.php source.js</key>
29 <dict>
30 <key>patterns</key>
31 <array>
32 <dict>
33 <key>begin</key>
34 <string>(^\s*)(?=&lt;\?(?![^?]*\?&gt;))</string>
35 <key>beginCaptures</key>
36 <dict>
37 <key>0</key>
38 <dict>
39 <key>name</key>
40 <string>punctuation.whitespace.embedded.leading.php</string>
41 </dict>
42 </dict>
43 <key>end</key>
44 <string>(?!\G)(\s*$\n)?</string>
45 <key>endCaptures</key>
46 <dict>
47 <key>0</key>
48 <dict>
49 <key>name</key>
50 <string>punctuation.whitespace.embedded.trailing.php</string>
51 </dict>
52 </dict>
53 <key>patterns</key>
54 <array>
55 <dict>
56 <key>begin</key>
57 <string>&lt;\?(?i:php|=)?</string>
58 <key>beginCaptures</key>
59 <dict>
60 <key>0</key>
61 <dict>
62 <key>name</key>
63 <string>punctuation.section.embedded.begin.php</string>
64 </dict>
65 </dict>
66 <key>contentName</key>
67 <string>source.php</string>
68 <key>end</key>
69 <string>(\?)&gt;</string>
70 <key>endCaptures</key>
71 <dict>
72 <key>0</key>
73 <dict>
74 <key>name</key>
75 <string>punctuation.section.embedded.end.php</string>
76 </dict>
77 <key>1</key>
78 <dict>
79 <key>name</key>
80 <string>source.php</string>
81 </dict>
82 </dict>
83 <key>name</key>
84 <string>meta.embedded.block.php</string>
85 <key>patterns</key>
86 <array>
87 <dict>
88 <key>include</key>
89 <string>#language</string>
90 </dict>
91 </array>
92 </dict>
93 </array>
94 </dict>
95 <dict>
96 <key>begin</key>
97 <string>&lt;\?(?i:php|=)?(?![^?]*\?&gt;)</string>
98 <key>beginCaptures</key>
99 <dict>
100 <key>0</key>
101 <dict>
102 <key>name</key>
103 <string>punctuation.section.embedded.begin.php</string>
104 </dict>
105 </dict>
106 <key>contentName</key>
107 <string>source.php</string>
108 <key>end</key>
109 <string>(\?)&gt;</string>
110 <key>endCaptures</key>
111 <dict>
112 <key>0</key>
113 <dict>
114 <key>name</key>
115 <string>punctuation.section.embedded.end.php</string>
116 </dict>
117 <key>1</key>
118 <dict>
119 <key>name</key>
120 <string>source.php</string>
121 </dict>
122 </dict>
123 <key>name</key>
124 <string>meta.embedded.block.php</string>
125 <key>patterns</key>
126 <array>
127 <dict>
128 <key>include</key>
129 <string>#language</string>
130 </dict>
131 </array>
132 </dict>
133 <dict>
134 <key>begin</key>
135 <string>&lt;\?(?i:php|=)?</string>
136 <key>beginCaptures</key>
137 <dict>
138 <key>0</key>
139 <dict>
140 <key>name</key>
141 <string>punctuation.section.embedded.begin.php</string>
142 </dict>
143 </dict>
144 <key>end</key>
145 <string>&gt;</string>
146 <key>endCaptures</key>
147 <dict>
148 <key>0</key>
149 <dict>
150 <key>name</key>
151 <string>punctuation.section.embedded.end.php</string>
152 </dict>
153 </dict>
154 <key>name</key>
155 <string>meta.embedded.line.php</string>
156 <key>patterns</key>
157 <array>
158 <dict>
159 <key>captures</key>
160 <dict>
161 <key>1</key>
162 <dict>
163 <key>name</key>
164 <string>source.php</string>
165 </dict>
166 <key>2</key>
167 <dict>
168 <key>name</key>
169 <string>punctuation.section.embedded.end.php</string>
170 </dict>
171 <key>3</key>
172 <dict>
173 <key>name</key>
174 <string>source.php</string>
175 </dict>
176 </dict>
177 <key>match</key>
178 <string>\G(\s*)((\?))(?=&gt;)</string>
179 <key>name</key>
180 <string>meta.special.empty-tag.php</string>
181 </dict>
182 <dict>
183 <key>begin</key>
184 <string>\G</string>
185 <key>contentName</key>
186 <string>source.php</string>
187 <key>end</key>
188 <string>(\?)(?=&gt;)</string>
189 <key>endCaptures</key>
190 <dict>
191 <key>0</key>
192 <dict>
193 <key>name</key>
194 <string>punctuation.section.embedded.end.php</string>
195 </dict>
196 <key>1</key>
197 <dict>
198 <key>name</key>
199 <string>source.php</string>
200 </dict>
201 </dict>
202 <key>patterns</key>
203 <array>
204 <dict>
205 <key>include</key>
206 <string>#language</string>
207 </dict>
208 </array>
209 </dict>
210 </array>
211 </dict>
212 </array>
213 </dict>
214 </dict>
215 <key>keyEquivalent</key>
216 <string>^~P</string>
217 <key>name</key>
218 <string>PHP</string>
219 <key>patterns</key>
220 <array>
221 <dict>
222 <key>include</key>
223 <string>text.html.basic</string>
224 </dict>
225 </array>
226 <key>repository</key>
227 <dict>
228 <key>class-builtin</key>
229 <dict>
230 <key>patterns</key>
231 <array>
232 <dict>
233 <key>captures</key>
234 <dict>
235 <key>1</key>
236 <dict>
237 <key>name</key>
238 <string>punctuation.separator.inheritance.php</string>
239 </dict>
240 </dict>
241 <key>match</key>
242 <string>(?ix)
243 (\\)?\b
244 (st(dClass|reamWrapper)|R(RD(Graph|Creator|Updater)|untimeException|e(sourceBundle|cursive(RegexIterator|Ca(chingIterator|llbackFilterIterator)|TreeIterator|Iterator(Iterator)?|DirectoryIterator|FilterIterator|ArrayIterator)|flect(ion(Generator|Method|Class|Type|ZendExtension|Object|P(arameter|roperty)|Extension|Function(Abstract)?)?|or)|gexIterator)|angeException)|G(ender\\Gender|lobIterator|magick(Draw|Pixel)?)|X(sltProcessor|ML(Reader|Diff\\(Memory|Base|DOM|File)|Writer)|SLTProcessor)|M(ysqlndUh(Connection|PreparedStatement)|ongo(Re(sultException|gex)|Grid(fsFile|FS(Cursor|File)?)|BinData|C(o(de|llection|mmandCursor)|ursor(Interface|Exception)?|lient)|Timestamp|I(n(sertBatch|t(32|64))|d)|D(B(Ref|\\(BSON\\(Regex|M(inKey|axKey)|Binary|Serializable|Timestamp|ObjectID|Decimal128|U(nserializable|TCDateTime)|Javascript)|Driver\\(Read(Concern|Preference)|Manager|BulkWrite|Server|C(ommand|ursor(Id)?)|Exception\\WriteException|Query|Write(Result|Concern(Error)?|Error))))?|eleteBatch|ate)|UpdateBatch|Pool|Write(Batch|ConcernException)|Log)?|u(tex|ltipleIterator)|e(ssageFormatter|mcache(d)?))|Bad(MethodCallException|FunctionCallException)|tidy(Node)?|S(ync(ReaderWriter|Mutex|S(haredMemory|emaphore)|Event)|impleXML(Iterator|Element)|oap(Server|Header|Client|Param|Var|Fault)|NMP|CA(_(SoapProxy|LocalProxy))?|p(hinxClient|oofchecker|l(M(inHeap|axHeap)|S(tack|ubject)|Heap|T(ype|empFileObject)|Ob(server|jectStorage)|DoublyLinkedList|PriorityQueue|Enum|Queue|Fi(le(Info|Object)|xedArray)))|e(ssionHandler(Interface)?|ekableIterator|rializable)|DO_(Model_(ReflectionDataObject|Type|Property)|Sequence|D(ata(Object|Factory)|AS_(Relational|XML(_Document)?|Setting|ChangeSummary|Data(Object|Factory)))|Exception|List)|wish(Result(s)?|Search)?|VM(Model)?|QLite(Result|3(Result|Stmt)?|Database|Unbuffered)|AM(Message|Connection))|H(RTime\\(StopWatch|PerformanceCounter)|aru(Image|Outline|D(oc|estination)|Page|Encoder|Font|Annotation))
245 |Ya(f_(R(oute(_(Re(write|gex)|Map|S(tatic|imple|upervar)|Interface)|r)|e(sponse_Abstract|quest_(Simple|Http|Abstract)|gistry))|Session|Con(troller_Abstract|fig_(Simple|Ini|Abstract))|Dispatcher|Plugin_Abstract|Exception|View_(Simple|Interface)|Loader|A(ction_Abstract|pplication))|r_(Server(_Exception)?|C(oncurrent_Client|lient(_Exception)?)))|N(o(RewindIterator|rmalizer)|umberFormatter)|C(o(nd|untable|ll(ectable|ator))|URLFile|a(chingIterator|llbackFilterIterator))|T(hread(ed)?|okyoTyrant(Table|Iterator|Query)?|ra(nsliterator|versable))|I(n(tl(RuleBasedBreakIterator|BreakIterator|C(har|odePointBreakIterator|alendar)|TimeZone|Iterator|DateFormatter|PartsIterator)|validArgumentException|finiteIterator)|terator(Iterator|Aggregate)?|magick(Draw|Pixel(Iterator)?|Kernel)?)|php_user_filter|Z(MQ(Socket|Context|Device|Poll)?|ipArchive|ookeeper)|O(CI\-(Collection|Lob)|ut(erIterator|Of(RangeException|BoundsException))|verflowException)|D(s\\(Map|S(tack|e(t|quence))|Hashable|Collection|Deque|P(air|riorityQueue)|Vector|Queue)|irectory(Iterator)?|omainException|OM(XPath|N(ode(list)?|amedNodeMap)|C(haracterData|omment|dataSection)|Text|Implementation|Document(Fragment)?|ProcessingInstruction|E(ntityReference|lement)|Attr)|ate(Time(I(nterface|mmutable)|Zone)?|Interval|Period))|U(n(derflowException|expectedValueException)|Converter|I\\(Menu(Item)?|Size|Control(s\\(Radio|Gr(id|oup)|MultilineEntry|B(ox|utton)|S(pin|eparator|lider)|C(heck|o(lorButton|mbo))|Tab|P(icker|rogress)|E(ntry|ditableCombo)|Form|Label))?|Draw\\(Matrix|Brush(\\(RadialGradient|Gradient|LinearGradient))?|Stroke|Color|Text\\(Font(\\Descriptor)?|Layout)|P(en|ath))|Point|Executor|Window|Area))|JsonSerializable|finfo|P(har(Data|FileInfo)?|ool|DO(Statement)?|arentIterator)|E(v(S(tat|ignal)|Ch(ild|eck)|Timer|I(o|dle)|ent(B(uffer(Event)?|ase)|SslContext|Http(Request|Connection)?|Config|DnsBase|Util|Listener)?|P(eriodic|repare)|Embed|Fork|Watcher|Loop)?|rrorException|xception|mptyIterator)|V(8Js(Exception)?|arnish(Stat|Log|Admin))|KTaglib_(MPEG_(File|AudioProperties)|Tag|ID3v2_(Tag|Frame|AttachedPictureFrame))|QuickHash(StringIntHash|Int(S(tringHash|et)|Hash))|F(il(terIterator|esystemIterator)|ANNConnection)|mysqli(_(stmt|driver|warning|result))?|W(orker|eak(Map|ref))|L(imitIterator|o(cale|gicException)|ua(Closure)?|engthException|apack)|A(ppendIterator|PC(Iterator|UIterator)|rray(Iterator|Object|Access)))
246 \b
247 </string>
248 <key>name</key>
249 <string>support.class.builtin.php</string>
250 </dict>
251 </array>
252 </dict>
253 <key>class-name</key>
254 <dict>
255 <key>patterns</key>
256 <array>
257 <dict>
258 <key>begin</key>
259 <string>(?i)(?=\\?[a-z_0-9]+\\)</string>
260 <key>end</key>
261 <string>(?i)([a-z_][a-z_0-9]*)?(?=[^a-z0-9_\\]|\z)</string>
262 <key>endCaptures</key>
263 <dict>
264 <key>1</key>
265 <dict>
266 <key>name</key>
267 <string>support.class.php</string>
268 </dict>
269 </dict>
270 <key>patterns</key>
271 <array>
272 <dict>
273 <key>include</key>
274 <string>#namespace</string>
275 </dict>
276 </array>
277 </dict>
278 <dict>
279 <key>include</key>
280 <string>#class-builtin</string>
281 </dict>
282 <dict>
283 <key>begin</key>
284 <string>(?=[\\a-zA-Z_])</string>
285 <key>end</key>
286 <string>(?i)([a-z_][a-z_0-9]*)?(?=[^a-z0-9_\\]|\z)</string>
287 <key>endCaptures</key>
288 <dict>
289 <key>1</key>
290 <dict>
291 <key>name</key>
292 <string>support.class.php</string>
293 </dict>
294 </dict>
295 <key>patterns</key>
296 <array>
297 <dict>
298 <key>include</key>
299 <string>#namespace</string>
300 </dict>
301 </array>
302 </dict>
303 </array>
304 </dict>
305 <key>comments</key>
306 <dict>
307 <key>patterns</key>
308 <array>
309 <dict>
310 <key>begin</key>
311 <string>/\*\*(?:#@\+)?\s*$</string>
312 <key>captures</key>
313 <dict>
314 <key>0</key>
315 <dict>
316 <key>name</key>
317 <string>punctuation.definition.comment.php</string>
318 </dict>
319 </dict>
320 <key>comment</key>
321 <string>This now only highlights a docblock if the first line contains only /**
322 - this is to stop highlighting everything as invalid when people do comment banners with /******** ...
323 - Now matches /**#@+ too - used for docblock templates: http://manual.phpdoc.org/HTMLframesConverter/default/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html#basics.docblocktemplate</string>
324 <key>end</key>
325 <string>\*/</string>
326 <key>name</key>
327 <string>comment.block.documentation.phpdoc.php</string>
328 <key>patterns</key>
329 <array>
330 <dict>
331 <key>include</key>
332 <string>#php_doc</string>
333 </dict>
334 </array>
335 </dict>
336 <dict>
337 <key>begin</key>
338 <string>/\*</string>
339 <key>captures</key>
340 <dict>
341 <key>0</key>
342 <dict>
343 <key>name</key>
344 <string>punctuation.definition.comment.php</string>
345 </dict>
346 </dict>
347 <key>end</key>
348 <string>\*/</string>
349 <key>name</key>
350 <string>comment.block.php</string>
351 </dict>
352 <dict>
353 <key>begin</key>
354 <string>(^[ \t]+)?(?=//)</string>
355 <key>beginCaptures</key>
356 <dict>
357 <key>1</key>
358 <dict>
359 <key>name</key>
360 <string>punctuation.whitespace.comment.leading.php</string>
361 </dict>
362 </dict>
363 <key>end</key>
364 <string>(?!\G)</string>
365 <key>patterns</key>
366 <array>
367 <dict>
368 <key>begin</key>
369 <string>//</string>
370 <key>beginCaptures</key>
371 <dict>
372 <key>0</key>
373 <dict>
374 <key>name</key>
375 <string>punctuation.definition.comment.php</string>
376 </dict>
377 </dict>
378 <key>end</key>
379 <string>\n|(?=\?&gt;)</string>
380 <key>name</key>
381 <string>comment.line.double-slash.php</string>
382 </dict>
383 </array>
384 </dict>
385 <dict>
386 <key>begin</key>
387 <string>(^[ \t]+)?(?=#)</string>
388 <key>beginCaptures</key>
389 <dict>
390 <key>1</key>
391 <dict>
392 <key>name</key>
393 <string>punctuation.whitespace.comment.leading.php</string>
394 </dict>
395 </dict>
396 <key>end</key>
397 <string>(?!\G)</string>
398 <key>patterns</key>
399 <array>
400 <dict>
401 <key>begin</key>
402 <string>#</string>
403 <key>beginCaptures</key>
404 <dict>
405 <key>0</key>
406 <dict>
407 <key>name</key>
408 <string>punctuation.definition.comment.php</string>
409 </dict>
410 </dict>
411 <key>end</key>
412 <string>\n|(?=\?&gt;)</string>
413 <key>name</key>
414 <string>comment.line.number-sign.php</string>
415 </dict>
416 </array>
417 </dict>
418 </array>
419 </dict>
420 <key>constants</key>
421 <dict>
422 <key>patterns</key>
423 <array>
424 <dict>
425 <key>begin</key>
426 <string>(?xi)(?=
427 (
428 (\\[a-z_][a-z_0-9]*\\[a-z_][a-z_0-9\\]*)|
429 ([a-z_][a-z_0-9]*\\[a-z_][a-z_0-9\\]*)
430 )
431 [^a-z_0-9\\])</string>
432 <key>end</key>
433 <string>(?i)([a-z_][a-z_0-9]*)?(?=[^a-z0-9_\\])</string>
434 <key>endCaptures</key>
435 <dict>
436 <key>1</key>
437 <dict>
438 <key>name</key>
439 <string>constant.other.php</string>
440 </dict>
441 </dict>
442 <key>patterns</key>
443 <array>
444 <dict>
445 <key>include</key>
446 <string>#namespace</string>
447 </dict>
448 </array>
449 </dict>
450 <dict>
451 <key>begin</key>
452 <string>(?=\\?[a-zA-Z_\x{7f}-\x{ff}])</string>
453 <key>end</key>
454 <string>(?=[^\\a-zA-Z_\x{7f}-\x{ff}])</string>
455 <key>patterns</key>
456 <array>
457 <dict>
458 <key>match</key>
459 <string>(?i)\b(TRUE|FALSE|NULL|__(FILE|DIR|FUNCTION|CLASS|METHOD|LINE|NAMESPACE)__|ON|OFF|YES|NO|NL|BR|TAB)\b</string>
460 <key>name</key>
461 <string>constant.language.php</string>
462 </dict>
463 <dict>
464 <key>captures</key>
465 <dict>
466 <key>1</key>
467 <dict>
468 <key>name</key>
469 <string>punctuation.separator.inheritance.php</string>
470 </dict>
471 </dict>
472 <key>match</key>
473 <string>(\\)?\b(STD(IN|OUT|ERR)|ZEND_(THREAD_SAFE|DEBUG_BUILD)|DEFAULT_INCLUDE_PATH|P(HP_(R(OUND_HALF_(ODD|DOWN|UP|EVEN)|ELEASE_VERSION)|M(INOR_VERSION|A(XPATHLEN|JOR_VERSION))|BINDIR|S(HLIB_SUFFIX|YSCONFDIR|API)|CONFIG_FILE_(SCAN_DIR|PATH)|INT_(MAX|SIZE)|ZTS|O(S|UTPUT_HANDLER_(START|CONT|END))|D(EBUG|ATADIR)|URL_(SCHEME|HOST|USER|P(ORT|A(SS|TH))|QUERY|FRAGMENT)|PREFIX|E(XT(RA_VERSION|ENSION_DIR)|OL)|VERSION(_ID)?|WINDOWS_(NT_(SERVER|DOMAIN_CONTROLLER|WORKSTATION)|VERSION_(M(INOR|AJOR)|BUILD|S(UITEMASK|P_M(INOR|AJOR))|P(RODUCTTYPE|LATFORM)))|L(IBDIR|OCALSTATEDIR))|EAR_(INSTALL_DIR|EXTENSION_DIR))|E_(RECOVERABLE_ERROR|STRICT|NOTICE|CO(RE_(ERROR|WARNING)|MPILE_(ERROR|WARNING))|DEPRECATED|USER_(NOTICE|DEPRECATED|ERROR|WARNING)|PARSE|ERROR|WARNING|ALL))\b</string>
474 <key>name</key>
475 <string>support.constant.core.php</string>
476 </dict>
477 <dict>
478 <key>captures</key>
479 <dict>
480 <key>1</key>
481 <dict>
482 <key>name</key>
483 <string>punctuation.separator.inheritance.php</string>
484 </dict>
485 </dict>
486 <key>match</key>
487 <string>(\\)?\b(RADIXCHAR|GROUPING|M(_(1_PI|SQRT(1_2|2|3|PI)|2_(SQRTPI|PI)|PI(_(2|4))?|E(ULER)?|L(N(10|2|PI)|OG(10E|2E)))|ON_(GROUPING|1(1|2|0)?|7|2|8|THOUSANDS_SEP|3|DECIMAL_POINT|9|4|5|6))|S(TR_PAD_(RIGHT|BOTH|LEFT)|ORT_(REGULAR|STRING|NUMERIC|DESC|LOCALE_STRING|ASC)|EEK_(SET|CUR|END))|H(TML_(SPECIALCHARS|ENTITIES)|ASH_HMAC)|YES(STR|EXPR)|N(_(S(IGN_POSN|EP_BY_SPACE)|CS_PRECEDES)|O(STR|EXPR)|EGATIVE_SIGN|AN)|C(R(YPT_(MD5|BLOWFISH|S(HA(256|512)|TD_DES|ALT_LENGTH)|EXT_DES)|NCYSTR|EDITS_(G(ROUP|ENERAL)|MODULES|SAPI|DOCS|QA|FULLPAGE|ALL))|HAR_MAX|O(NNECTION_(NORMAL|TIMEOUT|ABORTED)|DESET|UNT_(RECURSIVE|NORMAL))|URRENCY_SYMBOL|ASE_(UPPER|LOWER))|__COMPILER_HALT_OFFSET__|T(HOUS(EP|ANDS_SEP)|_FMT(_AMPM)?)|IN(T_(CURR_SYMBOL|FRAC_DIGITS)|I_(S(YSTEM|CANNER_(RAW|NORMAL))|USER|PERDIR|ALL)|F(O_(GENERAL|MODULES|C(REDITS|ONFIGURATION)|ENVIRONMENT|VARIABLES|LICENSE|ALL))?)|D(_(T_FMT|FMT)|IRECTORY_SEPARATOR|ECIMAL_POINT|A(Y_(1|7|2|3|4|5|6)|TE_(R(SS|FC(1(123|036)|2822|8(22|50)|3339))|COOKIE|ISO8601|W3C|ATOM)))|UPLOAD_ERR_(NO_(TMP_DIR|FILE)|CANT_WRITE|INI_SIZE|OK|PARTIAL|EXTENSION|FORM_SIZE)|P(M_STR|_(S(IGN_POSN|EP_BY_SPACE)|CS_PRECEDES)|OSITIVE_SIGN|ATH(_SEPARATOR|INFO_(BASENAME|DIRNAME|EXTENSION|FILENAME)))|E(RA(_(YEAR|T_FMT|D_(T_FMT|FMT)))?|XTR_(REFS|SKIP|IF_EXISTS|OVERWRITE|PREFIX_(SAME|I(NVALID|F_EXISTS)|ALL))|NT_(NOQUOTES|COMPAT|IGNORE|QUOTES))|FRAC_DIGITS|L(C_(M(ONETARY|ESSAGES)|NUMERIC|C(TYPE|OLLATE)|TIME|ALL)|O(G_(MAIL|SYSLOG|N(O(TICE|WAIT)|DELAY|EWS)|C(R(IT|ON)|ONS)|INFO|ODELAY|D(EBUG|AEMON)|U(SER|UCP)|P(ID|ERROR)|E(RR|MERG)|KERN|WARNING|L(OCAL(1|7|2|3|4|5|0|6)|PR)|A(UTH(PRIV)?|LERT))|CK_(SH|NB|UN|EX)))|A(M_STR|B(MON_(1(1|2|0)?|7|2|8|3|9|4|5|6)|DAY_(1|7|2|3|4|5|6))|SSERT_(BAIL|CALLBACK|QUIET_EVAL|WARNING|ACTIVE)|LT_DIGITS))\b</string>
488 <key>name</key>
489 <string>support.constant.std.php</string>
490 </dict>
491 <dict>
492 <key>captures</key>
493 <dict>
494 <key>1</key>
495 <dict>
496 <key>name</key>
497 <string>punctuation.separator.inheritance.php</string>
498 </dict>
499 </dict>
500 <key>match</key>
501 <string>(?x)
502 (\\)?\b
503 (GLOB_(MARK|BRACE|NO(SORT|CHECK|ESCAPE)|ONLYDIR|ERR|AVAILABLE_FLAGS)|XML_(SAX_IMPL|HTML_DOCUMENT_NODE|N(OTATION_NODE|AMESPACE_DECL_NODE)|C(OMMENT_NODE|DATA_SECTION_NODE)|TEXT_NODE|OPTION_(SKIP_(TAGSTART|WHITE)|CASE_FOLDING|TARGET_ENCODING)|D(TD_NODE|OCUMENT_(NODE|TYPE_NODE|FRAG_NODE))|PI_NODE|E(RROR_(RECURSIVE_ENTITY_REF|MISPLACED_XML_PI|B(INARY_ENTITY_REF|AD_CHAR_REF)|SYNTAX|NO(NE|_(MEMORY|ELEMENTS))|TAG_MISMATCH|IN(CORRECT_ENCODING|VALID_TOKEN)|DUPLICATE_ATTRIBUTE|UN(CLOSED_(CDATA_SECTION|TOKEN)|DEFINED_ENTITY|KNOWN_ENCODING)|JUNK_AFTER_DOC_ELEMENT|PAR(TIAL_CHAR|AM_ENTITY_REF)|EXTERNAL_ENTITY_HANDLING|A(SYNC_ENTITY|TTRIBUTE_EXTERNAL_ENTITY_REF))|NTITY_(REF_NODE|NODE|DECL_NODE)|LEMENT_(NODE|DECL_NODE))|LOCAL_NAMESPACE|ATTRIBUTE_(N(MTOKEN(S)?|O(TATION|DE))|CDATA|ID(REF(S)?)?|DECL_NODE|EN(TITY|UMERATION)))|M(HASH_(RIPEMD(1(28|60)|256|320)|GOST|MD(2|4|5)|S(HA(1|2(24|56)|384|512)|NEFRU256)|HAVAL(1(28|92|60)|2(24|56))|CRC32(B)?|TIGER(1(28|60))?|WHIRLPOOL|ADLER32)|YSQL(_(BOTH|NUM|CLIENT_(SSL|COMPRESS|I(GNORE_SPACE|NTERACTIVE))|ASSOC)|I_(RE(PORT_(STRICT|INDEX|OFF|ERROR|ALL)|FRESH_(GRANT|MASTER|BACKUP_LOG|S(TATUS|LAVE)|HOSTS|T(HREADS|ABLES)|LOG)|AD_DEFAULT_(GROUP|FILE))|GROUP_FLAG|MULTIPLE_KEY_FLAG|B(INARY_FLAG|OTH|LOB_FLAG)|S(T(MT_ATTR_(CURSOR_TYPE|UPDATE_MAX_LENGTH|PREFETCH_ROWS)|ORE_RESULT)|E(RVER_QUERY_(NO_(GOOD_INDEX_USED|INDEX_USED)|WAS_SLOW)|T_(CHARSET_NAME|FLAG)))|N(O(_D(EFAULT_VALUE_FLAG|ATA)|T_NULL_FLAG)|UM(_FLAG)?)|C(URSOR_TYPE_(READ_ONLY|SCROLLABLE|NO_CURSOR|FOR_UPDATE)|LIENT_(SSL|NO_SCHEMA|COMPRESS|I(GNORE_SPACE|NTERACTIVE)|FOUND_ROWS))|T(YPE_(GEOMETRY|MEDIUM_BLOB|B(IT|LOB)|S(HORT|TRING|ET)|YEAR|N(ULL|EWD(ECIMAL|ATE))|CHAR|TI(ME(STAMP)?|NY(_BLOB)?)|INT(24|ERVAL)|D(OUBLE|ECIMAL|ATE(TIME)?)|ENUM|VAR_STRING|FLOAT|LONG(_BLOB|LONG)?)|IMESTAMP_FLAG)|INIT_COMMAND|ZEROFILL_FLAG|O(N_UPDATE_NOW_FLAG|PT_(NET_(READ_BUFFER_SIZE|CMD_BUFFER_SIZE)|CONNECT_TIMEOUT|INT_AND_FLOAT_NATIVE|LOCAL_INFILE))|D(EBUG_TRACE_ENABLED|ATA_TRUNCATED)|U(SE_RESULT|N(SIGNED_FLAG|IQUE_KEY_FLAG))|P(RI_KEY_FLAG|ART_KEY_FLAG)|ENUM_FLAG|A(S(SOC|YNC)|UTO_INCREMENT_FLAG)))|CRYPT_(R(C(2|6)|IJNDAEL_(1(28|92)|256)|AND)|GOST|XTEA|M(ODE_(STREAM|NOFB|C(BC|FB)|OFB|ECB)|ARS)|BLOWFISH(_COMPAT)?|S(ERPENT|KIPJACK|AFER(128|PLUS|64))|C(RYPT|AST_(128|256))|T(RIPLEDES|HREEWAY|WOFISH)|IDEA|3DES|
504 DE(S|CRYPT|V_(RANDOM|URANDOM))|PANAMA|EN(CRYPT|IGNA)|WAKE|LOKI97|ARCFOUR(_IV)?))|S(TREAM_(REPORT_ERRORS|M(UST_SEEK|KDIR_RECURSIVE)|BUFFER_(NONE|FULL|LINE)|S(HUT_(RD(WR)?|WR)|OCK_(R(DM|AW)|S(TREAM|EQPACKET)|DGRAM)|ERVER_(BIND|LISTEN))|NOTIFY_(RE(SOLVE|DIRECTED)|MIME_TYPE_IS|SEVERITY_(INFO|ERR|WARN)|CO(MPLETED|NNECT)|PROGRESS|F(ILE_SIZE_IS|AILURE)|AUTH_RE(SULT|QUIRED))|C(RYPTO_METHOD_(SSLv(2(_(SERVER|CLIENT)|3_(SERVER|CLIENT))|3_(SERVER|CLIENT))|TLS_(SERVER|CLIENT))|LIENT_(CONNECT|PERSISTENT|ASYNC_CONNECT)|AST_(FOR_SELECT|AS_STREAM))|I(GNORE_URL|S_URL|PPROTO_(RAW|TCP|I(CMP|P)|UDP))|O(OB|PTION_(READ_(BUFFER|TIMEOUT)|BLOCKING|WRITE_BUFFER))|U(RL_STAT_(QUIET|LINK)|SE_PATH)|P(EEK|F_(INET(6)?|UNIX))|ENFORCE_SAFE_MODE|FILTER_(READ|WRITE|ALL))|UNFUNCS_RET_(STRING|TIMESTAMP|DOUBLE)|QLITE(_(R(OW|EADONLY)|MIS(MATCH|USE)|B(OTH|USY)|SCHEMA|N(O(MEM|T(FOUND|ADB)|LFS)|UM)|C(O(RRUPT|NSTRAINT)|ANTOPEN)|TOOBIG|I(NTER(RUPT|NAL)|OERR)|OK|DONE|P(ROTOCOL|ERM)|E(RROR|MPTY)|F(ORMAT|ULL)|LOCKED|A(BORT|SSOC|UTH))|3_(B(OTH|LOB)|NU(M|LL)|TEXT|INTEGER|OPEN_(READ(ONLY|WRITE)|CREATE)|FLOAT|ASSOC)))|CURL(M(SG_DONE|_(BAD_(HANDLE|EASY_HANDLE)|CALL_MULTI_PERFORM|INTERNAL_ERROR|O(UT_OF_MEMORY|K)))|SSH_AUTH_(HOST|NONE|DEFAULT|P(UBLICKEY|ASSWORD)|KEYBOARD)|CLOSEPOLICY_(SLOWEST|CALLBACK|OLDEST|LEAST_(RECENTLY_USED|TRAFFIC))|_(HTTP_VERSION_(1_(1|0)|NONE)|NETRC_(REQUIRED|IGNORED|OPTIONAL)|TIMECOND_(IF(MODSINCE|UNMODSINCE)|LASTMOD)|IPRESOLVE_(V(4|6)|WHATEVER)|VERSION_(SSL|IPV6|KERBEROS4|LIBZ))|INFO_(RE(DIRECT_(COUNT|TIME)|QUEST_SIZE)|S(SL_VERIFYRESULT|TARTTRANSFER_TIME|IZE_(DOWNLOAD|UPLOAD)|PEED_(DOWNLOAD|UPLOAD))|H(TTP_CODE|EADER_(SIZE|OUT))|NAMELOOKUP_TIME|C(ON(NECT_TIME|TENT_(TYPE|LENGTH_(DOWNLOAD|UPLOAD)))|ERTINFO)|TOTAL_TIME|PR(IVATE|ETRANSFER_TIME)|EFFECTIVE_URL|FILETIME)|OPT_(R(E(SUME_FROM|TURNTRANSFER|DIR_PROTOCOLS|FERER|AD(DATA|FUNCTION))|AN(GE|DOM_FILE))|MAX(REDIRS|CONNECTS)|B(INARYTRANSFER|UFFERSIZE)|S(S(H_(HOST_PUBLIC_KEY_MD5|P(RIVATE_KEYFILE|UBLIC_KEYFILE)|AUTH_TYPES)|L(CERT(TYPE|PASSWD)?|_(CIPHER_LIST|VERIFY(HOST|PEER))|ENGINE(_DEFAULT)?|VERSION|KEY(TYPE|PASSWD)?))|TDERR)|H(TTP(GET|HEADER|200ALIASES|_VERSION|PROXYTUNNEL|AUTH)|EADER(FUNCTION)?)
505 |N(O(BODY|SIGNAL|PROGRESS)|ETRC)|C(RLF|O(NNECTTIMEOUT(_MS)?|OKIE(SESSION|JAR|FILE)?)|USTOMREQUEST|ERTINFO|LOSEPOLICY|A(INFO|PATH))|T(RANSFERTEXT|CP_NODELAY|IME(CONDITION|OUT(_MS)?|VALUE))|I(N(TERFACE|FILE(SIZE)?)|PRESOLVE)|DNS_(CACHE_TIMEOUT|USE_GLOBAL_CACHE)|U(RL|SER(PWD|AGENT)|NRESTRICTED_AUTH|PLOAD)|P(R(IVATE|O(GRESSFUNCTION|XY(TYPE|USERPWD|PORT|AUTH)?|TOCOLS))|O(RT|ST(REDIR|QUOTE|FIELDS)?)|UT)|E(GDSOCKET|NCODING)|VERBOSE|K(RB4LEVEL|EYPASSWD)|QUOTE|F(RESH_CONNECT|TP(SSLAUTH|_(S(SL|KIP_PASV_IP)|CREATE_MISSING_DIRS|USE_EP(RT|SV)|FILEMETHOD)|PORT|LISTONLY|APPEND)|ILE(TIME)?|O(RBID_REUSE|LLOWLOCATION)|AILONERROR)|WRITE(HEADER|FUNCTION)|LOW_SPEED_(TIME|LIMIT)|AUTOREFERER)|PRO(XY_(SOCKS(4|5)|HTTP)|TO_(S(CP|FTP)|HTTP(S)?|T(ELNET|FTP)|DICT|F(TP(S)?|ILE)|LDAP(S)?|ALL))|E_(RE(CV_ERROR|AD_ERROR)|GOT_NOTHING|MALFORMAT_USER|BAD_(C(ONTENT_ENCODING|ALLING_ORDER)|PASSWORD_ENTERED|FUNCTION_ARGUMENT)|S(S(H|L_(C(IPHER|ONNECT_ERROR|ERTPROBLEM|ACERT)|PEER_CERTIFICATE|ENGINE_(SETFAILED|NOTFOUND)))|HARE_IN_USE|END_ERROR)|HTTP_(RANGE_ERROR|NOT_FOUND|PO(RT_FAILED|ST_ERROR))|COULDNT_(RESOLVE_(HOST|PROXY)|CONNECT)|T(OO_MANY_REDIRECTS|ELNET_OPTION_SYNTAX)|O(BSOLETE|UT_OF_MEMORY|PERATION_TIMEOUTED|K)|U(RL_MALFORMAT(_USER)?|N(SUPPORTED_PROTOCOL|KNOWN_TELNET_OPTION))|PARTIAL_FILE|F(TP_(BAD_DOWNLOAD_RESUME|SSL_FAILED|C(OULDNT_(RETR_FILE|GET_SIZE|S(TOR_FILE|ET_(BINARY|ASCII))|USE_REST)|ANT_(RECONNECT|GET_HOST))|USER_PASSWORD_INCORRECT|PORT_FAILED|QUOTE_ERROR|W(RITE_ERROR|EIRD_(SERVER_REPLY|227_FORMAT|USER_REPLY|PAS(S_REPLY|V_REPLY)))|ACCESS_DENIED)|ILE(SIZE_EXCEEDED|_COULDNT_READ_FILE)|UNCTION_NOT_FOUND|AILED_INIT)|WRITE_ERROR|L(IBRARY_NOT_FOUND|DAP_(SEARCH_FAILED|CANNOT_BIND|INVALID_URL))|ABORTED_BY_CALLBACK)|VERSION_NOW|FTP(METHOD_(MULTICWD|SINGLECWD|NOCWD)|SSL_(NONE|CONTROL|TRY|ALL)|AUTH_(SSL|TLS|DEFAULT))|AUTH_(GSSNEGOTIATE|BASIC|NTLM|DIGEST|ANY(SAFE)?))|I(MAGETYPE_(GIF|XBM|BMP|SWF|COUNT|TIFF_(MM|II)|I(CO|FF)|UNKNOWN|J(B2|P(X|2|C|EG(2000)?))|P(SD|NG)|WBMP)|NPUT_(REQUEST|GET|SE(RVER|SSION)|COOKIE|POST|ENV)|CONV_(MIME_DECODE_(STRICT|CONTINUE_ON_ERROR)|IMPL|VERSION))|D(NS_(MX|S(RV|OA)|HINFO|N(S|APTR)|CNAME|TXT|PTR|A(NY|LL|AAA|6)?)|OM(STRING_SIZE_ERR|_(SYNTAX_ERR|HIERARCHY_REQUEST_ERR|N(O(_(MODIFICATION_ALLOWED_ERR|DATA_ALLOWED_ERR)|T_(SUPPORTED_ERR|FOUND_ERR))|AMESPACE_ERR)|IN(DEX_SIZE_ERR|USE_ATTRIBUTE_ERR|VALID_(MODIFICATION_ERR|STATE_ERR|CHARACTER_ERR|ACCESS_ERR))|PHP_ERR|VALIDATION_ERR|WRONG_DOCUMENT_ERR)))|JSON_(HEX_(TAG|QUOT|A(MP|POS))|NUMERIC_CHECK|ERROR_(S(YNTAX|TATE_MISMATCH)|NONE|CTRL_CHAR|DEPTH|UTF8)|FORCE_OBJECT)|P(REG_(RECURSION_LIMIT_ERROR|GREP_INVERT|BA(CKTRACK_LIMIT_ERROR|D_UTF8_(OFFSET_ERROR|ERROR))|S(PLIT_(NO_EMPTY|OFFSET_CAPTURE|DELIM_CAPTURE)|ET_ORDER)|NO_ERROR|INTERNAL_ERROR|OFFSET_CAPTURE|PATTERN_ORDER)|SFS_(PASS_ON|ERR_FATAL|F(EED_ME|LAG_(NORMAL|FLUSH_(CLOSE|INC))))|CRE_VERSION|OSIX_(R_OK|X_OK|S_IF(REG|BLK|SOCK|CHR|IFO)|F_OK|W_OK))|F(NM_(NOESCAPE|CASEFOLD|P(ERIOD|ATHNAME))|IL(TER_(REQUIRE_(SCALAR|ARRAY)|SANITIZE_(MAGIC_QUOTES|S(TRI(NG|PPED)|PECIAL_CHARS)|NUMBER_(INT|FLOAT)|URL|E(MAIL|NCODED)|FULL_SPECIAL_CHARS)|NULL_ON_FAILURE|CALLBACK|DEFAULT|UNSAFE_RAW|VALIDATE_(REGEXP|BOOLEAN|I(NT|P)|URL|EMAIL|FLOAT)|F(ORCE_ARRAY|LAG_(S(CHEME_REQUIRED|TRIP_(BACKTICK|HIGH|LOW))|HOST_REQUIRED|NO(NE|_(RES_RANGE|PRIV_RANGE|ENCODE_QUOTES))|IPV(4|6)|PATH_REQUIRED|E(MPTY_STRING_NULL|NCODE_(HIGH|LOW|AMP))|QUERY_REQUIRED|ALLOW_(SCIENTIFIC|HEX|THOUSAND|OCTAL|FRACTION))))|E(_(BINARY|SKIP_EMPTY_LINES|NO_DEFAULT_CONTEXT|TEXT|IGNORE_NEW_LINES|USE_INCLUDE_PATH|APPEND)|INFO_(RAW|MIME(_(TYPE|ENCODING))?|SYMLINK|NONE|CONTINUE|DEVICES|PRESERVE_ATIME)))|ORCE_(GZIP|DEFLATE))|LIBXML_(XINCLUDE|N(SCLEAN|O(XMLDECL|BLANKS|NET|CDATA|E(RROR|MPTYTAG|NT)|WARNING))|COMPACT|D(TD(VALID|LOAD|ATTR)|OTTED_VERSION)|PARSEHUGE|ERR_(NONE|ERROR|FATAL|WARNING)|VERSION|LOADED_VERSION))
506 \b
507 </string>
508 <key>name</key>
509 <string>support.constant.ext.php</string>
510 </dict>
511 <dict>
512 <key>captures</key>
513 <dict>
514 <key>1</key>
515 <dict>
516 <key>name</key>
517 <string>punctuation.separator.inheritance.php</string>
518 </dict>
519 </dict>
520 <key>match</key>
521 <string>(\\)?\bT_(RE(TURN|QUIRE(_ONCE)?)|G(OTO|LOBAL)|XOR_EQUAL|M(INUS_EQUAL|OD_EQUAL|UL_EQUAL|ETHOD_C|L_COMMENT)|B(REAK|OOL(_CAST|EAN_(OR|AND))|AD_CHARACTER)|S(R(_EQUAL)?|T(RING(_(CAST|VARNAME))?|A(RT_HEREDOC|TIC))|WITCH|L(_EQUAL)?)|HALT_COMPILER|N(S_(SEPARATOR|C)|UM_STRING|EW|AMESPACE)|C(HARACTER|O(MMENT|N(ST(ANT_ENCAPSED_STRING)?|CAT_EQUAL|TINUE))|URLY_OPEN|L(O(SE_TAG|NE)|ASS(_C)?)|A(SE|TCH))|T(RY|HROW)|I(MPLEMENTS|S(SET|_(GREATER_OR_EQUAL|SMALLER_OR_EQUAL|NOT_(IDENTICAL|EQUAL)|IDENTICAL|EQUAL))|N(STANCEOF|C(LUDE(_ONCE)?)?|T(_CAST|ERFACE)|LINE_HTML)|F)|O(R_EQUAL|BJECT_(CAST|OPERATOR)|PEN_TAG(_WITH_ECHO)?|LD_FUNCTION)|D(NUMBER|I(R|V_EQUAL)|O(C_COMMENT|UBLE_(C(OLON|AST)|ARROW)|LLAR_OPEN_CURLY_BRACES)?|E(C(LARE)?|FAULT))|U(SE|NSET(_CAST)?)|P(R(I(NT|VATE)|OTECTED)|UBLIC|LUS_EQUAL|AAMAYIM_NEKUDOTAYIM)|E(X(TENDS|IT)|MPTY|N(CAPSED_AND_WHITESPACE|D(SWITCH|_HEREDOC|IF|DECLARE|FOR(EACH)?|WHILE))|CHO|VAL|LSE(IF)?)|VAR(IABLE)?|F(I(NAL|LE)|OR(EACH)?|UNC(_C|TION))|WHI(TESPACE|LE)|L(NUMBER|I(ST|NE)|OGICAL_(XOR|OR|AND))|A(RRAY(_CAST)?|BSTRACT|S|ND_EQUAL))\b</string>
522 <key>name</key>
523 <string>support.constant.parser-token.php</string>
524 </dict>
525 <dict>
526 <key>comment</key>
527 <string>In PHP, any identifier which is not a variable is taken to be a constant.
528 However, if there is no constant defined with the given name then a notice
529 is generated and the constant is assumed to have the value of its name.</string>
530 <key>match</key>
531 <string>[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*</string>
532 <key>name</key>
533 <string>constant.other.php</string>
534 </dict>
535 </array>
536 </dict>
537 </array>
538 </dict>
539 <key>function-arguments</key>
540 <dict>
541 <key>patterns</key>
542 <array>
543 <dict>
544 <key>include</key>
545 <string>#comments</string>
546 </dict>
547 <dict>
548 <key>begin</key>
549 <string>(?ix)
550 (?: # Optional
551 (\?)?
552 (?:
553 (array|bool|float|int|string) # scalar-type
554 | (callable|iterable) # base-type-declaration
555 | ([a-z_0-9\\]*[a-z_][a-z_0-9]*)
556 )
557 \s+
558 )?
559 (?:(&amp;)\s*)? # Reference
560 ((\$+)[a-z_\x{7f}-\x{ff}][a-z0-9_\x{7f}-\x{ff}]*) # Variable name
561 </string>
562 <key>beginCaptures</key>
563 <dict>
564 <key>1</key>
565 <dict>
566 <key>name</key>
567 <string>storage.modifier.nullable.php</string>
568 </dict>
569 <key>2</key>
570 <dict>
571 <key>name</key>
572 <string>storage.type.$2.php</string>
573 </dict>
574 <key>3</key>
575 <dict>
576 <key>name</key>
577 <string>storage.modifier.$3.php</string>
578 </dict>
579 <key>4</key>
580 <dict>
581 <key>patterns</key>
582 <array>
583 <dict>
584 <key>include</key>
585 <string>#class-name</string>
586 </dict>
587 </array>
588 </dict>
589 <key>5</key>
590 <dict>
591 <key>name</key>
592 <string>storage.modifier.reference.php</string>
593 </dict>
594 <key>6</key>
595 <dict>
596 <key>name</key>
597 <string>variable.other.php</string>
598 </dict>
599 <key>7</key>
600 <dict>
601 <key>name</key>
602 <string>punctuation.definition.variable.php</string>
603 </dict>
604 </dict>
605 <key>end</key>
606 <string>(?=,|\)|/[/*]|\#)</string>
607 <key>name</key>
608 <string>meta.function.argment.php</string>
609 <key>patterns</key>
610 <array>
611 <dict>
612 <key>begin</key>
613 <string>\s*(=)</string>
614 <key>beginCaptures</key>
615 <dict>
616 <key>1</key>
617 <dict>
618 <key>name</key>
619 <string>keyword.operator.assignment.php</string>
620 </dict>
621 </dict>
622 <key>end</key>
623 <string>(?=,|\)|/[/*]|\#)</string>
624 <key>patterns</key>
625 <array>
626 <dict>
627 <key>include</key>
628 <string>#parameter-default-types</string>
629 </dict>
630 </array>
631 </dict>
632 <dict>
633 <key>match</key>
634 <string>\S</string>
635 <key>name</key>
636 <string>invalid.illegal.character-not-allowed-here.php</string>
637 </dict>
638 </array>
639 </dict>
640 </array>
641 </dict>
642 <key>function-call</key>
643 <dict>
644 <key>patterns</key>
645 <array>
646 <dict>
647 <key>begin</key>
648 <string>(?i)(?=\\?[a-z_0-9\\]+\\[a-z_][a-z0-9_]*\s*\()</string>
649 <key>comment</key>
650 <string>Functions in a user-defined namespace (overrides any built-ins)</string>
651 <key>end</key>
652 <string>(?=\s*\()</string>
653 <key>patterns</key>
654 <array>
655 <dict>
656 <key>include</key>
657 <string>#user-function-call</string>
658 </dict>
659 </array>
660 </dict>
661 <dict>
662 <key>match</key>
663 <string>(?i)\b(print|echo)\b</string>
664 <key>name</key>
665 <string>support.function.construct.php</string>
666 </dict>
667 <dict>
668 <key>begin</key>
669 <string>(?i)(\\)?(?=\b[a-z_][a-z_0-9]*\s*\()</string>
670 <key>beginCaptures</key>
671 <dict>
672 <key>1</key>
673 <dict>
674 <key>name</key>
675 <string>punctuation.separator.inheritance.php</string>
676 </dict>
677 </dict>
678 <key>comment</key>
679 <string>Root namespace function calls (built-in or user)</string>
680 <key>end</key>
681 <string>(?=\s*\()</string>
682 <key>patterns</key>
683 <array>
684 <dict>
685 <key>match</key>
686 <string>(?i)\b(isset|unset|e(val|mpty)|list)(?=\s*\()</string>
687 <key>name</key>
688 <string>support.function.construct.php</string>
689 </dict>
690 <dict>
691 <key>include</key>
692 <string>#support</string>
693 </dict>
694 <dict>
695 <key>include</key>
696 <string>#user-function-call</string>
697 </dict>
698 </array>
699 </dict>
700 </array>
701 </dict>
702 <key>heredoc</key>
703 <dict>
704 <key>patterns</key>
705 <array>
706 <dict>
707 <key>begin</key>
708 <string>(?=&lt;&lt;&lt;\s*("?)([a-zA-Z_]+[a-zA-Z0-9_]*)(\1)\s*$)</string>
709 <key>end</key>
710 <string>(?!\G)</string>
711 <key>injections</key>
712 <dict>
713 <key>*</key>
714 <dict>
715 <key>patterns</key>
716 <array>
717 <dict>
718 <key>include</key>
719 <string>#interpolation</string>
720 </dict>
721 </array>
722 </dict>
723 </dict>
724 <key>name</key>
725 <string>string.unquoted.heredoc.php</string>
726 <key>patterns</key>
727 <array>
728 <dict>
729 <key>include</key>
730 <string>#heredoc_interior</string>
731 </dict>
732 </array>
733 </dict>
734 <dict>
735 <key>begin</key>
736 <string>(?=&lt;&lt;&lt;\s*('?)([a-zA-Z_]+[a-zA-Z0-9_]*)(\1)\s*$)</string>
737 <key>end</key>
738 <string>(?!\G)</string>
739 <key>name</key>
740 <string>string.unquoted.heredoc.nowdoc.php</string>
741 <key>patterns</key>
742 <array>
743 <dict>
744 <key>include</key>
745 <string>#heredoc_interior</string>
746 </dict>
747 </array>
748 </dict>
749 </array>
750 <key>repository</key>
751 <dict>
752 <key>heredoc_interior</key>
753 <dict>
754 <key>patterns</key>
755 <array>
756 <dict>
757 <key>begin</key>
758 <string>(&lt;&lt;&lt;)\s*(['"]?)(HTML)(\2)\s*$\n?</string>
759 <key>beginCaptures</key>
760 <dict>
761 <key>0</key>
762 <dict>
763 <key>name</key>
764 <string>punctuation.section.embedded.begin.php</string>
765 </dict>
766 <key>1</key>
767 <dict>
768 <key>name</key>
769 <string>punctuation.definition.string.php</string>
770 </dict>
771 <key>3</key>
772 <dict>
773 <key>name</key>
774 <string>keyword.operator.heredoc.php</string>
775 </dict>
776 </dict>
777 <key>contentName</key>
778 <string>text.html</string>
779 <key>end</key>
780 <string>^(\3)\b</string>
781 <key>endCaptures</key>
782 <dict>
783 <key>0</key>
784 <dict>
785 <key>name</key>
786 <string>punctuation.section.embedded.end.php</string>
787 </dict>
788 <key>1</key>
789 <dict>
790 <key>name</key>
791 <string>keyword.operator.heredoc.php</string>
792 </dict>
793 </dict>
794 <key>name</key>
795 <string>meta.embedded.html</string>
796 <key>patterns</key>
797 <array>
798 <dict>
799 <key>include</key>
800 <string>text.html.basic</string>
801 </dict>
802 </array>
803 </dict>
804 <dict>
805 <key>begin</key>
806 <string>(&lt;&lt;&lt;)\s*(['"]?)(XML)(\2)\s*$\n?</string>
807 <key>beginCaptures</key>
808 <dict>
809 <key>0</key>
810 <dict>
811 <key>name</key>
812 <string>punctuation.section.embedded.begin.php</string>
813 </dict>
814 <key>1</key>
815 <dict>
816 <key>name</key>
817 <string>punctuation.definition.string.php</string>
818 </dict>
819 <key>3</key>
820 <dict>
821 <key>name</key>
822 <string>keyword.operator.heredoc.php</string>
823 </dict>
824 </dict>
825 <key>contentName</key>
826 <string>text.xml</string>
827 <key>end</key>
828 <string>^(\3)\b</string>
829 <key>endCaptures</key>
830 <dict>
831 <key>0</key>
832 <dict>
833 <key>name</key>
834 <string>punctuation.section.embedded.end.php</string>
835 </dict>
836 <key>1</key>
837 <dict>
838 <key>name</key>
839 <string>keyword.operator.heredoc.php</string>
840 </dict>
841 </dict>
842 <key>name</key>
843 <string>meta.embedded.xml</string>
844 <key>patterns</key>
845 <array>
846 <dict>
847 <key>include</key>
848 <string>text.xml</string>
849 </dict>
850 </array>
851 </dict>
852 <dict>
853 <key>begin</key>
854 <string>(&lt;&lt;&lt;)\s*(['"]?)(SQL)(\2)\s*$\n?</string>
855 <key>beginCaptures</key>
856 <dict>
857 <key>0</key>
858 <dict>
859 <key>name</key>
860 <string>punctuation.section.embedded.begin.php</string>
861 </dict>
862 <key>1</key>
863 <dict>
864 <key>name</key>
865 <string>punctuation.definition.string.php</string>
866 </dict>
867 <key>3</key>
868 <dict>
869 <key>name</key>
870 <string>keyword.operator.heredoc.php</string>
871 </dict>
872 </dict>
873 <key>contentName</key>
874 <string>source.sql</string>
875 <key>end</key>
876 <string>^(\3)\b</string>
877 <key>endCaptures</key>
878 <dict>
879 <key>0</key>
880 <dict>
881 <key>name</key>
882 <string>punctuation.section.embedded.end.php</string>
883 </dict>
884 <key>1</key>
885 <dict>
886 <key>name</key>
887 <string>keyword.operator.heredoc.php</string>
888 </dict>
889 </dict>
890 <key>name</key>
891 <string>meta.embedded.sql</string>
892 <key>patterns</key>
893 <array>
894 <dict>
895 <key>include</key>
896 <string>source.sql</string>
897 </dict>
898 </array>
899 </dict>
900 <dict>
901 <key>begin</key>
902 <string>(&lt;&lt;&lt;)\s*(['"]?)(JAVASCRIPT)(\2)\s*$\n?</string>
903 <key>beginCaptures</key>
904 <dict>
905 <key>0</key>
906 <dict>
907 <key>name</key>
908 <string>punctuation.section.embedded.begin.php</string>
909 </dict>
910 <key>1</key>
911 <dict>
912 <key>name</key>
913 <string>punctuation.definition.string.php</string>
914 </dict>
915 <key>3</key>
916 <dict>
917 <key>name</key>
918 <string>keyword.operator.heredoc.php</string>
919 </dict>
920 </dict>
921 <key>contentName</key>
922 <string>source.js</string>
923 <key>end</key>
924 <string>^(\3)\b</string>
925 <key>endCaptures</key>
926 <dict>
927 <key>0</key>
928 <dict>
929 <key>name</key>
930 <string>punctuation.section.embedded.end.php</string>
931 </dict>
932 <key>1</key>
933 <dict>
934 <key>name</key>
935 <string>keyword.operator.heredoc.php</string>
936 </dict>
937 </dict>
938 <key>name</key>
939 <string>meta.embedded.js</string>
940 <key>patterns</key>
941 <array>
942 <dict>
943 <key>include</key>
944 <string>source.js</string>
945 </dict>
946 </array>
947 </dict>
948 <dict>
949 <key>begin</key>
950 <string>(&lt;&lt;&lt;)\s*(['"]?)(JSON)(\2)\s*$\n?</string>
951 <key>beginCaptures</key>
952 <dict>
953 <key>0</key>
954 <dict>
955 <key>name</key>
956 <string>punctuation.section.embedded.begin.php</string>
957 </dict>
958 <key>1</key>
959 <dict>
960 <key>name</key>
961 <string>punctuation.definition.string.php</string>
962 </dict>
963 <key>3</key>
964 <dict>
965 <key>name</key>
966 <string>keyword.operator.heredoc.php</string>
967 </dict>
968 </dict>
969 <key>contentName</key>
970 <string>source.json</string>
971 <key>end</key>
972 <string>^(\3)\b</string>
973 <key>endCaptures</key>
974 <dict>
975 <key>0</key>
976 <dict>
977 <key>name</key>
978 <string>punctuation.section.embedded.end.php</string>
979 </dict>
980 <key>1</key>
981 <dict>
982 <key>name</key>
983 <string>keyword.operator.heredoc.php</string>
984 </dict>
985 </dict>
986 <key>name</key>
987 <string>meta.embedded.json</string>
988 <key>patterns</key>
989 <array>
990 <dict>
991 <key>include</key>
992 <string>source.json</string>
993 </dict>
994 </array>
995 </dict>
996 <dict>
997 <key>begin</key>
998 <string>(&lt;&lt;&lt;)\s*(['"]?)(CSS)(\2)\s*$\n?</string>
999 <key>beginCaptures</key>
1000 <dict>
1001 <key>0</key>
1002 <dict>
1003 <key>name</key>
1004 <string>punctuation.section.embedded.begin.php</string>
1005 </dict>
1006 <key>1</key>
1007 <dict>
1008 <key>name</key>
1009 <string>punctuation.definition.string.php</string>
1010 </dict>
1011 <key>3</key>
1012 <dict>
1013 <key>name</key>
1014 <string>keyword.operator.heredoc.php</string>
1015 </dict>
1016 </dict>
1017 <key>contentName</key>
1018 <string>source.css</string>
1019 <key>end</key>
1020 <string>^(\3)\b</string>
1021 <key>endCaptures</key>
1022 <dict>
1023 <key>0</key>
1024 <dict>
1025 <key>name</key>
1026 <string>punctuation.section.embedded.end.php</string>
1027 </dict>
1028 <key>1</key>
1029 <dict>
1030 <key>name</key>
1031 <string>keyword.operator.heredoc.php</string>
1032 </dict>
1033 </dict>
1034 <key>name</key>
1035 <string>meta.embedded.css</string>
1036 <key>patterns</key>
1037 <array>
1038 <dict>
1039 <key>include</key>
1040 <string>source.css</string>
1041 </dict>
1042 </array>
1043 </dict>
1044 <dict>
1045 <key>begin</key>
1046 <string>(&lt;&lt;&lt;)\s*(['"]?)(REGEX)(\2)\s*$\n?</string>
1047 <key>beginCaptures</key>
1048 <dict>
1049 <key>0</key>
1050 <dict>
1051 <key>name</key>
1052 <string>punctuation.section.embedded.begin.php</string>
1053 </dict>
1054 <key>1</key>
1055 <dict>
1056 <key>name</key>
1057 <string>punctuation.definition.string.php</string>
1058 </dict>
1059 <key>3</key>
1060 <dict>
1061 <key>name</key>
1062 <string>keyword.operator.heredoc.php</string>
1063 </dict>
1064 </dict>
1065 <key>contentName</key>
1066 <string>string.regexp.heredoc.php</string>
1067 <key>end</key>
1068 <string>^(\3)\b</string>
1069 <key>endCaptures</key>
1070 <dict>
1071 <key>0</key>
1072 <dict>
1073 <key>name</key>
1074 <string>punctuation.section.embedded.end.php</string>
1075 </dict>
1076 <key>1</key>
1077 <dict>
1078 <key>name</key>
1079 <string>keyword.operator.heredoc.php</string>
1080 </dict>
1081 </dict>
1082 <key>patterns</key>
1083 <array>
1084 <dict>
1085 <key>comment</key>
1086 <string>Escaped from the regexp – there can also be 2 backslashes (since 1 will escape the first)</string>
1087 <key>match</key>
1088 <string>(\\){1,2}[.$^\[\]{}]</string>
1089 <key>name</key>
1090 <string>constant.character.escape.regex.php</string>
1091 </dict>
1092 <dict>
1093 <key>captures</key>
1094 <dict>
1095 <key>1</key>
1096 <dict>
1097 <key>name</key>
1098 <string>punctuation.definition.arbitrary-repitition.php</string>
1099 </dict>
1100 <key>3</key>
1101 <dict>
1102 <key>name</key>
1103 <string>punctuation.definition.arbitrary-repitition.php</string>
1104 </dict>
1105 </dict>
1106 <key>match</key>
1107 <string>(\{)\d+(,\d+)?(\})</string>
1108 <key>name</key>
1109 <string>string.regexp.arbitrary-repitition.php</string>
1110 </dict>
1111 <dict>
1112 <key>begin</key>
1113 <string>\[(?:\^?\])?</string>
1114 <key>captures</key>
1115 <dict>
1116 <key>0</key>
1117 <dict>
1118 <key>name</key>
1119 <string>punctuation.definition.character-class.php</string>
1120 </dict>
1121 </dict>
1122 <key>end</key>
1123 <string>\]</string>
1124 <key>name</key>
1125 <string>string.regexp.character-class.php</string>
1126 <key>patterns</key>
1127 <array>
1128 <dict>
1129 <key>match</key>
1130 <string>\\[\\'\[\]]</string>
1131 <key>name</key>
1132 <string>constant.character.escape.php</string>
1133 </dict>
1134 </array>
1135 </dict>
1136 <dict>
1137 <key>match</key>
1138 <string>[$^+*]</string>
1139 <key>name</key>
1140 <string>keyword.operator.regexp.php</string>
1141 </dict>
1142 <dict>
1143 <key>begin</key>
1144 <string>(?&lt;=^|\s)(#)\s(?=[[a-zA-Z0-9,. \t?!-][^\x{00}-\x{7F}]]*$)</string>
1145 <key>beginCaptures</key>
1146 <dict>
1147 <key>1</key>
1148 <dict>
1149 <key>name</key>
1150 <string>punctuation.definition.comment.php</string>
1151 </dict>
1152 </dict>
1153 <key>comment</key>
1154 <string>We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.</string>
1155 <key>end</key>
1156 <string>$\n?</string>
1157 <key>endCaptures</key>
1158 <dict>
1159 <key>0</key>
1160 <dict>
1161 <key>name</key>
1162 <string>punctuation.definition.comment.php</string>
1163 </dict>
1164 </dict>
1165 <key>name</key>
1166 <string>comment.line.number-sign.php</string>
1167 </dict>
1168 </array>
1169 </dict>
1170 <dict>
1171 <key>begin</key>
1172 <string>(&lt;&lt;&lt;)\s*(['"]?)([a-zA-Z_]+[a-zA-Z0-9_]*)(\2)</string>
1173 <key>beginCaptures</key>
1174 <dict>
1175 <key>1</key>
1176 <dict>
1177 <key>name</key>
1178 <string>punctuation.definition.string.php</string>
1179 </dict>
1180 <key>3</key>
1181 <dict>
1182 <key>name</key>
1183 <string>keyword.operator.heredoc.php</string>
1184 </dict>
1185 </dict>
1186 <key>end</key>
1187 <string>^(\3)\b</string>
1188 <key>endCaptures</key>
1189 <dict>
1190 <key>1</key>
1191 <dict>
1192 <key>name</key>
1193 <string>keyword.operator.heredoc.php</string>
1194 </dict>
1195 </dict>
1196 </dict>
1197 </array>
1198 </dict>
1199 </dict>
1200 </dict>
1201 <key>instantiation</key>
1202 <dict>
1203 <key>begin</key>
1204 <string>(?i)(new)\s+</string>
1205 <key>beginCaptures</key>
1206 <dict>
1207 <key>1</key>
1208 <dict>
1209 <key>name</key>
1210 <string>keyword.other.new.php</string>
1211 </dict>
1212 </dict>
1213 <key>end</key>
1214 <string>(?i)(?=[^$a-z0-9_\\])</string>
1215 <key>patterns</key>
1216 <array>
1217 <dict>
1218 <key>match</key>
1219 <string>(parent|static|self)(?=[^a-z0-9_])</string>
1220 <key>name</key>
1221 <string>storage.type.php</string>
1222 </dict>
1223 <dict>
1224 <key>include</key>
1225 <string>#class-name</string>
1226 </dict>
1227 <dict>
1228 <key>include</key>
1229 <string>#variable-name</string>
1230 </dict>
1231 </array>
1232 </dict>
1233 <key>interpolation</key>
1234 <dict>
1235 <key>comment</key>
1236 <string>http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing</string>
1237 <key>patterns</key>
1238 <array>
1239 <dict>
1240 <key>match</key>
1241 <string>\\[0-7]{1,3}</string>
1242 <key>name</key>
1243 <string>constant.numeric.octal.php</string>
1244 </dict>
1245 <dict>
1246 <key>match</key>
1247 <string>\\x[0-9A-Fa-f]{1,2}</string>
1248 <key>name</key>
1249 <string>constant.numeric.hex.php</string>
1250 </dict>
1251 <dict>
1252 <key>match</key>
1253 <string>\\[enrt\\\$\"]</string>
1254 <key>name</key>
1255 <string>constant.character.escape.php</string>
1256 </dict>
1257 <dict>
1258 <key>begin</key>
1259 <string>(\{)(?=\$.*?\})</string>
1260 <key>beginCaptures</key>
1261 <dict>
1262 <key>1</key>
1263 <dict>
1264 <key>name</key>
1265 <string>punctuation.definition.variable.php</string>
1266 </dict>
1267 </dict>
1268 <key>end</key>
1269 <string>(\})</string>
1270 <key>endCaptures</key>
1271 <dict>
1272 <key>1</key>
1273 <dict>
1274 <key>name</key>
1275 <string>punctuation.definition.variable.php</string>
1276 </dict>
1277 </dict>
1278 <key>patterns</key>
1279 <array>
1280 <dict>
1281 <key>include</key>
1282 <string>#language</string>
1283 </dict>
1284 </array>
1285 </dict>
1286 <dict>
1287 <key>include</key>
1288 <string>#variable-name</string>
1289 </dict>
1290 </array>
1291 </dict>
1292 <key>invoke-call</key>
1293 <dict>
1294 <key>captures</key>
1295 <dict>
1296 <key>1</key>
1297 <dict>
1298 <key>name</key>
1299 <string>punctuation.definition.variable.php</string>
1300 </dict>
1301 <key>2</key>
1302 <dict>
1303 <key>name</key>
1304 <string>variable.other.php</string>
1305 </dict>
1306 </dict>
1307 <key>match</key>
1308 <string>(?i)(\$+)([a-z_][a-z_0-9]*)(?=\s*\()</string>
1309 <key>name</key>
1310 <string>meta.function-call.invoke.php</string>
1311 </dict>
1312 <key>language</key>
1313 <dict>
1314 <key>patterns</key>
1315 <array>
1316 <dict>
1317 <key>include</key>
1318 <string>#comments</string>
1319 </dict>
1320 <dict>
1321 <key>match</key>
1322 <string>\{</string>
1323 <key>name</key>
1324 <string>punctuation.section.scope.begin.php</string>
1325 </dict>
1326 <dict>
1327 <key>match</key>
1328 <string>\}</string>
1329 <key>name</key>
1330 <string>punctuation.section.scope.end.php</string>
1331 </dict>
1332 <dict>
1333 <key>begin</key>
1334 <string>(?i)^\s*(interface)\s+([a-z0-9_]+)\s*(extends)?\s*</string>
1335 <key>beginCaptures</key>
1336 <dict>
1337 <key>1</key>
1338 <dict>
1339 <key>name</key>
1340 <string>storage.type.interface.php</string>
1341 </dict>
1342 <key>2</key>
1343 <dict>
1344 <key>name</key>
1345 <string>entity.name.type.interface.php</string>
1346 </dict>
1347 <key>3</key>
1348 <dict>
1349 <key>name</key>
1350 <string>storage.modifier.extends.php</string>
1351 </dict>
1352 </dict>
1353 <key>end</key>
1354 <string>((?:[a-zA-Z0-9_]+\s*,\s*)*)([a-zA-Z0-9_]+)?\s*(?:(?=\{)|$)</string>
1355 <key>endCaptures</key>
1356 <dict>
1357 <key>1</key>
1358 <dict>
1359 <key>patterns</key>
1360 <array>
1361 <dict>
1362 <key>match</key>
1363 <string>[a-zA-Z0-9_]+</string>
1364 <key>name</key>
1365 <string>entity.other.inherited-class.php</string>
1366 </dict>
1367 <dict>
1368 <key>match</key>
1369 <string>,</string>
1370 <key>name</key>
1371 <string>punctuation.separator.classes.php</string>
1372 </dict>
1373 </array>
1374 </dict>
1375 <key>2</key>
1376 <dict>
1377 <key>name</key>
1378 <string>entity.other.inherited-class.php</string>
1379 </dict>
1380 </dict>
1381 <key>name</key>
1382 <string>meta.interface.php</string>
1383 <key>patterns</key>
1384 <array>
1385 <dict>
1386 <key>include</key>
1387 <string>#namespace</string>
1388 </dict>
1389 </array>
1390 </dict>
1391 <dict>
1392 <key>begin</key>
1393 <string>(?i)(?:^|(?&lt;=&lt;\?php))\s*(namespace)\b\s+(?=([a-z0-9_\\]+\s*($|[;{]|(\/[\/*])))|$)</string>
1394 <key>beginCaptures</key>
1395 <dict>
1396 <key>1</key>
1397 <dict>
1398 <key>name</key>
1399 <string>keyword.other.namespace.php</string>
1400 </dict>
1401 </dict>
1402 <key>contentName</key>
1403 <string>entity.name.type.namespace.php</string>
1404 <key>end</key>
1405 <string>(?i)(?=\s*$|[^a-z0-9_\\])</string>
1406 <key>name</key>
1407 <string>meta.namespace.php</string>
1408 <key>patterns</key>
1409 <array>
1410 <dict>
1411 <key>match</key>
1412 <string>\\</string>
1413 <key>name</key>
1414 <string>punctuation.separator.inheritance.php</string>
1415 </dict>
1416 </array>
1417 </dict>
1418 <dict>
1419 <key>begin</key>
1420 <string>(?i)\s*\b(use)\s+(?:((const)|(function))\s+)?</string>
1421 <key>beginCaptures</key>
1422 <dict>
1423 <key>1</key>
1424 <dict>
1425 <key>name</key>
1426 <string>keyword.other.use.php</string>
1427 </dict>
1428 <key>3</key>
1429 <dict>
1430 <key>name</key>
1431 <string>storage.type.const.php</string>
1432 </dict>
1433 <key>4</key>
1434 <dict>
1435 <key>name</key>
1436 <string>storage.type.function.php</string>
1437 </dict>
1438 </dict>
1439 <key>end</key>
1440 <string>(?=;|(?:^\s*$))</string>
1441 <key>name</key>
1442 <string>meta.use.php</string>
1443 <key>patterns</key>
1444 <array>
1445 <dict>
1446 <key>include</key>
1447 <string>#comments</string>
1448 </dict>
1449 <dict>
1450 <key>begin</key>
1451 <string>(?i)\s*(?=[a-z_0-9\\])</string>
1452 <key>end</key>
1453 <string>(?xi)(?:
1454 (?:\s*(as)\b\s*([a-z_0-9]*)\s*(?=,|;|$))
1455 |(?=,|;|$)
1456 )</string>
1457 <key>endCaptures</key>
1458 <dict>
1459 <key>1</key>
1460 <dict>
1461 <key>name</key>
1462 <string>keyword.other.use-as.php</string>
1463 </dict>
1464 <key>2</key>
1465 <dict>
1466 <key>name</key>
1467 <string>support.other.namespace.use-as.php</string>
1468 </dict>
1469 </dict>
1470 <key>patterns</key>
1471 <array>
1472 <dict>
1473 <key>include</key>
1474 <string>#class-builtin</string>
1475 </dict>
1476 <dict>
1477 <key>begin</key>
1478 <string>(?i)\s*(?=[\\a-z_0-9])</string>
1479 <key>end</key>
1480 <string>$|(?=[\s,;])</string>
1481 <key>name</key>
1482 <string>support.other.namespace.use.php</string>
1483 <key>patterns</key>
1484 <array>
1485 <dict>
1486 <key>match</key>
1487 <string>\\</string>
1488 <key>name</key>
1489 <string>punctuation.separator.inheritance.php</string>
1490 </dict>
1491 </array>
1492 </dict>
1493 </array>
1494 </dict>
1495 <dict>
1496 <key>match</key>
1497 <string>\s*,\s*</string>
1498 </dict>
1499 </array>
1500 </dict>
1501 <dict>
1502 <key>begin</key>
1503 <string>(?i)^\s*(trait)\s+([a-zA-Z0-9_]+)</string>
1504 <key>beginCaptures</key>
1505 <dict>
1506 <key>1</key>
1507 <dict>
1508 <key>name</key>
1509 <string>storage.type.trait.php</string>
1510 </dict>
1511 <key>2</key>
1512 <dict>
1513 <key>name</key>
1514 <string>entity.name.type.trait.php</string>
1515 </dict>
1516 </dict>
1517 <key>end</key>
1518 <string>(?=\{)</string>
1519 <key>name</key>
1520 <string>meta.trait.php</string>
1521 </dict>
1522 <dict>
1523 <key>begin</key>
1524 <string>(?i)^\s*(abstract|final)?\s*(class)\s+([a-z0-9_]+)\s*</string>
1525 <key>beginCaptures</key>
1526 <dict>
1527 <key>1</key>
1528 <dict>
1529 <key>name</key>
1530 <string>storage.modifier.abstract.php</string>
1531 </dict>
1532 <key>2</key>
1533 <dict>
1534 <key>name</key>
1535 <string>storage.type.class.php</string>
1536 </dict>
1537 <key>3</key>
1538 <dict>
1539 <key>name</key>
1540 <string>entity.name.type.class.php</string>
1541 </dict>
1542 </dict>
1543 <key>end</key>
1544 <string>(?=[;{])</string>
1545 <key>name</key>
1546 <string>meta.class.php</string>
1547 <key>patterns</key>
1548 <array>
1549 <dict>
1550 <key>include</key>
1551 <string>#comments</string>
1552 </dict>
1553 <dict>
1554 <key>begin</key>
1555 <string>(?i)(extends)\s+</string>
1556 <key>beginCaptures</key>
1557 <dict>
1558 <key>1</key>
1559 <dict>
1560 <key>name</key>
1561 <string>storage.modifier.extends.php</string>
1562 </dict>
1563 </dict>
1564 <key>contentName</key>
1565 <string>meta.other.inherited-class.php</string>
1566 <key>end</key>
1567 <string>(?i)(?=[^a-z_0-9\\])</string>
1568 <key>patterns</key>
1569 <array>
1570 <dict>
1571 <key>begin</key>
1572 <string>(?i)(?=\\?[a-z_0-9]+\\)</string>
1573 <key>end</key>
1574 <string>(?i)([a-z_][a-z_0-9]*)?(?=[^a-z0-9_\\])</string>
1575 <key>endCaptures</key>
1576 <dict>
1577 <key>1</key>
1578 <dict>
1579 <key>name</key>
1580 <string>entity.other.inherited-class.php</string>
1581 </dict>
1582 </dict>
1583 <key>patterns</key>
1584 <array>
1585 <dict>
1586 <key>include</key>
1587 <string>#namespace</string>
1588 </dict>
1589 </array>
1590 </dict>
1591 <dict>
1592 <key>include</key>
1593 <string>#class-builtin</string>
1594 </dict>
1595 <dict>
1596 <key>include</key>
1597 <string>#namespace</string>
1598 </dict>
1599 <dict>
1600 <key>match</key>
1601 <string>(?i)[a-z_][a-z_0-9]*</string>
1602 <key>name</key>
1603 <string>entity.other.inherited-class.php</string>
1604 </dict>
1605 </array>
1606 </dict>
1607 <dict>
1608 <key>begin</key>
1609 <string>(?i)(implements)\s+</string>
1610 <key>beginCaptures</key>
1611 <dict>
1612 <key>1</key>
1613 <dict>
1614 <key>name</key>
1615 <string>storage.modifier.implements.php</string>
1616 </dict>
1617 </dict>
1618 <key>end</key>
1619 <string>(?i)(?=[;{])</string>
1620 <key>patterns</key>
1621 <array>
1622 <dict>
1623 <key>include</key>
1624 <string>#comments</string>
1625 </dict>
1626 <dict>
1627 <key>begin</key>
1628 <string>(?i)(?=[a-z0-9_\\]+)</string>
1629 <key>contentName</key>
1630 <string>meta.other.inherited-class.php</string>
1631 <key>end</key>
1632 <string>(?i)(?:\s*(?:,|(?=[^a-z0-9_\\\s]))\s*)</string>
1633 <key>patterns</key>
1634 <array>
1635 <dict>
1636 <key>begin</key>
1637 <string>(?i)(?=\\?[a-z_0-9]+\\)</string>
1638 <key>end</key>
1639 <string>(?i)([a-z_][a-z_0-9]*)?(?=[^a-z0-9_\\])</string>
1640 <key>endCaptures</key>
1641 <dict>
1642 <key>1</key>
1643 <dict>
1644 <key>name</key>
1645 <string>entity.other.inherited-class.php</string>
1646 </dict>
1647 </dict>
1648 <key>patterns</key>
1649 <array>
1650 <dict>
1651 <key>include</key>
1652 <string>#namespace</string>
1653 </dict>
1654 </array>
1655 </dict>
1656 <dict>
1657 <key>include</key>
1658 <string>#class-builtin</string>
1659 </dict>
1660 <dict>
1661 <key>include</key>
1662 <string>#namespace</string>
1663 </dict>
1664 <dict>
1665 <key>match</key>
1666 <string>(?i)[a-z_][a-z_0-9]*</string>
1667 <key>name</key>
1668 <string>entity.other.inherited-class.php</string>
1669 </dict>
1670 </array>
1671 </dict>
1672 </array>
1673 </dict>
1674 </array>
1675 </dict>
1676 <dict>
1677 <key>captures</key>
1678 <dict>
1679 <key>1</key>
1680 <dict>
1681 <key>name</key>
1682 <string>keyword.control.php</string>
1683 </dict>
1684 </dict>
1685 <key>match</key>
1686 <string>\s*\b((break|c(ase|ontinue)|d(e(clare|fault)|ie|o)|e(lse(if)?|nd(declare|for(each)?|if|switch|while)|xit)|for(each)?|if|return|switch|use|while|yield))\b</string>
1687 </dict>
1688 <dict>
1689 <key>begin</key>
1690 <string>(?i)\b((?:require|include)(?:_once)?)\b\s*</string>
1691 <key>beginCaptures</key>
1692 <dict>
1693 <key>1</key>
1694 <dict>
1695 <key>name</key>
1696 <string>keyword.control.import.include.php</string>
1697 </dict>
1698 </dict>
1699 <key>end</key>
1700 <string>(?=\s|;|$)</string>
1701 <key>name</key>
1702 <string>meta.include.php</string>
1703 <key>patterns</key>
1704 <array>
1705 <dict>
1706 <key>include</key>
1707 <string>#language</string>
1708 </dict>
1709 </array>
1710 </dict>
1711 <dict>
1712 <key>begin</key>
1713 <string>\b(catch)\b\s*\(\s*</string>
1714 <key>beginCaptures</key>
1715 <dict>
1716 <key>1</key>
1717 <dict>
1718 <key>name</key>
1719 <string>keyword.control.exception.catch.php</string>
1720 </dict>
1721 </dict>
1722 <key>end</key>
1723 <string>([A-Za-z_][A-Za-z_0-9]*)\s*((\$+)[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)\s*\)</string>
1724 <key>endCaptures</key>
1725 <dict>
1726 <key>1</key>
1727 <dict>
1728 <key>name</key>
1729 <string>support.class.exception.php</string>
1730 </dict>
1731 <key>2</key>
1732 <dict>
1733 <key>name</key>
1734 <string>variable.other.php</string>
1735 </dict>
1736 <key>3</key>
1737 <dict>
1738 <key>name</key>
1739 <string>punctuation.definition.variable.php</string>
1740 </dict>
1741 </dict>
1742 <key>name</key>
1743 <string>meta.catch.php</string>
1744 <key>patterns</key>
1745 <array>
1746 <dict>
1747 <key>include</key>
1748 <string>#namespace</string>
1749 </dict>
1750 </array>
1751 </dict>
1752 <dict>
1753 <key>match</key>
1754 <string>\b(catch|try|throw|exception|finally)\b</string>
1755 <key>name</key>
1756 <string>keyword.control.exception.php</string>
1757 </dict>
1758 <dict>
1759 <key>begin</key>
1760 <string>(?i)\b(function)\s*(&amp;\s*)?(?=\()</string>
1761 <key>beginCaptures</key>
1762 <dict>
1763 <key>1</key>
1764 <dict>
1765 <key>name</key>
1766 <string>storage.type.function.php</string>
1767 </dict>
1768 <key>2</key>
1769 <dict>
1770 <key>name</key>
1771 <string>storage.modifier.reference.php</string>
1772 </dict>
1773 </dict>
1774 <key>end</key>
1775 <string>\{</string>
1776 <key>name</key>
1777 <string>meta.function.closure.php</string>
1778 <key>patterns</key>
1779 <array>
1780 <dict>
1781 <key>begin</key>
1782 <string>(\()</string>
1783 <key>beginCaptures</key>
1784 <dict>
1785 <key>1</key>
1786 <dict>
1787 <key>name</key>
1788 <string>punctuation.definition.parameters.begin.php</string>
1789 </dict>
1790 </dict>
1791 <key>contentName</key>
1792 <string>meta.function.arguments.php</string>
1793 <key>end</key>
1794 <string>(\))</string>
1795 <key>endCaptures</key>
1796 <dict>
1797 <key>1</key>
1798 <dict>
1799 <key>name</key>
1800 <string>punctuation.definition.parameters.end.php</string>
1801 </dict>
1802 </dict>
1803 <key>patterns</key>
1804 <array>
1805 <dict>
1806 <key>include</key>
1807 <string>#function-arguments</string>
1808 </dict>
1809 </array>
1810 </dict>
1811 <dict>
1812 <key>begin</key>
1813 <string>(?i)(use)\s*(\()</string>
1814 <key>beginCaptures</key>
1815 <dict>
1816 <key>1</key>
1817 <dict>
1818 <key>name</key>
1819 <string>keyword.other.function.use.php</string>
1820 </dict>
1821 <key>2</key>
1822 <dict>
1823 <key>name</key>
1824 <string>punctuation.definition.parameters.begin.php</string>
1825 </dict>
1826 </dict>
1827 <key>end</key>
1828 <string>(\))</string>
1829 <key>endCaptures</key>
1830 <dict>
1831 <key>1</key>
1832 <dict>
1833 <key>name</key>
1834 <string>punctuation.definition.parameters.end.php</string>
1835 </dict>
1836 </dict>
1837 <key>patterns</key>
1838 <array>
1839 <dict>
1840 <key>captures</key>
1841 <dict>
1842 <key>1</key>
1843 <dict>
1844 <key>name</key>
1845 <string>storage.modifier.reference.php</string>
1846 </dict>
1847 <key>2</key>
1848 <dict>
1849 <key>name</key>
1850 <string>variable.other.php</string>
1851 </dict>
1852 <key>3</key>
1853 <dict>
1854 <key>name</key>
1855 <string>punctuation.definition.variable.php</string>
1856 </dict>
1857 </dict>
1858 <key>match</key>
1859 <string>(?:\s*(&amp;))?\s*((\$+)[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)\s*(?=,|\))</string>
1860 <key>name</key>
1861 <string>meta.function.closure.use.php</string>
1862 </dict>
1863 </array>
1864 </dict>
1865 </array>
1866 </dict>
1867 <dict>
1868 <key>begin</key>
1869 <string>(?x)\s*
1870 ((?:(?:final|abstract|public|private|protected|static)\s+)*)
1871 (function)
1872 (?:\s+|(\s*&amp;\s*))
1873 (?:
1874 (__(?:call|construct|debugInfo|destruct|get|set|isset|unset|tostring|clone|set_state|sleep|wakeup|autoload|invoke|callStatic))
1875 |([a-zA-Z0-9_]+)
1876 )
1877 \s*
1878 (\()</string>
1879 <key>beginCaptures</key>
1880 <dict>
1881 <key>1</key>
1882 <dict>
1883 <key>patterns</key>
1884 <array>
1885 <dict>
1886 <key>match</key>
1887 <string>final|abstract|public|private|protected|static</string>
1888 <key>name</key>
1889 <string>storage.modifier.php</string>
1890 </dict>
1891 </array>
1892 </dict>
1893 <key>2</key>
1894 <dict>
1895 <key>name</key>
1896 <string>storage.type.function.php</string>
1897 </dict>
1898 <key>3</key>
1899 <dict>
1900 <key>name</key>
1901 <string>storage.modifier.reference.php</string>
1902 </dict>
1903 <key>4</key>
1904 <dict>
1905 <key>name</key>
1906 <string>support.function.magic.php</string>
1907 </dict>
1908 <key>5</key>
1909 <dict>
1910 <key>name</key>
1911 <string>entity.name.function.php</string>
1912 </dict>
1913 <key>6</key>
1914 <dict>
1915 <key>name</key>
1916 <string>punctuation.definition.parameters.begin.php</string>
1917 </dict>
1918 </dict>
1919 <key>contentName</key>
1920 <string>meta.function.arguments.php</string>
1921 <key>end</key>
1922 <string>(?ix)
1923 (\)) # Close arguments
1924 (?: # Optional return type
1925 \s*(:)\s*
1926 (\?)?
1927 (?:
1928 (array|bool|float|int|string) # scalar-type
1929 | (callable|iterable) # base-type-declaration
1930 | (void)
1931 | ([a-z_0-9\\]*[a-z_][a-z_0-9]*) # qualified-name
1932 )
1933 )?
1934 </string>
1935 <key>endCaptures</key>
1936 <dict>
1937 <key>1</key>
1938 <dict>
1939 <key>name</key>
1940 <string>punctuation.definition.parameters.end.php</string>
1941 </dict>
1942 <key>2</key>
1943 <dict>
1944 <key>name</key>
1945 <string>punctuation.separator.return-type.php</string>
1946 </dict>
1947 <key>3</key>
1948 <dict>
1949 <key>name</key>
1950 <string>storage.modifier.nullable.php</string>
1951 </dict>
1952 <key>4</key>
1953 <dict>
1954 <key>name</key>
1955 <string>storage.type.$4.php</string>
1956 </dict>
1957 <key>5</key>
1958 <dict>
1959 <key>name</key>
1960 <string>storage.modifier.$5.php</string>
1961 </dict>
1962 <key>6</key>
1963 <dict>
1964 <key>name</key>
1965 <string>storage.type.void.php</string>
1966 </dict>
1967 <key>7</key>
1968 <dict>
1969 <key>patterns</key>
1970 <array>
1971 <dict>
1972 <key>include</key>
1973 <string>#class-name</string>
1974 </dict>
1975 </array>
1976 </dict>
1977 </dict>
1978 <key>name</key>
1979 <string>meta.function.php</string>
1980 <key>patterns</key>
1981 <array>
1982 <dict>
1983 <key>include</key>
1984 <string>#function-arguments</string>
1985 </dict>
1986 </array>
1987 </dict>
1988 <dict>
1989 <key>include</key>
1990 <string>#invoke-call</string>
1991 </dict>
1992 <dict>
1993 <key>begin</key>
1994 <string>(?xi)\s*(?=
1995 [a-z_0-9$\\]+(::)
1996 (?:
1997 ([a-z_][a-z_0-9]*)\s*\(
1998 |
1999 ((\$+)[a-z_\x{7f}-\x{ff}][a-z0-9_\x{7f}-\x{ff}]*)
2000 |
2001 ([a-z_\x{7f}-\x{ff}][a-z0-9_\x{7f}-\x{ff}]*)
2002 )?
2003 )</string>
2004 <key>end</key>
2005 <string>(?x)(::)
2006 (?:
2007 ([A-Za-z_][A-Za-z_0-9]*)\s*\(
2008 |
2009 ((\$+)[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)
2010 |
2011 ([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)
2012 )?</string>
2013 <key>endCaptures</key>
2014 <dict>
2015 <key>1</key>
2016 <dict>
2017 <key>name</key>
2018 <string>keyword.operator.class.php</string>
2019 </dict>
2020 <key>2</key>
2021 <dict>
2022 <key>name</key>
2023 <string>meta.function-call.static.php</string>
2024 </dict>
2025 <key>3</key>
2026 <dict>
2027 <key>name</key>
2028 <string>variable.other.class.php</string>
2029 </dict>
2030 <key>4</key>
2031 <dict>
2032 <key>name</key>
2033 <string>punctuation.definition.variable.php</string>
2034 </dict>
2035 <key>5</key>
2036 <dict>
2037 <key>name</key>
2038 <string>constant.other.class.php</string>
2039 </dict>
2040 </dict>
2041 <key>patterns</key>
2042 <array>
2043 <dict>
2044 <key>match</key>
2045 <string>(self|static|parent)\b</string>
2046 <key>name</key>
2047 <string>storage.type.php</string>
2048 </dict>
2049 <dict>
2050 <key>include</key>
2051 <string>#class-name</string>
2052 </dict>
2053 <dict>
2054 <key>include</key>
2055 <string>#variable-name</string>
2056 </dict>
2057 </array>
2058 </dict>
2059 <dict>
2060 <key>include</key>
2061 <string>#variables</string>
2062 </dict>
2063 <dict>
2064 <key>include</key>
2065 <string>#strings</string>
2066 </dict>
2067 <dict>
2068 <key>captures</key>
2069 <dict>
2070 <key>1</key>
2071 <dict>
2072 <key>name</key>
2073 <string>support.function.construct.php</string>
2074 </dict>
2075 <key>2</key>
2076 <dict>
2077 <key>name</key>
2078 <string>punctuation.definition.array.begin.php</string>
2079 </dict>
2080 <key>3</key>
2081 <dict>
2082 <key>name</key>
2083 <string>punctuation.definition.array.end.php</string>
2084 </dict>
2085 </dict>
2086 <key>match</key>
2087 <string>(array)(\()(\))</string>
2088 <key>name</key>
2089 <string>meta.array.empty.php</string>
2090 </dict>
2091 <dict>
2092 <key>begin</key>
2093 <string>(array)(\()</string>
2094 <key>beginCaptures</key>
2095 <dict>
2096 <key>1</key>
2097 <dict>
2098 <key>name</key>
2099 <string>support.function.construct.php</string>
2100 </dict>
2101 <key>2</key>
2102 <dict>
2103 <key>name</key>
2104 <string>punctuation.definition.array.begin.php</string>
2105 </dict>
2106 </dict>
2107 <key>end</key>
2108 <string>\)</string>
2109 <key>endCaptures</key>
2110 <dict>
2111 <key>0</key>
2112 <dict>
2113 <key>name</key>
2114 <string>punctuation.definition.array.end.php</string>
2115 </dict>
2116 </dict>
2117 <key>name</key>
2118 <string>meta.array.php</string>
2119 <key>patterns</key>
2120 <array>
2121 <dict>
2122 <key>include</key>
2123 <string>#language</string>
2124 </dict>
2125 </array>
2126 </dict>
2127 <dict>
2128 <key>captures</key>
2129 <dict>
2130 <key>1</key>
2131 <dict>
2132 <key>name</key>
2133 <string>storage.type.php</string>
2134 </dict>
2135 </dict>
2136 <key>match</key>
2137 <string>(?i)\s*\(\s*(array|real|double|float|int(eger)?|bool(ean)?|string|object|binary|unset)\s*\)</string>
2138 </dict>
2139 <dict>
2140 <key>match</key>
2141 <string>(?i)\b(array|real|double|float|int(eger)?|bool(ean)?|string|class|clone|var|function|interface|parent|self|object)\b</string>
2142 <key>name</key>
2143 <string>storage.type.php</string>
2144 </dict>
2145 <dict>
2146 <key>match</key>
2147 <string>(?i)\b(global|abstract|const|extends|implements|final|p(r(ivate|otected)|ublic)|static)\b</string>
2148 <key>name</key>
2149 <string>storage.modifier.php</string>
2150 </dict>
2151 <dict>
2152 <key>include</key>
2153 <string>#object</string>
2154 </dict>
2155 <dict>
2156 <key>match</key>
2157 <string>;</string>
2158 <key>name</key>
2159 <string>punctuation.terminator.expression.php</string>
2160 </dict>
2161 <dict>
2162 <key>include</key>
2163 <string>#heredoc</string>
2164 </dict>
2165 <dict>
2166 <key>match</key>
2167 <string>\.=?</string>
2168 <key>name</key>
2169 <string>keyword.operator.string.php</string>
2170 </dict>
2171 <dict>
2172 <key>match</key>
2173 <string>=&gt;</string>
2174 <key>name</key>
2175 <string>keyword.operator.key.php</string>
2176 </dict>
2177 <dict>
2178 <key>captures</key>
2179 <dict>
2180 <key>1</key>
2181 <dict>
2182 <key>name</key>
2183 <string>keyword.operator.assignment.php</string>
2184 </dict>
2185 <key>2</key>
2186 <dict>
2187 <key>name</key>
2188 <string>storage.modifier.reference.php</string>
2189 </dict>
2190 <key>3</key>
2191 <dict>
2192 <key>name</key>
2193 <string>storage.modifier.reference.php</string>
2194 </dict>
2195 </dict>
2196 <key>match</key>
2197 <string>(?:(\=)(&amp;))|(&amp;(?=[$A-Za-z_]))</string>
2198 </dict>
2199 <dict>
2200 <key>match</key>
2201 <string>(@)</string>
2202 <key>name</key>
2203 <string>keyword.operator.error-control.php</string>
2204 </dict>
2205 <dict>
2206 <key>match</key>
2207 <string>(\-\-|\+\+)</string>
2208 <key>name</key>
2209 <string>keyword.operator.increment-decrement.php</string>
2210 </dict>
2211 <dict>
2212 <key>match</key>
2213 <string>(\-|\+|\*|/|%)</string>
2214 <key>name</key>
2215 <string>keyword.operator.arithmetic.php</string>
2216 </dict>
2217 <dict>
2218 <key>match</key>
2219 <string>(?i)(!|&amp;&amp;|\|\|)|\b(and|or|xor|as)\b</string>
2220 <key>name</key>
2221 <string>keyword.operator.logical.php</string>
2222 </dict>
2223 <dict>
2224 <key>include</key>
2225 <string>#function-call</string>
2226 </dict>
2227 <dict>
2228 <key>match</key>
2229 <string>&lt;&lt;|&gt;&gt;|~|\^|&amp;|\|</string>
2230 <key>name</key>
2231 <string>keyword.operator.bitwise.php</string>
2232 </dict>
2233 <dict>
2234 <key>match</key>
2235 <string>(===|==|!==|!=|&lt;=|&gt;=|&lt;&gt;|&lt;|&gt;)</string>
2236 <key>name</key>
2237 <string>keyword.operator.comparison.php</string>
2238 </dict>
2239 <dict>
2240 <key>match</key>
2241 <string>=</string>
2242 <key>name</key>
2243 <string>keyword.operator.assignment.php</string>
2244 </dict>
2245 <dict>
2246 <key>begin</key>
2247 <string>(?i)\b(instanceof)\b\s+(?=[\\$a-z_])</string>
2248 <key>beginCaptures</key>
2249 <dict>
2250 <key>1</key>
2251 <dict>
2252 <key>name</key>
2253 <string>keyword.operator.type.php</string>
2254 </dict>
2255 </dict>
2256 <key>end</key>
2257 <string>(?=[^\\$A-Za-z_0-9])</string>
2258 <key>patterns</key>
2259 <array>
2260 <dict>
2261 <key>include</key>
2262 <string>#class-name</string>
2263 </dict>
2264 <dict>
2265 <key>include</key>
2266 <string>#variable-name</string>
2267 </dict>
2268 </array>
2269 </dict>
2270 <dict>
2271 <key>include</key>
2272 <string>#numbers</string>
2273 </dict>
2274 <dict>
2275 <key>include</key>
2276 <string>#instantiation</string>
2277 </dict>
2278 <dict>
2279 <key>captures</key>
2280 <dict>
2281 <key>1</key>
2282 <dict>
2283 <key>name</key>
2284 <string>keyword.control.goto.php</string>
2285 </dict>
2286 <key>2</key>
2287 <dict>
2288 <key>name</key>
2289 <string>support.other.php</string>
2290 </dict>
2291 </dict>
2292 <key>match</key>
2293 <string>(?i)(goto)\s+([a-z_][a-z_0-9]*)</string>
2294 </dict>
2295 <dict>
2296 <key>captures</key>
2297 <dict>
2298 <key>1</key>
2299 <dict>
2300 <key>name</key>
2301 <string>entity.name.goto-label.php</string>
2302 </dict>
2303 </dict>
2304 <key>match</key>
2305 <string>(?i)^\s*([a-z_][a-z_0-9]*)\s*:</string>
2306 </dict>
2307 <dict>
2308 <key>include</key>
2309 <string>#string-backtick</string>
2310 </dict>
2311 <dict>
2312 <key>begin</key>
2313 <string>\[</string>
2314 <key>beginCaptures</key>
2315 <dict>
2316 <key>0</key>
2317 <dict>
2318 <key>name</key>
2319 <string>punctuation.section.array.begin.php</string>
2320 </dict>
2321 </dict>
2322 <key>end</key>
2323 <string>\]</string>
2324 <key>endCaptures</key>
2325 <dict>
2326 <key>0</key>
2327 <dict>
2328 <key>name</key>
2329 <string>punctuation.section.array.end.php</string>
2330 </dict>
2331 </dict>
2332 <key>patterns</key>
2333 <array>
2334 <dict>
2335 <key>include</key>
2336 <string>#language</string>
2337 </dict>
2338 </array>
2339 </dict>
2340 <dict>
2341 <key>include</key>
2342 <string>#constants</string>
2343 </dict>
2344 </array>
2345 </dict>
2346 <key>namespace</key>
2347 <dict>
2348 <key>begin</key>
2349 <string>(?i)(?:(namespace)|[a-z0-9_]+)?(\\)(?=.*?([^a-z0-9_\\]|\z))</string>
2350 <key>beginCaptures</key>
2351 <dict>
2352 <key>1</key>
2353 <dict>
2354 <key>name</key>
2355 <string>variable.language.namespace.php</string>
2356 </dict>
2357 <key>2</key>
2358 <dict>
2359 <key>name</key>
2360 <string>punctuation.separator.inheritance.php</string>
2361 </dict>
2362 </dict>
2363 <key>end</key>
2364 <string>(?i)(?=[a-z0-9_]*([^a-z0-9_\\]|\z))</string>
2365 <key>name</key>
2366 <string>support.other.namespace.php</string>
2367 <key>patterns</key>
2368 <array>
2369 <dict>
2370 <key>captures</key>
2371 <dict>
2372 <key>1</key>
2373 <dict>
2374 <key>name</key>
2375 <string>punctuation.separator.inheritance.php</string>
2376 </dict>
2377 </dict>
2378 <key>match</key>
2379 <string>(?i)(\\)</string>
2380 </dict>
2381 </array>
2382 </dict>
2383 <key>numbers</key>
2384 <dict>
2385 <key>match</key>
2386 <string>\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)\b</string>
2387 <key>name</key>
2388 <string>constant.numeric.php</string>
2389 </dict>
2390 <key>object</key>
2391 <dict>
2392 <key>patterns</key>
2393 <array>
2394 <dict>
2395 <key>begin</key>
2396 <string>(-&gt;)(\$?\{)</string>
2397 <key>beginCaptures</key>
2398 <dict>
2399 <key>1</key>
2400 <dict>
2401 <key>name</key>
2402 <string>keyword.operator.class.php</string>
2403 </dict>
2404 <key>2</key>
2405 <dict>
2406 <key>name</key>
2407 <string>punctuation.definition.variable.php</string>
2408 </dict>
2409 </dict>
2410 <key>end</key>
2411 <string>(\})</string>
2412 <key>endCaptures</key>
2413 <dict>
2414 <key>1</key>
2415 <dict>
2416 <key>name</key>
2417 <string>punctuation.definition.variable.php</string>
2418 </dict>
2419 </dict>
2420 <key>patterns</key>
2421 <array>
2422 <dict>
2423 <key>include</key>
2424 <string>#language</string>
2425 </dict>
2426 </array>
2427 </dict>
2428 <dict>
2429 <key>captures</key>
2430 <dict>
2431 <key>1</key>
2432 <dict>
2433 <key>name</key>
2434 <string>keyword.operator.class.php</string>
2435 </dict>
2436 <key>2</key>
2437 <dict>
2438 <key>name</key>
2439 <string>meta.function-call.object.php</string>
2440 </dict>
2441 <key>3</key>
2442 <dict>
2443 <key>name</key>
2444 <string>variable.other.property.php</string>
2445 </dict>
2446 <key>4</key>
2447 <dict>
2448 <key>name</key>
2449 <string>punctuation.definition.variable.php</string>
2450 </dict>
2451 </dict>
2452 <key>match</key>
2453 <string>(?x)(-&gt;)
2454 (?:
2455 ([A-Za-z_][A-Za-z_0-9]*)\s*\(
2456 |
2457 ((\$+)?[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)
2458 )?</string>
2459 </dict>
2460 </array>
2461 </dict>
2462 <key>parameter-default-types</key>
2463 <dict>
2464 <key>patterns</key>
2465 <array>
2466 <dict>
2467 <key>include</key>
2468 <string>#strings</string>
2469 </dict>
2470 <dict>
2471 <key>include</key>
2472 <string>#numbers</string>
2473 </dict>
2474 <dict>
2475 <key>include</key>
2476 <string>#string-backtick</string>
2477 </dict>
2478 <dict>
2479 <key>include</key>
2480 <string>#variables</string>
2481 </dict>
2482 <dict>
2483 <key>match</key>
2484 <string>=&gt;</string>
2485 <key>name</key>
2486 <string>keyword.operator.key.php</string>
2487 </dict>
2488 <dict>
2489 <key>match</key>
2490 <string>=</string>
2491 <key>name</key>
2492 <string>keyword.operator.assignment.php</string>
2493 </dict>
2494 <dict>
2495 <key>match</key>
2496 <string>&amp;(?=\s*\$)</string>
2497 <key>name</key>
2498 <string>storage.modifier.reference.php</string>
2499 </dict>
2500 <dict>
2501 <key>begin</key>
2502 <string>(array)\s*(\()</string>
2503 <key>beginCaptures</key>
2504 <dict>
2505 <key>1</key>
2506 <dict>
2507 <key>name</key>
2508 <string>support.function.construct.php</string>
2509 </dict>
2510 <key>2</key>
2511 <dict>
2512 <key>name</key>
2513 <string>punctuation.definition.array.begin.php</string>
2514 </dict>
2515 </dict>
2516 <key>end</key>
2517 <string>\)</string>
2518 <key>endCaptures</key>
2519 <dict>
2520 <key>0</key>
2521 <dict>
2522 <key>name</key>
2523 <string>punctuation.definition.array.end.php</string>
2524 </dict>
2525 </dict>
2526 <key>name</key>
2527 <string>meta.array.php</string>
2528 <key>patterns</key>
2529 <array>
2530 <dict>
2531 <key>include</key>
2532 <string>#parameter-default-types</string>
2533 </dict>
2534 </array>
2535 </dict>
2536 <dict>
2537 <key>include</key>
2538 <string>#instantiation</string>
2539 </dict>
2540 <dict>
2541 <key>begin</key>
2542 <string>(?xi)\s*(?=
2543 [a-z_0-9\\]+(::)
2544 ([a-z_\x{7f}-\x{ff}][a-z0-9_\x{7f}-\x{ff}]*)?
2545 )</string>
2546 <key>end</key>
2547 <string>(?i)(::)([a-z_\x{7f}-\x{ff}][a-z0-9_\x{7f}-\x{ff}]*)?</string>
2548 <key>endCaptures</key>
2549 <dict>
2550 <key>1</key>
2551 <dict>
2552 <key>name</key>
2553 <string>keyword.operator.class.php</string>
2554 </dict>
2555 <key>2</key>
2556 <dict>
2557 <key>name</key>
2558 <string>constant.other.class.php</string>
2559 </dict>
2560 </dict>
2561 <key>patterns</key>
2562 <array>
2563 <dict>
2564 <key>include</key>
2565 <string>#class-name</string>
2566 </dict>
2567 </array>
2568 </dict>
2569 <dict>
2570 <key>include</key>
2571 <string>#constants</string>
2572 </dict>
2573 </array>
2574 </dict>
2575 <key>php_doc</key>
2576 <dict>
2577 <key>patterns</key>
2578 <array>
2579 <dict>
2580 <key>comment</key>
2581 <string>PHPDocumentor only recognises lines with an asterisk as the first non-whitespaces character</string>
2582 <key>match</key>
2583 <string>^(?!\s*\*).*$\n?</string>
2584 <key>name</key>
2585 <string>invalid.illegal.missing-asterisk.phpdoc.php</string>
2586 </dict>
2587 <dict>
2588 <key>captures</key>
2589 <dict>
2590 <key>1</key>
2591 <dict>
2592 <key>name</key>
2593 <string>keyword.other.phpdoc.php</string>
2594 </dict>
2595 <key>3</key>
2596 <dict>
2597 <key>name</key>
2598 <string>storage.modifier.php</string>
2599 </dict>
2600 <key>4</key>
2601 <dict>
2602 <key>name</key>
2603 <string>invalid.illegal.wrong-access-type.phpdoc.php</string>
2604 </dict>
2605 </dict>
2606 <key>match</key>
2607 <string>^\s*\*\s*(@access)\s+((public|private|protected)|(.+))\s*$</string>
2608 </dict>
2609 <dict>
2610 <key>captures</key>
2611 <dict>
2612 <key>1</key>
2613 <dict>
2614 <key>name</key>
2615 <string>keyword.other.phpdoc.php</string>
2616 </dict>
2617 <key>2</key>
2618 <dict>
2619 <key>name</key>
2620 <string>markup.underline.link.php</string>
2621 </dict>
2622 </dict>
2623 <key>match</key>
2624 <string>(@xlink)\s+(.+)\s*$</string>
2625 </dict>
2626 <dict>
2627 <key>match</key>
2628 <string>\@(a(bstract|uthor)|c(ategory|opyright)|example|global|internal|li(cense|nk)|pa(ckage|ram)|return|s(ee|ince|tatic|ubpackage)|t(hrows|odo)|v(ar|ersion)|uses|deprecated|final|ignore)\b</string>
2629 <key>name</key>
2630 <string>keyword.other.phpdoc.php</string>
2631 </dict>
2632 <dict>
2633 <key>captures</key>
2634 <dict>
2635 <key>1</key>
2636 <dict>
2637 <key>name</key>
2638 <string>keyword.other.phpdoc.php</string>
2639 </dict>
2640 </dict>
2641 <key>match</key>
2642 <string>\{(@(link)).+?\}</string>
2643 <key>name</key>
2644 <string>meta.tag.inline.phpdoc.php</string>
2645 </dict>
2646 </array>
2647 </dict>
2648 <key>regex-double-quoted</key>
2649 <dict>
2650 <key>begin</key>
2651 <string>(?x)"/ (?= (\\.|[^"/])++/[imsxeADSUXu]*" )</string>
2652 <key>beginCaptures</key>
2653 <dict>
2654 <key>0</key>
2655 <dict>
2656 <key>name</key>
2657 <string>punctuation.definition.string.begin.php</string>
2658 </dict>
2659 </dict>
2660 <key>end</key>
2661 <string>(/)([imsxeADSUXu]*)(")</string>
2662 <key>endCaptures</key>
2663 <dict>
2664 <key>0</key>
2665 <dict>
2666 <key>name</key>
2667 <string>punctuation.definition.string.end.php</string>
2668 </dict>
2669 </dict>
2670 <key>name</key>
2671 <string>string.regexp.double-quoted.php</string>
2672 <key>patterns</key>
2673 <array>
2674 <dict>
2675 <key>comment</key>
2676 <string>Escaped from the regexp – there can also be 2 backslashes (since 1 will escape the first)</string>
2677 <key>match</key>
2678 <string>(\\){1,2}[.$^\[\]{}]</string>
2679 <key>name</key>
2680 <string>constant.character.escape.regex.php</string>
2681 </dict>
2682 <dict>
2683 <key>include</key>
2684 <string>#interpolation</string>
2685 </dict>
2686 <dict>
2687 <key>captures</key>
2688 <dict>
2689 <key>1</key>
2690 <dict>
2691 <key>name</key>
2692 <string>punctuation.definition.arbitrary-repitition.php</string>
2693 </dict>
2694 <key>3</key>
2695 <dict>
2696 <key>name</key>
2697 <string>punctuation.definition.arbitrary-repitition.php</string>
2698 </dict>
2699 </dict>
2700 <key>match</key>
2701 <string>(\{)\d+(,\d+)?(\})</string>
2702 <key>name</key>
2703 <string>string.regexp.arbitrary-repitition.php</string>
2704 </dict>
2705 <dict>
2706 <key>begin</key>
2707 <string>\[(?:\^?\])?</string>
2708 <key>captures</key>
2709 <dict>
2710 <key>0</key>
2711 <dict>
2712 <key>name</key>
2713 <string>punctuation.definition.character-class.php</string>
2714 </dict>
2715 </dict>
2716 <key>end</key>
2717 <string>\]</string>
2718 <key>name</key>
2719 <string>string.regexp.character-class.php</string>
2720 <key>patterns</key>
2721 <array>
2722 <dict>
2723 <key>include</key>
2724 <string>#interpolation</string>
2725 </dict>
2726 </array>
2727 </dict>
2728 <dict>
2729 <key>match</key>
2730 <string>[$^+*]</string>
2731 <key>name</key>
2732 <string>keyword.operator.regexp.php</string>
2733 </dict>
2734 </array>
2735 </dict>
2736 <key>regex-single-quoted</key>
2737 <dict>
2738 <key>begin</key>
2739 <string>(?x)'/ (?= ( \\ (?: \\ (?: \\ [\\']? | [^'] ) | . ) | [^'/] )++/[imsxeADSUXu]*' )</string>
2740 <key>beginCaptures</key>
2741 <dict>
2742 <key>0</key>
2743 <dict>
2744 <key>name</key>
2745 <string>punctuation.definition.string.begin.php</string>
2746 </dict>
2747 </dict>
2748 <key>end</key>
2749 <string>(/)([imsxeADSUXu]*)(')</string>
2750 <key>endCaptures</key>
2751 <dict>
2752 <key>0</key>
2753 <dict>
2754 <key>name</key>
2755 <string>punctuation.definition.string.end.php</string>
2756 </dict>
2757 </dict>
2758 <key>name</key>
2759 <string>string.regexp.single-quoted.php</string>
2760 <key>patterns</key>
2761 <array>
2762 <dict>
2763 <key>captures</key>
2764 <dict>
2765 <key>1</key>
2766 <dict>
2767 <key>name</key>
2768 <string>punctuation.definition.arbitrary-repitition.php</string>
2769 </dict>
2770 <key>3</key>
2771 <dict>
2772 <key>name</key>
2773 <string>punctuation.definition.arbitrary-repitition.php</string>
2774 </dict>
2775 </dict>
2776 <key>match</key>
2777 <string>(\{)\d+(,\d+)?(\})</string>
2778 <key>name</key>
2779 <string>string.regexp.arbitrary-repitition.php</string>
2780 </dict>
2781 <dict>
2782 <key>begin</key>
2783 <string>\[(?:\^?\])?</string>
2784 <key>captures</key>
2785 <dict>
2786 <key>0</key>
2787 <dict>
2788 <key>name</key>
2789 <string>punctuation.definition.character-class.php</string>
2790 </dict>
2791 </dict>
2792 <key>end</key>
2793 <string>\]</string>
2794 <key>name</key>
2795 <string>string.regexp.character-class.php</string>
2796 <key>patterns</key>
2797 <array>
2798 <dict>
2799 <key>include</key>
2800 <string>#single_quote_regex_escape</string>
2801 </dict>
2802 </array>
2803 </dict>
2804 <dict>
2805 <key>match</key>
2806 <string>[$^+*]</string>
2807 <key>name</key>
2808 <string>keyword.operator.regexp.php</string>
2809 </dict>
2810 <dict>
2811 <key>include</key>
2812 <string>#single_quote_regex_escape</string>
2813 </dict>
2814 </array>
2815 <key>repository</key>
2816 <dict>
2817 <key>single_quote_regex_escape</key>
2818 <dict>
2819 <key>comment</key>
2820 <string>Support both PHP string and regex escaping</string>
2821 <key>match</key>
2822 <string>(?x) \\ (?: \\ (?: \\ [\\']? | [^'] ) | . )</string>
2823 <key>name</key>
2824 <string>constant.character.escape.php</string>
2825 </dict>
2826 </dict>
2827 </dict>
2828 <key>sql-string-double-quoted</key>
2829 <dict>
2830 <key>begin</key>
2831 <string>"\s*(?=(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER)\b)</string>
2832 <key>beginCaptures</key>
2833 <dict>
2834 <key>0</key>
2835 <dict>
2836 <key>name</key>
2837 <string>punctuation.definition.string.begin.php</string>
2838 </dict>
2839 </dict>
2840 <key>contentName</key>
2841 <string>source.sql.embedded.php</string>
2842 <key>end</key>
2843 <string>"</string>
2844 <key>endCaptures</key>
2845 <dict>
2846 <key>0</key>
2847 <dict>
2848 <key>name</key>
2849 <string>punctuation.definition.string.end.php</string>
2850 </dict>
2851 </dict>
2852 <key>name</key>
2853 <string>string.quoted.double.sql.php</string>
2854 <key>patterns</key>
2855 <array>
2856 <dict>
2857 <key>match</key>
2858 <string>#(\\"|[^"])*(?="|$\n?)</string>
2859 <key>name</key>
2860 <string>comment.line.number-sign.sql</string>
2861 </dict>
2862 <dict>
2863 <key>match</key>
2864 <string>--(\\"|[^"])*(?="|$\n?)</string>
2865 <key>name</key>
2866 <string>comment.line.double-dash.sql</string>
2867 </dict>
2868 <dict>
2869 <key>match</key>
2870 <string>\\[\\"`']</string>
2871 <key>name</key>
2872 <string>constant.character.escape.php</string>
2873 </dict>
2874 <dict>
2875 <key>comment</key>
2876 <string>Unclosed strings must be captured to avoid them eating the remainder of the PHP script
2877 Sample case: $sql = "SELECT * FROM bar WHERE foo = '" . $variable . "'"</string>
2878 <key>match</key>
2879 <string>'(?=((\\')|[^'"])*("|$))</string>
2880 <key>name</key>
2881 <string>string.quoted.single.unclosed.sql</string>
2882 </dict>
2883 <dict>
2884 <key>comment</key>
2885 <string>Unclosed strings must be captured to avoid them eating the remainder of the PHP script
2886 Sample case: $sql = "SELECT * FROM bar WHERE foo = '" . $variable . "'"</string>
2887 <key>match</key>
2888 <string>`(?=((\\`)|[^`"])*("|$))</string>
2889 <key>name</key>
2890 <string>string.quoted.other.backtick.unclosed.sql</string>
2891 </dict>
2892 <dict>
2893 <key>begin</key>
2894 <string>'</string>
2895 <key>end</key>
2896 <string>'</string>
2897 <key>name</key>
2898 <string>string.quoted.single.sql</string>
2899 <key>patterns</key>
2900 <array>
2901 <dict>
2902 <key>include</key>
2903 <string>#interpolation</string>
2904 </dict>
2905 </array>
2906 </dict>
2907 <dict>
2908 <key>begin</key>
2909 <string>`</string>
2910 <key>end</key>
2911 <string>`</string>
2912 <key>name</key>
2913 <string>string.quoted.other.backtick.sql</string>
2914 <key>patterns</key>
2915 <array>
2916 <dict>
2917 <key>include</key>
2918 <string>#interpolation</string>
2919 </dict>
2920 </array>
2921 </dict>
2922 <dict>
2923 <key>include</key>
2924 <string>#interpolation</string>
2925 </dict>
2926 <dict>
2927 <key>include</key>
2928 <string>source.sql</string>
2929 </dict>
2930 </array>
2931 </dict>
2932 <key>sql-string-single-quoted</key>
2933 <dict>
2934 <key>begin</key>
2935 <string>'\s*(?=(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER)\b)</string>
2936 <key>beginCaptures</key>
2937 <dict>
2938 <key>0</key>
2939 <dict>
2940 <key>name</key>
2941 <string>punctuation.definition.string.begin.php</string>
2942 </dict>
2943 </dict>
2944 <key>contentName</key>
2945 <string>source.sql.embedded.php</string>
2946 <key>end</key>
2947 <string>'</string>
2948 <key>endCaptures</key>
2949 <dict>
2950 <key>0</key>
2951 <dict>
2952 <key>name</key>
2953 <string>punctuation.definition.string.end.php</string>
2954 </dict>
2955 </dict>
2956 <key>name</key>
2957 <string>string.quoted.single.sql.php</string>
2958 <key>patterns</key>
2959 <array>
2960 <dict>
2961 <key>match</key>
2962 <string>#(\\'|[^'])*(?='|$\n?)</string>
2963 <key>name</key>
2964 <string>comment.line.number-sign.sql</string>
2965 </dict>
2966 <dict>
2967 <key>match</key>
2968 <string>--(\\'|[^'])*(?='|$\n?)</string>
2969 <key>name</key>
2970 <string>comment.line.double-dash.sql</string>
2971 </dict>
2972 <dict>
2973 <key>match</key>
2974 <string>\\[\\'`"]</string>
2975 <key>name</key>
2976 <string>constant.character.escape.php</string>
2977 </dict>
2978 <dict>
2979 <key>comment</key>
2980 <string>Unclosed strings must be captured to avoid them eating the remainder of the PHP script
2981 Sample case: $sql = "SELECT * FROM bar WHERE foo = '" . $variable . "'"</string>
2982 <key>match</key>
2983 <string>`(?=((\\`)|[^`'])*('|$))</string>
2984 <key>name</key>
2985 <string>string.quoted.other.backtick.unclosed.sql</string>
2986 </dict>
2987 <dict>
2988 <key>comment</key>
2989 <string>Unclosed strings must be captured to avoid them eating the remainder of the PHP script
2990 Sample case: $sql = "SELECT * FROM bar WHERE foo = '" . $variable . "'"</string>
2991 <key>match</key>
2992 <string>"(?=((\\")|[^"'])*('|$))</string>
2993 <key>name</key>
2994 <string>string.quoted.double.unclosed.sql</string>
2995 </dict>
2996 <dict>
2997 <key>include</key>
2998 <string>source.sql</string>
2999 </dict>
3000 </array>
3001 </dict>
3002 <key>string-backtick</key>
3003 <dict>
3004 <key>begin</key>
3005 <string>`</string>
3006 <key>beginCaptures</key>
3007 <dict>
3008 <key>0</key>
3009 <dict>
3010 <key>name</key>
3011 <string>punctuation.definition.string.begin.php</string>
3012 </dict>
3013 </dict>
3014 <key>end</key>
3015 <string>`</string>
3016 <key>endCaptures</key>
3017 <dict>
3018 <key>0</key>
3019 <dict>
3020 <key>name</key>
3021 <string>punctuation.definition.string.end.php</string>
3022 </dict>
3023 </dict>
3024 <key>name</key>
3025 <string>string.interpolated.php</string>
3026 <key>patterns</key>
3027 <array>
3028 <dict>
3029 <key>match</key>
3030 <string>\\.</string>
3031 <key>name</key>
3032 <string>constant.character.escape.php</string>
3033 </dict>
3034 <dict>
3035 <key>include</key>
3036 <string>#interpolation</string>
3037 </dict>
3038 </array>
3039 </dict>
3040 <key>string-double-quoted</key>
3041 <dict>
3042 <key>begin</key>
3043 <string>"</string>
3044 <key>beginCaptures</key>
3045 <dict>
3046 <key>0</key>
3047 <dict>
3048 <key>name</key>
3049 <string>punctuation.definition.string.begin.php</string>
3050 </dict>
3051 </dict>
3052 <key>comment</key>
3053 <string>This contentName is just to allow the usage of “select scope” to select the string contents first, then the string with quotes</string>
3054 <key>contentName</key>
3055 <string>meta.string-contents.quoted.double.php</string>
3056 <key>end</key>
3057 <string>"</string>
3058 <key>endCaptures</key>
3059 <dict>
3060 <key>0</key>
3061 <dict>
3062 <key>name</key>
3063 <string>punctuation.definition.string.end.php</string>
3064 </dict>
3065 </dict>
3066 <key>name</key>
3067 <string>string.quoted.double.php</string>
3068 <key>patterns</key>
3069 <array>
3070 <dict>
3071 <key>include</key>
3072 <string>#interpolation</string>
3073 </dict>
3074 </array>
3075 </dict>
3076 <key>string-single-quoted</key>
3077 <dict>
3078 <key>begin</key>
3079 <string>'</string>
3080 <key>beginCaptures</key>
3081 <dict>
3082 <key>0</key>
3083 <dict>
3084 <key>name</key>
3085 <string>punctuation.definition.string.begin.php</string>
3086 </dict>
3087 </dict>
3088 <key>contentName</key>
3089 <string>meta.string-contents.quoted.single.php</string>
3090 <key>end</key>
3091 <string>'</string>
3092 <key>endCaptures</key>
3093 <dict>
3094 <key>0</key>
3095 <dict>
3096 <key>name</key>
3097 <string>punctuation.definition.string.end.php</string>
3098 </dict>
3099 </dict>
3100 <key>name</key>
3101 <string>string.quoted.single.php</string>
3102 <key>patterns</key>
3103 <array>
3104 <dict>
3105 <key>match</key>
3106 <string>\\[\\']</string>
3107 <key>name</key>
3108 <string>constant.character.escape.php</string>
3109 </dict>
3110 </array>
3111 </dict>
3112 <key>strings</key>
3113 <dict>
3114 <key>patterns</key>
3115 <array>
3116 <dict>
3117 <key>include</key>
3118 <string>#regex-double-quoted</string>
3119 </dict>
3120 <dict>
3121 <key>include</key>
3122 <string>#sql-string-double-quoted</string>
3123 </dict>
3124 <dict>
3125 <key>include</key>
3126 <string>#string-double-quoted</string>
3127 </dict>
3128 <dict>
3129 <key>include</key>
3130 <string>#regex-single-quoted</string>
3131 </dict>
3132 <dict>
3133 <key>include</key>
3134 <string>#sql-string-single-quoted</string>
3135 </dict>
3136 <dict>
3137 <key>include</key>
3138 <string>#string-single-quoted</string>
3139 </dict>
3140 </array>
3141 </dict>
3142 <key>support</key>
3143 <dict>
3144 <key>patterns</key>
3145 <array>
3146 <dict>
3147 <key>match</key>
3148 <string>(?i)\bapc_(s(tore|ma_info)|c(ompile_file|lear_cache|a(s|che_info))|inc|de(c|fine_constants|lete(_file)?)|exists|fetch|load_constants|add|bin_(dump(file)?|load(file)?))\b</string>
3149 <key>name</key>
3150 <string>support.function.apc.php</string>
3151 </dict>
3152 <dict>
3153 <key>match</key>
3154 <string>(?i)\bapcu_(s(tore|ma_info)|c(lear_cache|a(s|che_info))|inc|de(c|lete)|e(ntry|xists)|fetch|add)\b</string>
3155 <key>name</key>
3156 <string>support.function.apcu.php</string>
3157 </dict>
3158 <dict>
3159 <key>match</key>
3160 <string>(?i)\b(s(huffle|izeof|ort)|n(ext|at(sort|casesort))|c(o(unt|mpact)|urrent)|in_array|u(sort|ksort|asort)|p(os|rev)|e(nd|ach|xtract)|k(sort|ey(_exists)?|rsort)|list|a(sort|r(sort|ray(_(s(hift|um|plice|earch|lice)|c(h(unk|ange_key_case)|o(unt_values|lumn|mbine))|intersect(_(u(key|assoc)|key|assoc))?|diff(_(u(key|assoc)|key|assoc))?|u(n(shift|ique)|intersect(_(uassoc|assoc))?|diff(_(uassoc|assoc))?)|p(op|ush|ad|roduct)|values|key(s|_exists)|f(il(ter|l(_keys)?)|lip)|walk(_recursive)?|r(e(duce|place(_recursive)?|verse)|and)|m(ultisort|erge(_recursive)?|ap)))?))|r(sort|eset|ange))\b</string>
3161 <key>name</key>
3162 <string>support.function.array.php</string>
3163 </dict>
3164 <dict>
3165 <key>match</key>
3166 <string>(?i)\b(s(how_source|ys_getloadavg|leep)|highlight_(string|file)|con(stant|nection_(status|aborted))|time_(sleep_until|nanosleep)|ignore_user_abort|d(ie|efine(d)?)|u(sleep|n(iqid|pack))|__halt_compiler|p(hp_(strip_whitespace|check_syntax)|ack)|e(val|xit)|get_browser)\b</string>
3167 <key>name</key>
3168 <string>support.function.basic_functions.php</string>
3169 </dict>
3170 <dict>
3171 <key>match</key>
3172 <string>(?i)\bbc(s(cale|ub|qrt)|comp|div|pow(mod)?|add|m(od|ul))\b</string>
3173 <key>name</key>
3174 <string>support.function.bcmath.php</string>
3175 </dict>
3176 <dict>
3177 <key>match</key>
3178 <string>(?i)\bblenc_encrypt\b</string>
3179 <key>name</key>
3180 <string>support.function.blenc.php</string>
3181 </dict>
3182 <dict>
3183 <key>match</key>
3184 <string>(?i)\bMongoDB\\BSON\\(to(JSON|PHP)|from(JSON|PHP))\b</string>
3185 <key>name</key>
3186 <string>support.function.bson.php</string>
3187 </dict>
3188 <dict>
3189 <key>match</key>
3190 <string>(?i)\bbz(c(ompress|lose)|open|decompress|err(str|no|or)|flush|write|read)\b</string>
3191 <key>name</key>
3192 <string>support.function.bz2.php</string>
3193 </dict>
3194 <dict>
3195 <key>match</key>
3196 <string>(?i)\b(cal_(to_jd|info|days_in_month|from_jd)|unixtojd|j(d(to(unix|j(ulian|ewish)|french|gregorian)|dayofweek|monthname)|uliantojd|ewishtojd)|easter_da(ys|te)|frenchtojd|gregoriantojd)\b</string>
3197 <key>name</key>
3198 <string>support.function.calendar.php</string>
3199 </dict>
3200 <dict>
3201 <key>match</key>
3202 <string>(?i)\b(c(lass_(exists|alias)|all_user_method(_array)?)|trait_exists|i(s_(subclass_of|a)|nterface_exists)|__autoload|property_exists|get_(c(lass(_(vars|methods))?|alled_class)|object_vars|declared_(classes|traits|interfaces)|parent_class)|method_exists)\b</string>
3203 <key>name</key>
3204 <string>support.function.classobj.php</string>
3205 </dict>
3206 <dict>
3207 <key>match</key>
3208 <string>(?i)\b(com_(create_guid|print_typeinfo|event_sink|load_typelib|get_active_object|message_pump)|variant_(s(ub|et(_type)?)|n(ot|eg)|c(a(st|t)|mp)|i(nt|div|mp)|or|d(iv|ate_(to_timestamp|from_timestamp))|pow|eqv|fix|a(nd|dd|bs)|round|get_type|xor|m(od|ul)))\b</string>
3209 <key>name</key>
3210 <string>support.function.com.php</string>
3211 </dict>
3212 <dict>
3213 <key>match</key>
3214 <string>(?i)\brandom_(int|bytes)\b</string>
3215 <key>name</key>
3216 <string>support.function.csprng.php</string>
3217 </dict>
3218 <dict>
3219 <key>match</key>
3220 <string>(?i)\bctype_(space|cntrl|digit|upper|p(unct|rint)|lower|al(num|pha)|graph|xdigit)\b</string>
3221 <key>name</key>
3222 <string>support.function.ctype.php</string>
3223 </dict>
3224 <dict>
3225 <key>match</key>
3226 <string>(?i)\bcurl_(s(hare_(setopt|close|init)|trerror|etopt(_array)?)|c(opy_handle|lose)|init|unescape|pause|e(scape|rr(no|or)|xec)|version|file_create|reset|getinfo|multi_(s(trerror|e(topt|lect))|close|in(it|fo_read)|exec|add_handle|remove_handle|getcontent))\b</string>
3227 <key>name</key>
3228 <string>support.function.curl.php</string>
3229 </dict>
3230 <dict>
3231 <key>match</key>
3232 <string>(?i)\b(str(totime|ptime|ftime)|checkdate|time(zone_(name_(from_abbr|get)|transitions_get|identifiers_list|o(pen|ffset_get)|version_get|location_get|abbreviations_list))?|idate|date(_(su(n(set|_info|rise)|b)|create(_(immutable(_from_format)?|from_format))?|time(stamp_(set|get)|zone_(set|get)|_set)|i(sodate_set|nterval_(create_from_date_string|format))|offset_get|d(iff|efault_timezone_(set|get)|ate_set)|parse(_from_format)?|format|add|get_last_errors|modify))?|localtime|g(et(timeofday|date)|m(strftime|date|mktime))|m(icrotime|ktime))\b</string>
3233 <key>name</key>
3234 <string>support.function.datetime.php</string>
3235 </dict>
3236 <dict>
3237 <key>match</key>
3238 <string>(?i)\bdba_(sync|handlers|nextkey|close|insert|op(timize|en)|delete|popen|exists|key_split|f(irstkey|etch)|list|replace)\b</string>
3239 <key>name</key>
3240 <string>support.function.dba.php</string>
3241 </dict>
3242 <dict>
3243 <key>match</key>
3244 <string>(?i)\bdbx_(sort|c(o(nnect|mpare)|lose)|e(scape_string|rror)|query|fetch_row)\b</string>
3245 <key>name</key>
3246 <string>support.function.dbx.php</string>
3247 </dict>
3248 <dict>
3249 <key>match</key>
3250 <string>(?i)\b(scandir|c(h(dir|root)|losedir)|opendir|dir|re(winddir|addir)|getcwd)\b</string>
3251 <key>name</key>
3252 <string>support.function.dir.php</string>
3253 </dict>
3254 <dict>
3255 <key>match</key>
3256 <string>(?i)\beio_(s(y(nc(_file_range|fs)?|mlink)|tat(vfs)?|e(ndfile|t_m(in_parallel|ax_(idle|p(oll_(time|reqs)|arallel)))|ek))|n(threads|op|pending|re(qs|ady))|c(h(own|mod)|ustom|lose|ancel)|truncate|init|open|dup2|u(nlink|time)|poll|event_loop|f(s(ync|tat(vfs)?)|ch(own|mod)|truncate|datasync|utime|allocate)|write|l(stat|ink)|r(e(name|a(d(dir|link|ahead)?|lpath))|mdir)|g(et_(event_stream|last_error)|rp(_(cancel|limit|add))?)|mk(nod|dir)|busy)\b</string>
3257 <key>name</key>
3258 <string>support.function.eio.php</string>
3259 </dict>
3260 <dict>
3261 <key>match</key>
3262 <string>(?i)\benchant_(dict_(s(tore_replacement|uggest)|check|is_in_session|describe|quick_check|add_to_(session|personal)|get_error)|broker_(set_(ordering|dict_path)|init|d(ict_exists|escribe)|free(_dict)?|list_dicts|request_(dict|pwl_dict)|get_(dict_path|error)))\b</string>
3263 <key>name</key>
3264 <string>support.function.enchant.php</string>
3265 </dict>
3266 <dict>
3267 <key>match</key>
3268 <string>(?i)\b(s(plit(i)?|ql_regcase)|ereg(i(_replace)?|_replace)?)\b</string>
3269 <key>name</key>
3270 <string>support.function.ereg.php</string>
3271 </dict>
3272 <dict>
3273 <key>match</key>
3274 <string>(?i)\b(set_e(rror_handler|xception_handler)|trigger_error|debug_(print_backtrace|backtrace)|user_error|error_(clear_last|log|reporting|get_last)|restore_e(rror_handler|xception_handler))\b</string>
3275 <key>name</key>
3276 <string>support.function.errorfunc.php</string>
3277 </dict>
3278 <dict>
3279 <key>match</key>
3280 <string>(?i)\b(s(hell_exec|ystem)|p(assthru|roc_(nice|close|terminate|open|get_status))|e(scapeshell(cmd|arg)|xec))\b</string>
3281 <key>name</key>
3282 <string>support.function.exec.php</string>
3283 </dict>
3284 <dict>
3285 <key>match</key>
3286 <string>(?i)\b(exif_(t(humbnail|agname)|imagetype|read_data)|read_exif_data)\b</string>
3287 <key>name</key>
3288 <string>support.function.exif.php</string>
3289 </dict>
3290 <dict>
3291 <key>match</key>
3292 <string>(?i)\bfann_(s(huffle_train_data|cale_(train(_data)?|input(_train_data)?|output(_train_data)?)|ubset_train_data|et_(s(caling_params|arprop_(step_error_(shift|threshold_factor)|temperature|weight_decay_shift))|ca(scade_(num_candidate_groups|candidate_(stagnation_epochs|change_fraction|limit)|output_(stagnation_epochs|change_fraction)|weight_multiplier|activation_(steepnesses|functions)|m(in_(cand_epochs|out_epochs)|ax_(cand_epochs|out_epochs)))|llback)|train(ing_algorithm|_(stop_function|error_function))|input_scaling_params|output_scaling_params|error_log|quickprop_(decay|mu)|weight(_array)?|learning_(rate|momentum)|activation_(steepness(_(hidden|output|layer))?|function(_(hidden|output|layer))?)|rprop_(increase_factor|de(crease_factor|lta_(zero|m(in|ax))))|bit_fail_limit)|ave(_train)?)|num_(input_train_data|output_train_data)|c(opy|lear_scaling_params|ascadetrain_on_(data|file)|reate_(s(hortcut(_array)?|tandard(_array)?|parse(_array)?)|train(_from_callback)?|from_file))|t(est(_data)?|rain(_(on_(data|file)|epoch))?)|init_weights|d(uplicate_train_data|es(cale_(train|input|output)|troy(_train)?))|print_error|length_train_data|r(un|e(set_(MSE|err(str|no))|ad_train_from_file)|andomize_weights)|get_(sarprop_(step_error_(shift|threshold_factor)|temperature|weight_decay_shift)|n(um_(input|output|layers)|etwork_type)|MSE|c(onnection_(array|rate)|ascade_(num_candidate(s|_groups)|candidate_(stagnation_epochs|change_fraction|limit)|output_(stagnation_epochs|change_fraction)|weight_multiplier|activation_(steepnesses(_count)?|functions(_count)?)|m(in_(cand_epochs|out_epochs)|ax_(cand_epochs|out_epochs))))|t(otal_(neurons|connections)|rain(ing_algorithm|_(stop_function|error_function)))|err(str|no)|quickprop_(decay|mu)|l(earning_(rate|momentum)|ayer_array)|activation_(steepness|function)|rprop_(increase_factor|de(crease_factor|lta_(zero|m(in|ax))))|bi(t_fail(_limit)?|as_array))|merge_train_data)\b</string>
3293 <key>name</key>
3294 <string>support.function.fann.php</string>
3295 </dict>
3296 <dict>
3297 <key>match</key>
3298 <string>(?i)\b(s(ymlink|tat|et_file_buffer)|c(h(own|grp|mod)|opy|learstatcache)|t(ouch|empnam|mpfile)|is_(dir|uploaded_file|executable|file|writ(eable|able)|link|readable)|d(i(sk(_(total_space|free_space)|freespace)|rname)|elete)|u(nlink|mask)|p(close|open|a(thinfo|rse_ini_(string|file)))|f(s(canf|tat|eek)|nmatch|close|t(ell|runcate)|ile(size|ctime|type|inode|owner|_(put_contents|exists|get_contents)|perms|atime|group|mtime)?|open|p(ut(s|csv)|assthru)|eof|flush|write|lock|read|get(s(s)?|c(sv)?))|l(stat|ch(own|grp)|ink(info)?)|r(e(name|wind|a(d(file|link)|lpath(_cache_(size|get))?))|mdir)|glob|m(ove_uploaded_file|kdir)|basename)\b</string>
3299 <key>name</key>
3300 <string>support.function.file.php</string>
3301 </dict>
3302 <dict>
3303 <key>match</key>
3304 <string>(?i)\b(finfo_(set_flags|close|open|file|buffer)|mime_content_type)\b</string>
3305 <key>name</key>
3306 <string>support.function.fileinfo.php</string>
3307 </dict>
3308 <dict>
3309 <key>match</key>
3310 <string>(?i)\bfilter_(has_var|i(nput(_array)?|d)|var(_array)?|list)\b</string>
3311 <key>name</key>
3312 <string>support.function.filter.php</string>
3313 </dict>
3314 <dict>
3315 <key>match</key>
3316 <string>(?i)\bfastcgi_finish_request\b</string>
3317 <key>name</key>
3318 <string>support.function.fpm.php</string>
3319 </dict>
3320 <dict>
3321 <key>match</key>
3322 <string>(?i)\b(c(all_user_func(_array)?|reate_function)|unregister_tick_function|f(orward_static_call(_array)?|unc(tion_exists|_(num_args|get_arg(s)?)))|register_(shutdown_function|tick_function)|get_defined_functions)\b</string>
3323 <key>name</key>
3324 <string>support.function.funchand.php</string>
3325 </dict>
3326 <dict>
3327 <key>match</key>
3328 <string>(?i)\b(ngettext|textdomain|d(ngettext|c(ngettext|gettext)|gettext)|gettext|bind(textdomain|_textdomain_codeset))\b</string>
3329 <key>name</key>
3330 <string>support.function.gettext.php</string>
3331 </dict>
3332 <dict>
3333 <key>match</key>
3334 <string>(?i)\bgmp_(s(can(1|0)|trval|ign|ub|etbit|qrt(rem)?)|hamdist|ne(g|xtprime)|c(om|lrbit|mp)|testbit|i(n(tval|it|vert)|mport)|or|div(_(q(r)?|r)|exact)?|jacobi|p(o(pcount|w(m)?)|erfect_square|rob_prime)|export|fact|legendre|a(nd|dd|bs)|r(oot(rem)?|andom(_(seed|range|bits))?)|gcd(ext)?|xor|m(od|ul))\b</string>
3335 <key>name</key>
3336 <string>support.function.gmp.php</string>
3337 </dict>
3338 <dict>
3339 <key>match</key>
3340 <string>(?i)\bhash(_(h(kdf|mac(_file)?)|copy|init|update(_(stream|file))?|pbkdf2|equals|fi(nal|le)|algos))?\b</string>
3341 <key>name</key>
3342 <string>support.function.hash.php</string>
3343 </dict>
3344 <dict>
3345 <key>match</key>
3346 <string>(?i)\b(iconv(_(s(tr(pos|len|rpos)|ubstr|et_encoding)|get_encoding|mime_(decode(_headers)?|encode)))?|ob_iconv_handler)\b</string>
3347 <key>name</key>
3348 <string>support.function.iconv.php</string>
3349 </dict>
3350 <dict>
3351 <key>match</key>
3352 <string>(?i)\biis_(s(t(op_serv(ice|er)|art_serv(ice|er))|et_(s(cript_map|erver_rights)|dir_security|app_settings))|add_server|remove_server|get_(s(cript_map|erv(ice_state|er_(rights|by_(comment|path))))|dir_security))\b</string>
3353 <key>name</key>
3354 <string>support.function.iisfunc.php</string>
3355 </dict>
3356 <dict>
3357 <key>match</key>
3358 <string>(?i)\b(i(ptc(parse|embed)|mage(s(y|cale|tring(up)?|et(style|clip|t(hickness|ile)|interpolation|pixel|brush)|avealpha|x)|c(har(up)?|o(nvolution|py(res(ized|ampled)|merge(gray)?)?|lor(s(total|et|forindex)|closest(hwb|alpha)?|transparent|deallocate|exact(alpha)?|a(t|llocate(alpha)?)|resolve(alpha)?|match))|r(op(auto)?|eate(truecolor|from(string|jpeg|png|w(ebp|bmp)|g(if|d(2(part)?)?)|x(pm|bm)|bmp))?))|t(ypes|tf(text|bbox)|ruecolortopalette)|i(struecolor|nterlace)|2wbmp|openpolygon|d(estroy|ashedline)|jpeg|_type_to_(extension|mime_type)|p(s(slantfont|text|e(ncodefont|xtendfont)|freefont|loadfont|bbox)|ng|olygon|alette(copy|totruecolor))|ellipse|f(t(text|bbox)|il(ter|l(toborder|ed(polygon|ellipse|arc|rectangle))?)|ont(height|width)|lip)|w(ebp|bmp)|l(ine|oadfont|ayereffect)|a(ntialias|ffine(matrix(concat|get))?|lphablending|rc)|r(otate|e(solution|ctangle))|g(if|d(2)?|etclip|ammacorrect|rab(screen|window))|xbm|bmp))|jpeg2wbmp|png2wbmp|g(d_info|etimagesize(fromstring)?))\b</string>
3359 <key>name</key>
3360 <string>support.function.image.php</string>
3361 </dict>
3362 <dict>
3363 <key>match</key>
3364 <string>(?i)\b(s(ys_get_temp_dir|et_(time_limit|include_path|magic_quotes_runtime))|cli_(set_process_title|get_process_title)|ini_(set|alter|restore|get(_all)?)|zend_(thread_id|version|logo_guid)|dl|p(hp(credits|info|_(sapi_name|ini_(scanned_files|loaded_file)|uname|logo_guid)|version)|utenv)|extension_loaded|version_compare|assert(_options)?|restore_include_path|g(c_(collect_cycles|disable|enable(d)?|mem_caches)|et(opt|_(c(urrent_user|fg_var)|include(d_files|_path)|defined_constants|extension_funcs|loaded_extensions|re(sources|quired_files)|magic_quotes_(runtime|gpc))|env|lastmod|rusage|my(inode|uid|pid|gid)))|m(emory_get_(usage|peak_usage)|a(in|gic_quotes_runtime)))\b</string>
3365 <key>name</key>
3366 <string>support.function.info.php</string>
3367 </dict>
3368 <dict>
3369 <key>match</key>
3370 <string>(?i)\bibase_(se(t_event_handler|rv(ice_(detach|attach)|er_info))|n(um_(params|fields)|ame_result)|c(o(nnect|mmit(_ret)?)|lose)|trans|d(elete_user|rop_db|b_info)|p(connect|aram_info|repare)|e(rr(code|msg)|xecute)|query|f(ield_info|etch_(object|assoc|row)|ree_(event_handler|query|result))|wait_event|a(dd_user|ffected_rows)|r(ollback(_ret)?|estore)|gen_id|m(odify_user|aintain_db)|b(lob_(c(lose|ancel|reate)|i(nfo|mport)|open|echo|add|get)|ackup))\b</string>
3371 <key>name</key>
3372 <string>support.function.interbase.php</string>
3373 </dict>
3374 <dict>
3375 <key>match</key>
3376 <string>(?i)\b(n(ormalizer_(normalize|is_normalized)|umfmt_(set_(symbol|text_attribute|pattern|attribute)|create|parse(_currency)?|format(_currency)?|get_(symbol|text_attribute|pattern|error_(code|message)|locale|attribute)))|collator_(s(ort(_with_sort_keys)?|et_(strength|attribute))|c(ompare|reate)|asort|get_(s(trength|ort_key)|error_(code|message)|locale|attribute))|transliterator_(create(_(inverse|from_rules))?|transliterate|list_ids|get_error_(code|message))|i(ntl(cal_get_error_(code|message)|tz_get_error_(code|message)|_(is_failure|error_name|get_error_(code|message)))|dn_to_(utf8|ascii))|datefmt_(set_(calendar|timezone(_id)?|pattern|lenient)|create|is_lenient|parse|format(_object)?|localtime|get_(calendar(_object)?|time(type|zone(_id)?)|datetype|pattern|error_(code|message)|locale))|locale_(set_default|c(ompose|anonicalize)|parse|filter_matches|lookup|accept_from_http|get_(script|d(isplay_(script|name|variant|language|region)|efault)|primary_language|keywords|all_variants|region))|resourcebundle_(c(ount|reate)|locales|get(_error_(code|message))?)|grapheme_(s(tr(str|i(str|pos)|pos|len|r(ipos|pos))|ubstr)|extract)|msgfmt_(set_pattern|create|parse(_message)?|format(_message)?|get_(pattern|error_(code|message)|locale)))\b</string>
3377 <key>name</key>
3378 <string>support.function.intl.php</string>
3379 </dict>
3380 <dict>
3381 <key>match</key>
3382 <string>(?i)\bjson_(decode|encode|last_error(_msg)?)\b</string>
3383 <key>name</key>
3384 <string>support.function.json.php</string>
3385 </dict>
3386 <dict>
3387 <key>match</key>
3388 <string>(?i)\bldap_(s(tart_tls|ort|e(t_(option|rebind_proc)|arch)|asl_bind)|next_(entry|attribute|reference)|c(o(n(nect|trol_paged_result(_response)?)|unt_entries|mpare)|lose)|t61_to_8859|d(n2ufn|elete)|8859_to_t61|unbind|parse_re(sult|ference)|e(scape|rr(no|2str|or)|xplode_dn)|f(irst_(entry|attribute|reference)|ree_result)|list|add|re(name|ad)|get_(option|dn|entries|values(_len)?|attributes)|mod(ify(_batch)?|_(del|add|replace))|bind)\b</string>
3389 <key>name</key>
3390 <string>support.function.ldap.php</string>
3391 </dict>
3392 <dict>
3393 <key>match</key>
3394 <string>(?i)\blibxml_(set_(streams_context|external_entity_loader)|clear_errors|disable_entity_loader|use_internal_errors|get_(errors|last_error))\b</string>
3395 <key>name</key>
3396 <string>support.function.libxml.php</string>
3397 </dict>
3398 <dict>
3399 <key>match</key>
3400 <string>(?i)\b(ezmlm_hash|mail)\b</string>
3401 <key>name</key>
3402 <string>support.function.mail.php</string>
3403 </dict>
3404 <dict>
3405 <key>match</key>
3406 <string>(?i)\b(s(in(h)?|qrt|rand)|h(ypot|exdec)|c(os(h)?|eil)|tan(h)?|i(s_(nan|infinite|finite)|ntdiv)|octdec|de(c(hex|oct|bin)|g2rad)|p(i|ow)|exp(m1)?|f(loor|mod)|l(cg_value|og(1(p|0))?)|a(sin(h)?|cos(h)?|tan(h|2)?|bs)|r(ound|a(nd|d2deg))|getrandmax|m(t_(srand|rand|getrandmax)|in|ax)|b(indec|ase_convert))\b</string>
3407 <key>name</key>
3408 <string>support.function.math.php</string>
3409 </dict>
3410 <dict>
3411 <key>match</key>
3412 <string>(?i)\bmb_(s(tr(str|cut|to(upper|lower)|i(str|pos|mwidth)|pos|width|len|r(chr|i(chr|pos)|pos))|ubst(itute_character|r(_count)?)|plit|end_mail)|http_(input|output)|c(heck_encoding|onvert_(case|encoding|variables|kana))|internal_encoding|output_handler|de(code_(numericentity|mimeheader)|tect_(order|encoding))|p(arse_str|referred_mime_name)|e(ncod(ing_aliases|e_(numericentity|mimeheader))|reg(i(_replace)?|_(search(_(setpos|init|pos|regs|get(pos|regs)))?|replace(_callback)?|match))?)|l(ist_encodings|anguage)|regex_(set_options|encoding)|get_info)\b</string>
3413 <key>name</key>
3414 <string>support.function.mbstring.php</string>
3415 </dict>
3416 <dict>
3417 <key>match</key>
3418 <string>(?i)\bm(crypt_(c(fb|reate_iv|bc)|ofb|decrypt|e(nc(_(self_test|is_block_(algorithm(_mode)?|mode)|get_(supported_key_sizes|iv_size|key_size|algorithms_name|modes_name|block_size))|rypt)|cb)|list_(algorithms|modes)|ge(neric(_(init|deinit|end))?|t_(cipher_name|iv_size|key_size|block_size))|module_(self_test|close|is_block_(algorithm(_mode)?|mode)|open|get_(supported_key_sizes|algo_(key_size|block_size))))|decrypt_generic)\b</string>
3419 <key>name</key>
3420 <string>support.function.mcrypt.php</string>
3421 </dict>
3422 <dict>
3423 <key>match</key>
3424 <string>(?i)\bmemcache_debug\b</string>
3425 <key>name</key>
3426 <string>support.function.memcache.php</string>
3427 </dict>
3428 <dict>
3429 <key>match</key>
3430 <string>(?i)\bmhash(_(count|keygen_s2k|get_(hash_name|block_size)))?\b</string>
3431 <key>name</key>
3432 <string>support.function.mhash.php</string>
3433 </dict>
3434 <dict>
3435 <key>match</key>
3436 <string>(?i)\b(log_(cmd_(insert|delete|update)|killcursor|write_batch|reply|getmore)|bson_(decode|encode))\b</string>
3437 <key>name</key>
3438 <string>support.function.mongo.php</string>
3439 </dict>
3440 <dict>
3441 <key>match</key>
3442 <string>(?i)\bmysql_(s(tat|e(t_charset|lect_db))|num_(fields|rows)|c(onnect|l(ient_encoding|ose)|reate_db)|t(hread_id|ablename)|in(sert_id|fo)|d(ata_seek|rop_db|b_(name|query))|unbuffered_query|p(connect|ing)|e(scape_string|rr(no|or))|query|f(ield_(seek|name|t(ype|able)|flags|len)|etch_(object|field|lengths|a(ssoc|rray)|row)|ree_result)|list_(tables|dbs|processes|fields)|affected_rows|re(sult|al_escape_string)|get_(server_info|host_info|client_info|proto_info))\b</string>
3443 <key>name</key>
3444 <string>support.function.mysql.php</string>
3445 </dict>
3446 <dict>
3447 <key>match</key>
3448 <string>(?i)\bmysqli_(s(sl_set|t(ore_result|at|mt_(s(tore_result|end_long_data)|next_result|close|init|data_seek|prepare|execute|f(etch|ree_result)|attr_(set|get)|res(ult_metadata|et)|get_(warnings|result)|more_results|bind_(param|result)))|e(nd_(query|long_data)|t_(charset|opt|local_infile_(handler|default))|lect_db)|lave_query|avepoint)|next_result|c(ha(nge_user|racter_set_name)|o(nnect|mmit)|l(ient_encoding|ose))|thread_safe|init|options|d(isable_r(pl_parse|eads_from_master)|ump_debug_info|ebug|ata_seek)|use_result|p(ing|oll|aram_count|repare)|e(scape_string|nable_r(pl_parse|eads_from_master)|xecute|mbedded_server_(start|end))|kill|query|f(ield_seek|etch(_(object|field(s|_direct)?|a(ssoc|ll|rray)|row))?|ree_result)|autocommit|r(ollback|pl_(p(arse_enabled|robe)|query_type)|e(port|fresh|lease_savepoint|a(p_async_query|l_(connect|escape_string|query))))|get_(c(harset|onnection_stats|lient_(stats|info|version)|ache_stats)|warnings|links_stats|metadata)|m(ore_results|ulti_query|aster_query)|b(ind_(param|result)|egin_transaction))\b</string>
3449 <key>name</key>
3450 <string>support.function.mysqli.php</string>
3451 </dict>
3452 <dict>
3453 <key>match</key>
3454 <string>(?i)\bmysqlnd_memcache_(set|get_config)\b</string>
3455 <key>name</key>
3456 <string>support.function.mysqlnd-memcache.php</string>
3457 </dict>
3458 <dict>
3459 <key>match</key>
3460 <string>(?i)\bmysqlnd_ms_(set_(user_pick_server|qos)|dump_servers|query_is_select|fabric_select_(shard|global)|get_(stats|last_(used_connection|gtid))|xa_(commit|rollback|gc|begin)|match_wild)\b</string>
3461 <key>name</key>
3462 <string>support.function.mysqlnd-ms.php</string>
3463 </dict>
3464 <dict>
3465 <key>match</key>
3466 <string>(?i)\bmysqlnd_qc_(set_(storage_handler|cache_condition|is_select|user_handlers)|clear_cache|get_(normalized_query_trace_log|c(ore_stats|ache_info)|query_trace_log|available_handlers))\b</string>
3467 <key>name</key>
3468 <string>support.function.mysqlnd-qc.php</string>
3469 </dict>
3470 <dict>
3471 <key>match</key>
3472 <string>(?i)\bmysqlnd_uh_(set_(statement_proxy|connection_proxy)|convert_to_mysqlnd)\b</string>
3473 <key>name</key>
3474 <string>support.function.mysqlnd-uh.php</string>
3475 </dict>
3476 <dict>
3477 <key>match</key>
3478 <string>(?i)\b(s(yslog|ocket_(set_(timeout|blocking)|get_status)|et(cookie|rawcookie))|h(ttp_response_code|eader(s_(sent|list)|_re(gister_callback|move))?)|c(heckdnsrr|loselog)|i(net_(ntop|pton)|p2long)|openlog|d(ns_(check_record|get_(record|mx))|efine_syslog_variables)|pfsockopen|fsockopen|long2ip|get(servby(name|port)|host(name|by(name(l)?|addr))|protobyn(umber|ame)|mxrr))\b</string>
3479 <key>name</key>
3480 <string>support.function.network.php</string>
3481 </dict>
3482 <dict>
3483 <key>match</key>
3484 <string>(?i)\bnsapi_(virtual|re(sponse_headers|quest_headers))\b</string>
3485 <key>name</key>
3486 <string>support.function.nsapi.php</string>
3487 </dict>
3488 <dict>
3489 <key>match</key>
3490 <string>(?i)\boci(s(tatementtype|e(tprefetch|rverversion)|avelob(file)?)|n(umcols|ew(c(ollection|ursor)|descriptor)|logon)|c(o(l(umn(s(cale|ize)|name|type(raw)?|isnull|precision)|l(size|trim|a(ssign(elem)?|ppend)|getelem|max))|mmit)|loselob|ancel)|internaldebug|definebyname|_(s(tatement_type|e(t_(client_i(nfo|dentifier)|prefetch|edition|action|module_name)|rver_version))|n(um_(fields|rows)|ew_(c(o(nnect|llection)|ursor)|descriptor))|c(o(nnect|mmit)|l(ient_version|ose)|ancel)|internal_debug|d(isable_taf_callback|efine_by_name)|p(connect|a(ssword_change|rse))|e(rror|xecute)|f(ield_(s(cale|ize)|name|type(_raw)?|is_null|precision)|etch(_(object|a(ssoc|ll|rray)|row))?|ree_(statement|descriptor))|lob_(copy|is_equal)|r(ollback|e(sult|gister_taf_callback))|get_implicit_resultset|bind_(array_by_name|by_name))|p(logon|arse)|e(rror|xecute)|f(etch(statement|into)?|ree(statement|c(ollection|ursor)|desc))|write(temporarylob|lobtofile)|lo(adlob|go(n|ff))|r(o(wcount|llback)|esult)|bindbyname)\b</string>
3491 <key>name</key>
3492 <string>support.function.oci8.php</string>
3493 </dict>
3494 <dict>
3495 <key>match</key>
3496 <string>(?i)\bopcache_(compile_file|i(s_script_cached|nvalidate)|reset|get_(status|configuration))\b</string>
3497 <key>name</key>
3498 <string>support.function.opcache.php</string>
3499 </dict>
3500 <dict>
3501 <key>match</key>
3502 <string>(?i)\bopenssl_(s(ign|pki_(new|export(_challenge)?|verify)|eal)|c(sr_(sign|new|export(_to_file)?|get_(subject|public_key))|ipher_iv_length)|open|d(h_compute_key|igest|ecrypt)|p(ublic_(decrypt|encrypt)|k(cs(12_(export(_to_file)?|read)|7_(sign|decrypt|encrypt|verify))|ey_(new|export(_to_file)?|free|get_(details|p(ublic|rivate))))|rivate_(decrypt|encrypt)|bkdf2)|e(ncrypt|rror_string)|verify|free_key|random_pseudo_bytes|get_(c(ipher_methods|ert_locations)|p(ublickey|rivatekey)|md_methods)|x509_(check(_private_key|purpose)|parse|export(_to_file)?|f(ingerprint|ree)|read))\b</string>
3503 <key>name</key>
3504 <string>support.function.openssl.php</string>
3505 </dict>
3506 <dict>
3507 <key>match</key>
3508 <string>(?i)\b(o(utput_(add_rewrite_var|reset_rewrite_vars)|b_(start|clean|implicit_flush|end_(clean|flush)|flush|list_handlers|g(zhandler|et_(status|c(ontents|lean)|flush|le(ngth|vel)))))|flush)\b</string>
3509 <key>name</key>
3510 <string>support.function.output.php</string>
3511 </dict>
3512 <dict>
3513 <key>match</key>
3514 <string>(?i)\bpassword_(hash|needs_rehash|verify|get_info)\b</string>
3515 <key>name</key>
3516 <string>support.function.password.php</string>
3517 </dict>
3518 <dict>
3519 <key>match</key>
3520 <string>(?i)\bpcntl_(s(trerror|ig(nal(_(dispatch|get_handler))?|timedwait|procmask|waitinfo)|etpriority)|e(rrno|xec)|fork|w(stopsig|termsig|if(s(topped|ignaled)|exited)|exitstatus|ait(pid)?)|alarm|get(_last_error|priority))\b</string>
3521 <key>name</key>
3522 <string>support.function.pcntl.php</string>
3523 </dict>
3524 <dict>
3525 <key>match</key>
3526 <string>(?i)\bpg_(s(ocket|e(nd_(prepare|execute|query(_params)?)|t_(client_encoding|error_verbosity)|lect))|host|num_(fields|rows)|c(o(n(sume_input|nect(ion_(status|reset|busy)|_poll)?|vert)|py_(to|from))|l(ient_encoding|ose)|ancel_query)|t(ty|ra(nsaction_status|ce))|insert|options|d(elete|bname)|u(n(trace|escape_bytea)|pdate)|p(connect|ing|ort|ut_line|arameter_status|repare)|e(scape_(string|identifier|literal|bytea)|nd_copy|xecute)|version|query(_params)?|f(ield_(size|n(um|ame)|t(ype(_oid)?|able)|is_null|prtlen)|etch_(object|a(ssoc|ll(_columns)?|rray)|r(ow|esult))|lush|ree_result)|l(o_(seek|c(lose|reate)|t(ell|runcate)|import|open|unlink|export|write|read(_all)?)|ast_(notice|oid|error))|affected_rows|result_(s(tatus|eek)|error(_field)?)|get_(notify|pid|result)|meta_data)\b</string>
3527 <key>name</key>
3528 <string>support.function.pgsql.php</string>
3529 </dict>
3530 <dict>
3531 <key>match</key>
3532 <string>(?i)\b(virtual|apache_(setenv|note|child_terminate|lookup_uri|re(s(ponse_headers|et_timeout)|quest_headers)|get(_(version|modules)|env))|getallheaders)\b</string>
3533 <key>name</key>
3534 <string>support.function.php_apache.php</string>
3535 </dict>
3536 <dict>
3537 <key>match</key>
3538 <string>(?i)\bdom_import_simplexml\b</string>
3539 <key>name</key>
3540 <string>support.function.php_dom.php</string>
3541 </dict>
3542 <dict>
3543 <key>match</key>
3544 <string>(?i)\bftp_(s(sl_connect|ystype|i(te|ze)|et_option)|n(list|b_(continue|put|f(put|get)|get))|c(h(dir|mod)|onnect|dup|lose)|delete|p(ut|wd|asv)|exec|quit|f(put|get)|login|alloc|r(ename|aw(list)?|mdir)|get(_option)?|m(dtm|kdir))\b</string>
3545 <key>name</key>
3546 <string>support.function.php_ftp.php</string>
3547 </dict>
3548 <dict>
3549 <key>match</key>
3550 <string>(?i)\bimap_(s(can(mailbox)?|tatus|ort|ubscribe|e(t(_quota|flag_full|acl)|arch)|avebody)|header(s|info)?|num_(recent|msg)|c(heck|l(ose|earflag_full)|reate(mailbox)?)|t(hread|imeout)|open|delete(mailbox)?|8bit|u(n(subscribe|delete)|tf(7_(decode|encode)|8)|id)|ping|e(rrors|xpunge)|qprint|fetch(structure|header|text|_overview|mime|body)|l(sub|ist(s(can|ubscribed)|mailbox)?|ast_error)|a(ppend|lerts)|r(e(name(mailbox)?|open)|fc822_(parse_(headers|adrlist)|write_address))|g(c|et(subscribed|_quota(root)?|acl|mailboxes))|m(sgno|ime_header_decode|ail(_(co(py|mpose)|move)|boxmsginfo)?)|b(inary|ody(struct)?|ase64))\b</string>
3551 <key>name</key>
3552 <string>support.function.php_imap.php</string>
3553 </dict>
3554 <dict>
3555 <key>match</key>
3556 <string>(?i)\bmssql_(select_db|n(um_(fields|rows)|ext_result)|c(onnect|lose)|init|data_seek|pconnect|execute|query|f(ield_(seek|name|type|length)|etch_(object|field|a(ssoc|rray)|row|batch)|ree_(statement|result))|r(ows_affected|esult)|g(uid_string|et_last_message)|min_(error_severity|message_severity)|bind)\b</string>
3557 <key>name</key>
3558 <string>support.function.php_mssql.php</string>
3559 </dict>
3560 <dict>
3561 <key>match</key>
3562 <string>(?i)\bodbc_(s(tatistics|pecialcolumns|etoption)|n(um_(fields|rows)|ext_result)|c(o(nnect|lumn(s|privileges)|mmit)|ursor|lose(_all)?)|table(s|privileges)|d(o|ata_source)|p(connect|r(imarykeys|ocedure(s|columns)|epare))|e(rror(msg)?|xec(ute)?)|f(ield_(scale|n(um|ame)|type|precision|len)|oreignkeys|etch_(into|object|array|row)|ree_result)|longreadlen|autocommit|r(ollback|esult(_all)?)|gettypeinfo|binmode)\b</string>
3563 <key>name</key>
3564 <string>support.function.php_odbc.php</string>
3565 </dict>
3566 <dict>
3567 <key>match</key>
3568 <string>(?i)\bpreg_(split|quote|filter|last_error|replace(_callback(_array)?)?|grep|match(_all)?)\b</string>
3569 <key>name</key>
3570 <string>support.function.php_pcre.php</string>
3571 </dict>
3572 <dict>
3573 <key>match</key>
3574 <string>(?i)\b(spl_(classes|object_hash|autoload(_(call|unregister|extensions|functions|register))?)|class_(implements|uses|parents)|iterator_(count|to_array|apply))\b</string>
3575 <key>name</key>
3576 <string>support.function.php_spl.php</string>
3577 </dict>
3578 <dict>
3579 <key>match</key>
3580 <string>(?i)\bzip_(close|open|entry_(name|c(ompress(ionmethod|edsize)|lose)|open|filesize|read)|read)\b</string>
3581 <key>name</key>
3582 <string>support.function.php_zip.php</string>
3583 </dict>
3584 <dict>
3585 <key>match</key>
3586 <string>(?i)\bposix_(s(trerror|et(sid|uid|pgid|e(uid|gid)|rlimit|gid))|ctermid|t(tyname|imes)|i(satty|nitgroups)|uname|errno|kill|access|get(sid|cwd|uid|_last_error|p(id|pid|w(nam|uid)|g(id|rp))|e(uid|gid)|login|rlimit|g(id|r(nam|oups|gid)))|mk(nod|fifo))\b</string>
3587 <key>name</key>
3588 <string>support.function.posix.php</string>
3589 </dict>
3590 <dict>
3591 <key>match</key>
3592 <string>(?i)\bset(threadtitle|proctitle)\b</string>
3593 <key>name</key>
3594 <string>support.function.proctitle.php</string>
3595 </dict>
3596 <dict>
3597 <key>match</key>
3598 <string>(?i)\bpspell_(s(tore_replacement|uggest|ave_wordlist)|new(_(config|personal))?|c(heck|onfig_(save_repl|create|ignore|d(ict_dir|ata_dir)|personal|r(untogether|epl)|mode)|lear_session)|add_to_(session|personal))\b</string>
3599 <key>name</key>
3600 <string>support.function.pspell.php</string>
3601 </dict>
3602 <dict>
3603 <key>match</key>
3604 <string>(?i)\breadline(_(c(ompletion_function|lear_history|allback_(handler_(install|remove)|read_char))|info|on_new_line|write_history|list_history|add_history|re(display|ad_history)))?\b</string>
3605 <key>name</key>
3606 <string>support.function.readline.php</string>
3607 </dict>
3608 <dict>
3609 <key>match</key>
3610 <string>(?i)\brecode(_(string|file))?\b</string>
3611 <key>name</key>
3612 <string>support.function.recode.php</string>
3613 </dict>
3614 <dict>
3615 <key>match</key>
3616 <string>(?i)\brrd(c_disconnect|_(create|tune|info|update|error|version|f(irst|etch)|last(update)?|restore|graph|xport))\b</string>
3617 <key>name</key>
3618 <string>support.function.rrd.php</string>
3619 </dict>
3620 <dict>
3621 <key>match</key>
3622 <string>(?i)\b(s(hm_(has_var|detach|put_var|attach|remove(_var)?|get_var)|em_(acquire|re(lease|move)|get))|ftok|msg_(s(tat_queue|e(nd|t_queue))|queue_exists|re(ceive|move_queue)|get_queue))\b</string>
3623 <key>name</key>
3624 <string>support.function.sem.php</string>
3625 </dict>
3626 <dict>
3627 <key>match</key>
3628 <string>(?i)\bsession_(s(ta(tus|rt)|et_(save_handler|cookie_params)|ave_path)|name|c(ommit|ache_(expire|limiter)|reate_id)|i(s_registered|d)|de(stroy|code)|un(set|register)|encode|write_close|abort|re(set|g(ister(_shutdown)?|enerate_id))|g(c|et_cookie_params)|module_name)\b</string>
3629 <key>name</key>
3630 <string>support.function.session.php</string>
3631 </dict>
3632 <dict>
3633 <key>match</key>
3634 <string>(?i)\bshmop_(size|close|open|delete|write|read)\b</string>
3635 <key>name</key>
3636 <string>support.function.shmop.php</string>
3637 </dict>
3638 <dict>
3639 <key>match</key>
3640 <string>(?i)\bsimplexml_(import_dom|load_(string|file))\b</string>
3641 <key>name</key>
3642 <string>support.function.simplexml.php</string>
3643 </dict>
3644 <dict>
3645 <key>match</key>
3646 <string>(?i)\bsnmp(set|2_(set|walk|real_walk|get(next)?)|_(set_(oid_(numeric_print|output_format)|enum_print|valueretrieval|quick_print)|read_mib|get_(valueretrieval|quick_print))|3_(set|walk|real_walk|get(next)?)|walk(oid)?|realwalk|get(next)?)\b</string>
3647 <key>name</key>
3648 <string>support.function.snmp.php</string>
3649 </dict>
3650 <dict>
3651 <key>match</key>
3652 <string>(?i)\b(is_soap_fault|use_soap_error_handler)\b</string>
3653 <key>name</key>
3654 <string>support.function.soap.php</string>
3655 </dict>
3656 <dict>
3657 <key>match</key>
3658 <string>(?i)\bsocket_(s(hutdown|trerror|e(nd(to|msg)?|t(opt|_(nonblock|option|block))|lect))|c(onnect|l(ose|ear_error)|reate(_(pair|listen))?|msg_space)|import_stream|write|l(isten|ast_error)|accept|re(cv(from|msg)?|ad)|get(sockname|opt|_option|peername)|bind)\b</string>
3659 <key>name</key>
3660 <string>support.function.sockets.php</string>
3661 </dict>
3662 <dict>
3663 <key>match</key>
3664 <string>(?i)\bsqlite_(s(ingle_query|eek)|has_(prev|more)|n(um_(fields|rows)|ext)|c(hanges|olumn|urrent|lose|reate_(function|aggregate))|open|u(nbuffered_query|df_(decode_binary|encode_binary))|p(open|rev)|e(scape_string|rror_string|xec)|valid|key|query|f(ield_name|etch_(s(tring|ingle)|column_types|object|a(ll|rray))|actory)|l(ib(encoding|version)|ast_(insert_rowid|error))|array_query|rewind|busy_timeout)\b</string>
3665 <key>name</key>
3666 <string>support.function.sqlite.php</string>
3667 </dict>
3668 <dict>
3669 <key>match</key>
3670 <string>(?i)\bsqlsrv_(se(nd_stream_data|rver_info)|has_rows|n(um_(fields|rows)|ext_result)|c(o(n(nect|figure)|mmit)|l(ient_info|ose)|ancel)|prepare|e(rrors|xecute)|query|f(ield_metadata|etch(_(object|array))?|ree_stmt)|ro(ws_affected|llback)|get_(config|field)|begin_transaction)\b</string>
3671 <key>name</key>
3672 <string>support.function.sqlsrv.php</string>
3673 </dict>
3674 <dict>
3675 <key>match</key>
3676 <string>(?i)\bstats_(s(ta(ndard_deviation|t_(noncentral_t|correlation|in(nerproduct|dependent_t)|p(owersum|ercentile|aired_t)|gennch|binomial_coef))|kew)|harmonic_mean|c(ovariance|df_(n(oncentral_(chisquare|f)|egative_binomial)|c(hisquare|auchy)|t|uniform|poisson|exponential|f|weibull|l(ogistic|aplace)|gamma|b(inomial|eta)))|den(s_(n(ormal|egative_binomial)|c(hisquare|auchy)|t|pmf_(hypergeometric|poisson|binomial)|exponential|f|weibull|l(ogistic|aplace)|gamma|beta)|_uniform)|variance|kurtosis|absolute_deviation|rand_(setall|phrase_to_seeds|ranf|ge(n_(no(ncen(tral_(t|f)|ral_chisquare)|rmal)|chisquare|t|i(nt|uniform|poisson|binomial(_negative)?)|exponential|f(uniform)?|gamma|beta)|t_seeds)))\b</string>
3677 <key>name</key>
3678 <string>support.function.stats.php</string>
3679 </dict>
3680 <dict>
3681 <key>match</key>
3682 <string>(?i)\bs(tream_(s(ocket_(s(hutdown|e(ndto|rver))|client|pair|enable_crypto|accept|recvfrom|get_name)|upports_lock|e(t_(chunk_size|timeout|write_buffer|read_buffer|blocking)|lect))|notification_callback|co(ntext_(set_(option|default|params)|create|get_(options|default|params))|py_to_stream)|is_local|encoding|filter_(prepend|append|re(gister|move))|wrapper_(unregister|re(store|gister))|re(solve_include_path|gister_wrapper)|get_(contents|transports|filters|wrappers|line|meta_data)|bucket_(new|prepend|append|make_writeable))|et_socket_blocking)\b</string>
3683 <key>name</key>
3684 <string>support.function.streamsfuncs.php</string>
3685 </dict>
3686 <dict>
3687 <key>match</key>
3688 <string>(?i)\b(s(scanf|ha1(_file)?|tr(s(tr|pn)|n(c(asecmp|mp)|atc(asecmp|mp))|c(spn|hr|oll|asecmp|mp)|t(o(upper|k|lower)|r)|i(str|p(slashes|cslashes|os|_tags))|_(s(huffle|plit)|ireplace|pad|word_count|r(ot13|ep(eat|lace))|getcsv)|p(os|brk)|len|r(chr|ipos|pos|ev))|imilar_text|oundex|ubstr(_(co(unt|mpare)|replace))?|printf|etlocale)|h(tml(specialchars(_decode)?|_entity_decode|entities)|e(x2bin|brev(c)?))|n(umber_format|l(2br|_langinfo))|c(h(op|unk_split|r)|o(nvert_(cyr_string|uu(decode|encode))|unt_chars)|r(ypt|c32))|trim|implode|ord|uc(first|words)|join|p(arse_str|rint(f)?)|e(cho|xplode)|v(sprintf|printf|fprintf)|quote(d_printable_(decode|encode)|meta)|fprintf|wordwrap|l(cfirst|trim|ocaleconv|evenshtein)|add(slashes|cslashes)|rtrim|get_html_translation_table|m(oney_format|d5(_file)?|etaphone)|bin2hex)\b</string>
3689 <key>name</key>
3690 <string>support.function.string.php</string>
3691 </dict>
3692 <dict>
3693 <key>match</key>
3694 <string>(?i)\bsybase_(se(t_message_handler|lect_db)|num_(fields|rows)|c(onnect|lose)|d(eadlock_retry_count|ata_seek)|unbuffered_query|pconnect|query|f(ield_seek|etch_(object|field|a(ssoc|rray)|row)|ree_result)|affected_rows|result|get_last_message|min_(server_severity|client_severity|error_severity|message_severity))\b</string>
3695 <key>name</key>
3696 <string>support.function.sybase.php</string>
3697 </dict>
3698 <dict>
3699 <key>match</key>
3700 <string>(?i)\b(taint|is_tainted|untaint)\b</string>
3701 <key>name</key>
3702 <string>support.function.taint.php</string>
3703 </dict>
3704 <dict>
3705 <key>match</key>
3706 <string>(?i)\b(tidy_(s(et(opt|_encoding)|ave_config)|c(onfig_count|lean_repair)|is_x(html|ml)|diagnose|parse_(string|file)|error_count|warning_count|load_config|access_count|re(set_config|pair_(string|file))|get(opt|_(status|h(tml(_ver)?|ead)|config|o(utput|pt_doc)|r(oot|elease)|body)))|ob_tidyhandler)\b</string>
3707 <key>name</key>
3708 <string>support.function.tidy.php</string>
3709 </dict>
3710 <dict>
3711 <key>match</key>
3712 <string>(?i)\btoken_(name|get_all)\b</string>
3713 <key>name</key>
3714 <string>support.function.tokenizer.php</string>
3715 </dict>
3716 <dict>
3717 <key>match</key>
3718 <string>(?i)\btrader_(s(t(och(f|rsi)?|ddev)|in(h)?|u(m|b)|et_(compat|unstable_period)|qrt|ar(ext)?|ma)|ht_(sine|trend(line|mode)|dcp(hase|eriod)|phasor)|natr|c(ci|o(s(h)?|rrel)|dl(s(ho(otingstar|rtline)|t(icksandwich|alledpattern)|pinningtop|eparatinglines)|h(i(kkake(mod)?|ghwave)|omingpigeon|a(ngingman|rami(cross)?|mmer))|c(o(ncealbabyswall|unterattack)|losingmarubozu)|t(hrusting|a(sukigap|kuri)|ristar)|i(n(neck|vertedhammer)|dentical3crows)|2crows|onneck|d(oji(star)?|arkcloudcover|ragonflydoji)|u(nique3river|psidegap2crows)|3(starsinsouth|inside|outside|whitesoldiers|linestrike|blackcrows)|piercing|e(ngulfing|vening(star|dojistar))|kicking(bylength)?|l(ongl(ine|eggeddoji)|adderbottom)|a(dvanceblock|bandonedbaby)|ri(sefall3methods|ckshawman)|g(apsidesidewhite|ravestonedoji)|xsidegap3methods|m(orning(star|dojistar)|a(t(hold|chinglow)|rubozu))|b(elthold|reakaway))|eil|mo)|t(sf|ypprice|3|ema|an(h)?|r(i(x|ma)|ange))|obv|d(iv|ema|x)|ultosc|p(po|lus_d(i|m))|e(rrno|xp|ma)|var|kama|floor|w(clprice|illr|ma)|l(n|inearreg(_(slope|intercept|angle))?|og10)|a(sin|cos|t(an|r)|d(osc|d|x(r)?)?|po|vgprice|roon(osc)?)|r(si|oc(p|r(100)?)?)|get_(compat|unstable_period)|m(i(n(index|us_d(i|m)|max(index)?)?|dp(oint|rice))|om|ult|edprice|fi|a(cd(ext|fix)?|vp|x(index)?|ma)?)|b(op|eta|bands))\b</string>
3719 <key>name</key>
3720 <string>support.function.trader.php</string>
3721 </dict>
3722 <dict>
3723 <key>match</key>
3724 <string>(?i)\bUI\\(Draw\\Text\\Font\\fontFamilies|quit|run)\b</string>
3725 <key>name</key>
3726 <string>support.function.ui.php</string>
3727 </dict>
3728 <dict>
3729 <key>match</key>
3730 <string>(?i)\buopz_(co(py|mpose)|implement|overload|delete|undefine|extend|f(unction|lags)|re(store|name|define)|backup)\b</string>
3731 <key>name</key>
3732 <string>support.function.uopz.php</string>
3733 </dict>
3734 <dict>
3735 <key>match</key>
3736 <string>(?i)\b(http_build_query|url(decode|encode)|parse_url|rawurl(decode|encode)|get_(headers|meta_tags)|base64_(decode|encode))\b</string>
3737 <key>name</key>
3738 <string>support.function.url.php</string>
3739 </dict>
3740 <dict>
3741 <key>match</key>
3742 <string>(?i)\b(s(trval|e(ttype|rialize))|i(s(set|_(s(calar|tring)|nu(ll|meric)|callable|i(nt(eger)?|terable)|object|double|float|long|array|re(source|al)|bool))|ntval|mport_request_variables)|d(oubleval|ebug_zval_dump)|unse(t|rialize)|print_r|empty|var_(dump|export)|floatval|get(type|_(defined_vars|resource_type))|boolval)\b</string>
3743 <key>name</key>
3744 <string>support.function.var.php</string>
3745 </dict>
3746 <dict>
3747 <key>match</key>
3748 <string>(?i)\bwddx_(serialize_va(lue|rs)|deserialize|packet_(start|end)|add_vars)\b</string>
3749 <key>name</key>
3750 <string>support.function.wddx.php</string>
3751 </dict>
3752 <dict>
3753 <key>match</key>
3754 <string>(?i)\bxhprof_(sample_(disable|enable)|disable|enable)\b</string>
3755 <key>name</key>
3756 <string>support.function.xhprof.php</string>
3757 </dict>
3758 <dict>
3759 <key>match</key>
3760 <string>(?i)\b(utf8_(decode|encode)|xml_(set_(start_namespace_decl_handler|notation_decl_handler|character_data_handler|object|default_handler|unparsed_entity_decl_handler|processing_instruction_handler|e(nd_namespace_decl_handler|lement_handler|xternal_entity_ref_handler))|parse(_into_struct|r_(set_option|create(_ns)?|free|get_option))?|error_string|get_(current_(column_number|line_number|byte_index)|error_code)))\b</string>
3761 <key>name</key>
3762 <string>support.function.xml.php</string>
3763 </dict>
3764 <dict>
3765 <key>match</key>
3766 <string>(?i)\bxmlrpc_(se(t_type|rver_(c(all_method|reate)|destroy|add_introspection_data|register_(introspection_callback|method)))|is_fault|decode(_request)?|parse_method_descriptions|encode(_request)?|get_type)\b</string>
3767 <key>name</key>
3768 <string>support.function.xmlrpc.php</string>
3769 </dict>
3770 <dict>
3771 <key>match</key>
3772 <string>(?i)\bxmlwriter_(s(tart_(c(omment|data)|d(td(_(e(ntity|lement)|attlist))?|ocument)|pi|element(_ns)?|attribute(_ns)?)|et_indent(_string)?)|text|o(utput_memory|pen_(uri|memory))|end_(c(omment|data)|d(td(_(e(ntity|lement)|attlist))?|ocument)|pi|element|attribute)|f(ull_end_element|lush)|write_(c(omment|data)|dtd(_(e(ntity|lement)|attlist))?|pi|element(_ns)?|attribute(_ns)?|raw))\b</string>
3773 <key>name</key>
3774 <string>support.function.xmlwriter.php</string>
3775 </dict>
3776 <dict>
3777 <key>match</key>
3778 <string>(?i)\b(inflate_(init|add)|zlib_(decode|encode|get_coding_type)|deflate_(init|add)|readgzfile|gz(seek|c(ompress|lose)|tell|inflate|open|de(code|flate)|uncompress|p(uts|assthru)|e(ncode|of)|file|write|re(wind|ad)|get(s(s)?|c)))\b</string>
3779 <key>name</key>
3780 <string>support.function.zlib.php</string>
3781 </dict>
3782 <dict>
3783 <key>match</key>
3784 <string>(?i)\bis_int(eger)?\b</string>
3785 <key>name</key>
3786 <string>support.function.alias.php</string>
3787 </dict>
3788 </array>
3789 </dict>
3790 <key>user-function-call</key>
3791 <dict>
3792 <key>begin</key>
3793 <string>(?i)(?=[a-z_0-9\\]*[a-z_][a-z0-9_]*\s*\()</string>
3794 <key>end</key>
3795 <string>(?i)[a-z_][a-z_0-9]*(?=\s*\()</string>
3796 <key>name</key>
3797 <string>meta.function-call.php</string>
3798 <key>patterns</key>
3799 <array>
3800 <dict>
3801 <key>include</key>
3802 <string>#namespace</string>
3803 </dict>
3804 </array>
3805 </dict>
3806 <key>var_basic</key>
3807 <dict>
3808 <key>patterns</key>
3809 <array>
3810 <dict>
3811 <key>captures</key>
3812 <dict>
3813 <key>1</key>
3814 <dict>
3815 <key>name</key>
3816 <string>punctuation.definition.variable.php</string>
3817 </dict>
3818 </dict>
3819 <key>match</key>
3820 <string>(?x)
3821 (\$+)[a-zA-Z_\x{7f}-\x{ff}]
3822 [a-zA-Z0-9_\x{7f}-\x{ff}]*?\b</string>
3823 <key>name</key>
3824 <string>variable.other.php</string>
3825 </dict>
3826 </array>
3827 </dict>
3828 <key>var_global</key>
3829 <dict>
3830 <key>captures</key>
3831 <dict>
3832 <key>1</key>
3833 <dict>
3834 <key>name</key>
3835 <string>punctuation.definition.variable.php</string>
3836 </dict>
3837 </dict>
3838 <key>match</key>
3839 <string>(\$)((_(COOKIE|FILES|GET|POST|REQUEST))|arg(v|c))\b</string>
3840 <key>name</key>
3841 <string>variable.other.global.php</string>
3842 </dict>
3843 <key>var_global_safer</key>
3844 <dict>
3845 <key>captures</key>
3846 <dict>
3847 <key>1</key>
3848 <dict>
3849 <key>name</key>
3850 <string>punctuation.definition.variable.php</string>
3851 </dict>
3852 </dict>
3853 <key>match</key>
3854 <string>(\$)((GLOBALS|_(ENV|SERVER|SESSION)))</string>
3855 <key>name</key>
3856 <string>variable.other.global.safer.php</string>
3857 </dict>
3858 <key>variable-name</key>
3859 <dict>
3860 <key>patterns</key>
3861 <array>
3862 <dict>
3863 <key>include</key>
3864 <string>#var_global</string>
3865 </dict>
3866 <dict>
3867 <key>include</key>
3868 <string>#var_global_safer</string>
3869 </dict>
3870 <dict>
3871 <key>captures</key>
3872 <dict>
3873 <key>1</key>
3874 <dict>
3875 <key>name</key>
3876 <string>variable.other.php</string>
3877 </dict>
3878 <key>10</key>
3879 <dict>
3880 <key>name</key>
3881 <string>string.unquoted.index.php</string>
3882 </dict>
3883 <key>11</key>
3884 <dict>
3885 <key>name</key>
3886 <string>punctuation.section.array.end.php</string>
3887 </dict>
3888 <key>2</key>
3889 <dict>
3890 <key>name</key>
3891 <string>punctuation.definition.variable.php</string>
3892 </dict>
3893 <key>4</key>
3894 <dict>
3895 <key>name</key>
3896 <string>keyword.operator.class.php</string>
3897 </dict>
3898 <key>5</key>
3899 <dict>
3900 <key>name</key>
3901 <string>variable.other.property.php</string>
3902 </dict>
3903 <key>6</key>
3904 <dict>
3905 <key>name</key>
3906 <string>punctuation.section.array.begin.php</string>
3907 </dict>
3908 <key>7</key>
3909 <dict>
3910 <key>name</key>
3911 <string>constant.numeric.index.php</string>
3912 </dict>
3913 <key>8</key>
3914 <dict>
3915 <key>name</key>
3916 <string>variable.other.index.php</string>
3917 </dict>
3918 <key>9</key>
3919 <dict>
3920 <key>name</key>
3921 <string>punctuation.definition.variable.php</string>
3922 </dict>
3923 </dict>
3924 <key>comment</key>
3925 <string>Simple syntax: $foo, $foo[0], $foo[$bar], $foo-&gt;bar</string>
3926 <key>match</key>
3927 <string>(?x)
3928 ((\$)(?&lt;name&gt;[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*))
3929 (?:
3930 (-&gt;)(\g&lt;name&gt;)
3931 |
3932 (\[)
3933 (?:(\d+)|((\$)\g&lt;name&gt;)|(\w+))
3934 (\])
3935 )?
3936 </string>
3937 </dict>
3938 <dict>
3939 <key>captures</key>
3940 <dict>
3941 <key>1</key>
3942 <dict>
3943 <key>name</key>
3944 <string>variable.other.php</string>
3945 </dict>
3946 <key>2</key>
3947 <dict>
3948 <key>name</key>
3949 <string>punctuation.definition.variable.php</string>
3950 </dict>
3951 <key>4</key>
3952 <dict>
3953 <key>name</key>
3954 <string>punctuation.definition.variable.php</string>
3955 </dict>
3956 </dict>
3957 <key>comment</key>
3958 <string>Simple syntax with braces: "foo${bar}baz"</string>
3959 <key>match</key>
3960 <string>(?x)
3961 ((\$\{)(?&lt;name&gt;[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(\}))
3962 </string>
3963 </dict>
3964 </array>
3965 </dict>
3966 <key>variables</key>
3967 <dict>
3968 <key>patterns</key>
3969 <array>
3970 <dict>
3971 <key>include</key>
3972 <string>#var_global</string>
3973 </dict>
3974 <dict>
3975 <key>include</key>
3976 <string>#var_global_safer</string>
3977 </dict>
3978 <dict>
3979 <key>include</key>
3980 <string>#var_basic</string>
3981 </dict>
3982 <dict>
3983 <key>begin</key>
3984 <string>(\$\{)(?=.*?\})</string>
3985 <key>beginCaptures</key>
3986 <dict>
3987 <key>1</key>
3988 <dict>
3989 <key>name</key>
3990 <string>punctuation.definition.variable.php</string>
3991 </dict>
3992 </dict>
3993 <key>end</key>
3994 <string>(\})</string>
3995 <key>endCaptures</key>
3996 <dict>
3997 <key>1</key>
3998 <dict>
3999 <key>name</key>
4000 <string>punctuation.definition.variable.php</string>
4001 </dict>
4002 </dict>
4003 <key>patterns</key>
4004 <array>
4005 <dict>
4006 <key>include</key>
4007 <string>#language</string>
4008 </dict>
4009 </array>
4010 </dict>
4011 </array>
4012 </dict>
4013 </dict>
4014 <key>scopeName</key>
4015 <string>text.html.php</string>
4016 <key>uuid</key>
4017 <string>22986475-8CA5-11D9-AEDD-000D93C8BE28</string>
4018</dict>
4019</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/powershell.plist created+1614
......@@ -0,0 +1,1614 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>fileTypes</key>
6 <array>
7 <string>ps1</string>
8 <string>psm1</string>
9 <string>psd1</string>
10 </array>
11 <key>name</key>
12 <string>PowerShell</string>
13 <key>patterns</key>
14 <array>
15 <dict>
16 <key>begin</key>
17 <string>&lt;#</string>
18 <key>beginCaptures</key>
19 <dict>
20 <key>0</key>
21 <dict>
22 <key>name</key>
23 <string>punctuation.definition.comment.block.begin.powershell</string>
24 </dict>
25 </dict>
26 <key>end</key>
27 <string>#&gt;</string>
28 <key>endCaptures</key>
29 <dict>
30 <key>0</key>
31 <dict>
32 <key>name</key>
33 <string>punctuation.definition.comment.block.end.powershell</string>
34 </dict>
35 </dict>
36 <key>name</key>
37 <string>comment.block.powershell</string>
38 <key>patterns</key>
39 <array>
40 <dict>
41 <key>include</key>
42 <string>#commentEmbeddedDocs</string>
43 </dict>
44 </array>
45 </dict>
46 <dict>
47 <key>match</key>
48 <string>[2-6]&gt;&amp;1|&gt;&gt;|&gt;|&lt;&lt;|&lt;|&gt;|&gt;\||[1-6]&gt;|[1-6]&gt;&gt;</string>
49 <key>name</key>
50 <string>keyword.operator.redirection.powershell</string>
51 </dict>
52 <dict>
53 <key>include</key>
54 <string>#commands</string>
55 </dict>
56 <dict>
57 <key>include</key>
58 <string>#commentLine</string>
59 </dict>
60 <dict>
61 <key>include</key>
62 <string>#variable</string>
63 </dict>
64 <dict>
65 <key>include</key>
66 <string>#subexpression</string>
67 </dict>
68 <dict>
69 <key>include</key>
70 <string>#function</string>
71 </dict>
72 <dict>
73 <key>include</key>
74 <string>#attribute</string>
75 </dict>
76 <dict>
77 <key>include</key>
78 <string>#UsingDirective</string>
79 </dict>
80 <dict>
81 <key>include</key>
82 <string>#type</string>
83 </dict>
84 <dict>
85 <key>include</key>
86 <string>#hashtable</string>
87 </dict>
88 <dict>
89 <key>include</key>
90 <string>#doubleQuotedString</string>
91 </dict>
92 <dict>
93 <key>include</key>
94 <string>#scriptblock</string>
95 </dict>
96 <dict>
97 <key>comment</key>
98 <string>Needed to parse stuff correctly in 'argument mode'. (See about_parsing.)</string>
99 <key>include</key>
100 <string>#doubleQuotedStringEscapes</string>
101 </dict>
102 <dict>
103 <key>begin</key>
104 <string>['\x{2018}-\x{201B}]</string>
105 <key>beginCaptures</key>
106 <dict>
107 <key>0</key>
108 <dict>
109 <key>name</key>
110 <string>punctuation.definition.string.begin.powershell</string>
111 </dict>
112 </dict>
113 <key>end</key>
114 <string>['\x{2018}-\x{201B}]</string>
115 <key>applyEndPatternLast</key>
116 <true/>
117 <key>endCaptures</key>
118 <dict>
119 <key>0</key>
120 <dict>
121 <key>name</key>
122 <string>punctuation.definition.string.end.powershell</string>
123 </dict>
124 </dict>
125 <key>name</key>
126 <string>string.quoted.single.powershell</string>
127 <key>patterns</key>
128 <array>
129 <dict>
130 <key>match</key>
131 <string>['\x{2018}-\x{201B}]{2}</string>
132 <key>name</key>
133 <string>constant.character.escape.powershell</string>
134 </dict>
135 </array>
136 </dict>
137 <dict>
138 <key>begin</key>
139 <string>(@["\x{201C}-\x{201E}])\s*$</string>
140 <key>beginCaptures</key>
141 <dict>
142 <key>1</key>
143 <dict>
144 <key>name</key>
145 <string>punctuation.definition.string.begin.powershell</string>
146 </dict>
147 </dict>
148 <key>end</key>
149 <string>^["\x{201C}-\x{201E}]@</string>
150 <key>endCaptures</key>
151 <dict>
152 <key>0</key>
153 <dict>
154 <key>name</key>
155 <string>punctuation.definition.string.end.powershell</string>
156 </dict>
157 </dict>
158 <key>name</key>
159 <string>string.quoted.double.heredoc.powershell</string>
160 <key>patterns</key>
161 <array>
162 <dict>
163 <key>include</key>
164 <string>#variableNoProperty</string>
165 </dict>
166 <dict>
167 <key>include</key>
168 <string>#doubleQuotedStringEscapes</string>
169 </dict>
170 <dict>
171 <key>include</key>
172 <string>#interpolation</string>
173 </dict>
174 </array>
175 </dict>
176 <dict>
177 <key>begin</key>
178 <string>(@['\x{2018}-\x{201B}])\s*$</string>
179 <key>beginCaptures</key>
180 <dict>
181 <key>1</key>
182 <dict>
183 <key>name</key>
184 <string>punctuation.definition.string.begin.powershell</string>
185 </dict>
186 </dict>
187 <key>end</key>
188 <string>^['\x{2018}-\x{201B}]@</string>
189 <key>endCaptures</key>
190 <dict>
191 <key>0</key>
192 <dict>
193 <key>name</key>
194 <string>punctuation.definition.string.end.powershell</string>
195 </dict>
196 </dict>
197 <key>name</key>
198 <string>string.quoted.single.heredoc.powershell</string>
199 </dict>
200 <dict>
201 <key>include</key>
202 <string>#numericConstant</string>
203 </dict>
204 <dict>
205 <key>begin</key>
206 <string>(@)(\()</string>
207 <key>beginCaptures</key>
208 <dict>
209 <key>1</key>
210 <dict>
211 <key>name</key>
212 <string>keyword.other.array.begin.powershell</string>
213 </dict>
214 <key>2</key>
215 <dict>
216 <key>name</key>
217 <string>punctuation.section.group.begin.powershell</string>
218 </dict>
219 </dict>
220 <key>end</key>
221 <string>\)</string>
222 <key>endCaptures</key>
223 <dict>
224 <key>0</key>
225 <dict>
226 <key>name</key>
227 <string>punctuation.section.group.end.powershell</string>
228 </dict>
229 </dict>
230 <key>name</key>
231 <string>meta.group.array-expression.powershell</string>
232 <key>patterns</key>
233 <array>
234 <dict>
235 <key>include</key>
236 <string>$self</string>
237 </dict>
238 </array>
239 </dict>
240 <dict>
241 <key>begin</key>
242 <string>((\$))(\()</string>
243 <key>beginCaptures</key>
244 <dict>
245 <key>1</key>
246 <dict>
247 <key>name</key>
248 <string>keyword.other.substatement.powershell</string>
249 </dict>
250 <key>2</key>
251 <dict>
252 <key>name</key>
253 <string>punctuation.definition.subexpression.powershell</string>
254 </dict>
255 <key>3</key>
256 <dict>
257 <key>name</key>
258 <string>punctuation.section.group.begin.powershell</string>
259 </dict>
260 </dict>
261 <key>comment</key>
262 <string>TODO: move to repo; make recursive.</string>
263 <key>end</key>
264 <string>\)</string>
265 <key>endCaptures</key>
266 <dict>
267 <key>0</key>
268 <dict>
269 <key>name</key>
270 <string>punctuation.section.group.end.powershell</string>
271 </dict>
272 </dict>
273 <key>name</key>
274 <string>meta.group.complex.subexpression.powershell</string>
275 <key>patterns</key>
276 <array>
277 <dict>
278 <key>include</key>
279 <string>$self</string>
280 </dict>
281 </array>
282 </dict>
283 <dict>
284 <key>match</key>
285 <string>(\b(([A-Za-z0-9\-_\.]+)\.(?i:exe|com|cmd|bat))\b)</string>
286 <key>name</key>
287 <string>support.function.powershell</string>
288 </dict>
289 <dict>
290 <key>match</key>
291 <string>(?&lt;!\w|-|\.)((?i:begin|break|catch|clean|continue|data|default|define|do|dynamicparam|else|elseif|end|exit|finally|for|from|if|in|inlinescript|parallel|param|process|return|sequence|switch|throw|trap|try|until|var|while)|%|\?)(?!\w)</string>
292 <key>name</key>
293 <string>keyword.control.powershell</string>
294 </dict>
295 <dict>
296 <key>match</key>
297 <string>(?&lt;!\w|-|[^\)]\.)((?i:(foreach|where)(?!-object))|%|\?)(?!\w)</string>
298 <key>name</key>
299 <string>keyword.control.powershell</string>
300 </dict>
301 <dict>
302 <key>begin</key>
303 <string>(?&lt;!\w)(--%)(?!\w)</string>
304 <key>beginCaptures</key>
305 <dict>
306 <key>1</key>
307 <dict>
308 <key>name</key>
309 <string>keyword.control.powershell</string>
310 </dict>
311 </dict>
312 <key>end</key>
313 <string>$</string>
314 <key>patterns</key>
315 <array>
316 <dict>
317 <key>match</key>
318 <string>.+</string>
319 <key>name</key>
320 <string>string.unquoted.powershell</string>
321 </dict>
322 </array>
323 <key>comment</key>
324 <string>This should be moved to the repository at some point.</string>
325 </dict>
326 <dict>
327 <key>comment</key>
328 <string>This should only be relevant inside a class but will require a rework of how classes are matched. This is a temp fix.</string>
329 <key>match</key>
330 <string>(?&lt;!\w)((?i:hidden|static))(?!\w)</string>
331 <key>name</key>
332 <string>storage.modifier.powershell</string>
333 </dict>
334 <dict>
335 <key>captures</key>
336 <dict>
337 <key>1</key>
338 <dict>
339 <key>name</key>
340 <string>storage.type.powershell</string>
341 </dict>
342 <key>2</key>
343 <dict>
344 <key>name</key>
345 <string>entity.name.function</string>
346 </dict>
347 </dict>
348 <key>comment</key>
349 <string>capture should be entity.name.type, but it doesn't provide a good color in the default schema.</string>
350 <key>match</key>
351 <string>(?&lt;!\w|-)((?i:class)|%|\?)(?:\s)+((?:\p{L}|\d|_|-|)+)\b</string>
352 </dict>
353 <dict>
354 <key>match</key>
355 <string>(?&lt;!\w)-(?i:is(?:not)?|as)\b</string>
356 <key>name</key>
357 <string>keyword.operator.comparison.powershell</string>
358 </dict>
359 <dict>
360 <key>match</key>
361 <string>(?&lt;!\w)-(?i:[ic]?(?:eq|ne|[gl][te]|(?:not)?(?:like|match|contains|in)|replace))(?!\p{L})</string>
362 <key>name</key>
363 <string>keyword.operator.comparison.powershell</string>
364 </dict>
365 <dict>
366 <key>match</key>
367 <string>(?&lt;!\w)-(?i:join|split)(?!\p{L})|!</string>
368 <key>name</key>
369 <string>keyword.operator.unary.powershell</string>
370 </dict>
371 <dict>
372 <key>match</key>
373 <string>(?&lt;!\w)-(?i:and|or|not|xor)(?!\p{L})|!</string>
374 <key>name</key>
375 <string>keyword.operator.logical.powershell</string>
376 </dict>
377 <dict>
378 <key>match</key>
379 <string>(?&lt;!\w)-(?i:band|bor|bnot|bxor|shl|shr)(?!\p{L})</string>
380 <key>name</key>
381 <string>keyword.operator.bitwise.powershell</string>
382 </dict>
383 <dict>
384 <key>match</key>
385 <string>(?&lt;!\w)-(?i:f)(?!\p{L})</string>
386 <key>name</key>
387 <string>keyword.operator.string-format.powershell</string>
388 </dict>
389 <dict>
390 <key>match</key>
391 <string>[+%*/-]?=|[+/*%-]</string>
392 <key>name</key>
393 <string>keyword.operator.assignment.powershell</string>
394 </dict>
395 <dict>
396 <key>match</key>
397 <string>\|{2}|&amp;{2}|;</string>
398 <key>name</key>
399 <string>punctuation.terminator.statement.powershell</string>
400 </dict>
401 <dict>
402 <key>match</key>
403 <string>&amp;|(?&lt;!\w)\.(?= )|`|,|\|</string>
404 <key>name</key>
405 <string>keyword.operator.other.powershell</string>
406 </dict>
407 <dict>
408 <key>comment</key>
409 <string>This is very imprecise, is there a syntax for 'must come after...' </string>
410 <key>match</key>
411 <string>(?&lt;!\s|^)\.\.(?=\-?\d|\(|\$)</string>
412 <key>name</key>
413 <string>keyword.operator.range.powershell</string>
414 </dict>
415 </array>
416 <key>repository</key>
417 <dict>
418 <key>commentLine</key>
419 <dict>
420 <key>begin</key>
421 <string>(?&lt;![`\\-])(#)#*</string>
422 <key>captures</key>
423 <dict>
424 <key>1</key>
425 <dict>
426 <key>name</key>
427 <string>punctuation.definition.comment.powershell</string>
428 </dict>
429 </dict>
430 <key>end</key>
431 <string>$\n?</string>
432 <key>name</key>
433 <string>comment.line.powershell</string>
434 <key>patterns</key>
435 <array>
436 <dict>
437 <key>include</key>
438 <string>#commentEmbeddedDocs</string>
439 </dict>
440 <dict>
441 <key>include</key>
442 <string>#RequiresDirective</string>
443 </dict>
444 </array>
445 </dict>
446 <key>attribute</key>
447 <dict>
448 <key>begin</key>
449 <string>(\[)\s*\b(?i)(cmdletbinding|alias|outputtype|parameter|validatenotnull|validatenotnullorempty|validatecount|validateset|allownull|allowemptycollection|allowemptystring|validatescript|validaterange|validatepattern|validatelength|supportswildcards)\b</string>
450 <key>beginCaptures</key>
451 <dict>
452 <key>1</key>
453 <dict>
454 <key>name</key>
455 <string>punctuation.section.bracket.begin.powershell</string>
456 </dict>
457 <key>2</key>
458 <dict>
459 <key>name</key>
460 <string>support.function.attribute.powershell</string>
461 </dict>
462 </dict>
463 <key>end</key>
464 <string>(\])</string>
465 <key>endCaptures</key>
466 <dict>
467 <key>1</key>
468 <dict>
469 <key>name</key>
470 <string>punctuation.section.bracket.end.powershell</string>
471 </dict>
472 </dict>
473 <key>name</key>
474 <string>meta.attribute.powershell</string>
475 <key>patterns</key>
476 <array>
477 <dict>
478 <key>begin</key>
479 <string>\(</string>
480 <key>beginCaptures</key>
481 <dict>
482 <key>0</key>
483 <dict>
484 <key>name</key>
485 <string>punctuation.section.group.begin.powershell</string>
486 </dict>
487 </dict>
488 <key>end</key>
489 <string>\)</string>
490 <key>endCaptures</key>
491 <dict>
492 <key>0</key>
493 <dict>
494 <key>name</key>
495 <string>punctuation.section.group.end.powershell</string>
496 </dict>
497 </dict>
498 <key>patterns</key>
499 <array>
500 <dict>
501 <key>include</key>
502 <string>$self</string>
503 </dict>
504 <dict>
505 <key>match</key>
506 <string>(?i)\b(mandatory|valuefrompipeline|valuefrompipelinebypropertyname|valuefromremainingarguments|position|parametersetname|defaultparametersetname|supportsshouldprocess|supportspaging|positionalbinding|helpuri|confirmimpact|helpmessage)\b(?:\s+)?(=)?</string>
507 <key>captures</key>
508 <dict>
509 <key>1</key>
510 <dict>
511 <key>name</key>
512 <string>variable.parameter.attribute.powershell</string>
513 </dict>
514 <key>2</key>
515 <dict>
516 <key>name</key>
517 <string>keyword.operator.assignment.powershell</string>
518 </dict>
519 </dict>
520 </dict>
521 </array>
522 </dict>
523 </array>
524 </dict>
525 <key>commands</key>
526 <dict>
527 <key>patterns</key>
528 <array>
529 <dict>
530 <key>comment</key>
531 <string>Verb-Noun pattern:</string>
532 <key>match</key>
533 <string>(?:(\p{L}|\d|_|-|\\|\:)*\\)?\b(?i:Add|Approve|Assert|Backup|Block|Build|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Deploy|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Mount|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Write)\-.+?(?:\.(?i:exe|cmd|bat|ps1))?\b</string>
534 <key>name</key>
535 <string>support.function.powershell</string>
536 </dict>
537 <dict>
538 <key>comment</key>
539 <string>Builtin cmdlets with reserved verbs</string>
540 <key>match</key>
541 <string>(?&lt;!\w)(?i:foreach-object)(?!\w)</string>
542 <key>name</key>
543 <string>support.function.powershell</string>
544 </dict>
545 <dict>
546 <key>comment</key>
547 <string>Builtin cmdlets with reserved verbs</string>
548 <key>match</key>
549 <string>(?&lt;!\w)(?i:where-object)(?!\w)</string>
550 <key>name</key>
551 <string>support.function.powershell</string>
552 </dict>
553 <dict>
554 <key>comment</key>
555 <string>Builtin cmdlets with reserved verbs</string>
556 <key>match</key>
557 <string>(?&lt;!\w)(?i:sort-object)(?!\w)</string>
558 <key>name</key>
559 <string>support.function.powershell</string>
560 </dict>
561 <dict>
562 <key>comment</key>
563 <string>Builtin cmdlets with reserved verbs</string>
564 <key>match</key>
565 <string>(?&lt;!\w)(?i:tee-object)(?!\w)</string>
566 <key>name</key>
567 <string>support.function.powershell</string>
568 </dict>
569 </array>
570 </dict>
571 <key>commentEmbeddedDocs</key>
572 <dict>
573 <key>patterns</key>
574 <array>
575 <dict>
576 <key>captures</key>
577 <dict>
578 <key>1</key>
579 <dict>
580 <key>name</key>
581 <string>constant.string.documentation.powershell</string>
582 </dict>
583 <key>2</key>
584 <dict>
585 <key>name</key>
586 <string>keyword.operator.documentation.powershell</string>
587 </dict>
588 </dict>
589 <key>comment</key>
590 <string>these embedded doc keywords do not support arguments, must be the only thing on the line</string>
591 <key>match</key>
592 <string>(?:^|\G)(?i:\s*(\.)(COMPONENT|DESCRIPTION|EXAMPLE|FUNCTIONALITY|INPUTS|LINK|NOTES|OUTPUTS|ROLE|SYNOPSIS))\s*$</string>
593 <key>name</key>
594 <string>comment.documentation.embedded.powershell</string>
595 </dict>
596 <dict>
597 <key>captures</key>
598 <dict>
599 <key>1</key>
600 <dict>
601 <key>name</key>
602 <string>constant.string.documentation.powershell</string>
603 </dict>
604 <key>2</key>
605 <dict>
606 <key>name</key>
607 <string>keyword.operator.documentation.powershell</string>
608 </dict>
609 <key>3</key>
610 <dict>
611 <key>name</key>
612 <string>keyword.operator.documentation.powershell</string>
613 </dict>
614 </dict>
615 <key>comment</key>
616 <string>these embedded doc keywords require arguments though the type required may be inconsistent, they may not all be able to use the same argument match</string>
617 <key>match</key>
618 <string>(?:^|\G)(?i:\s*(\.)(EXTERNALHELP|FORWARDHELP(?:CATEGORY|TARGETNAME)|PARAMETER|REMOTEHELPRUNSPACE))\s+(.+?)\s*$</string>
619 <key>name</key>
620 <string>comment.documentation.embedded.powershell</string>
621 </dict>
622 </array>
623 </dict>
624 <key>doubleQuotedStringEscapes</key>
625 <dict>
626 <key>patterns</key>
627 <array>
628 <dict>
629 <key>match</key>
630 <string>`[`0abefnrtv'"\x{2018}-\x{201E}$]</string>
631 <key>name</key>
632 <string>constant.character.escape.powershell</string>
633 </dict>
634 <dict>
635 <key>include</key>
636 <string>#unicodeEscape</string>
637 </dict>
638 </array>
639 </dict>
640 <key>unicodeEscape</key>
641 <dict>
642 <key>comment</key>
643 <string>`u{xxxx} added in PowerShell 6.0</string>
644 <key>patterns</key>
645 <array>
646 <dict>
647 <key>match</key>
648 <string>`u\{(?:(?:10)?([0-9a-fA-F]){1,4}|0?\g&lt;1&gt;{1,5})}</string>
649 <key>name</key>
650 <string>constant.character.escape.powershell</string>
651 </dict>
652 <dict>
653 <key>match</key>
654 <string>`u(?:\{[0-9a-fA-F]{,6}.)?</string>
655 <key>name</key>
656 <string>invalid.character.escape.powershell</string>
657 </dict>
658 </array>
659 </dict>
660 <key>function</key>
661 <dict>
662 <key>begin</key>
663 <string>^(?:\s*+)(?i)(function|filter|configuration|workflow)\s+(?:(global|local|script|private):)?((?:\p{L}|\d|_|-|\.)+)</string>
664 <key>beginCaptures</key>
665 <dict>
666 <key>0</key>
667 <dict>
668 <key>name</key>
669 <string>meta.function.powershell</string>
670 </dict>
671 <key>1</key>
672 <dict>
673 <key>name</key>
674 <string>storage.type.powershell</string>
675 </dict>
676 <key>2</key>
677 <dict>
678 <key>name</key>
679 <string>storage.modifier.scope.powershell</string>
680 </dict>
681 <key>3</key>
682 <dict>
683 <key>name</key>
684 <string>entity.name.function.powershell</string>
685 </dict>
686 </dict>
687 <key>end</key>
688 <string>(?=\{|\()</string>
689 <key>patterns</key>
690 <array>
691 <dict>
692 <key>include</key>
693 <string>#commentLine</string>
694 </dict>
695 </array>
696 </dict>
697 <key>subexpression</key>
698 <dict>
699 <key>begin</key>
700 <string>\(</string>
701 <key>beginCaptures</key>
702 <dict>
703 <key>0</key>
704 <dict>
705 <key>name</key>
706 <string>punctuation.section.group.begin.powershell</string>
707 </dict>
708 </dict>
709 <key>end</key>
710 <string>\)</string>
711 <key>endCaptures</key>
712 <dict>
713 <key>0</key>
714 <dict>
715 <key>name</key>
716 <string>punctuation.section.group.end.powershell</string>
717 </dict>
718 </dict>
719 <key>name</key>
720 <string>meta.group.simple.subexpression.powershell</string>
721 <key>patterns</key>
722 <array>
723 <dict>
724 <key>include</key>
725 <string>$self</string>
726 </dict>
727 </array>
728 </dict>
729 <key>interpolation</key>
730 <dict>
731 <key>begin</key>
732 <string>(((\$)))((\())</string>
733 <key>beginCaptures</key>
734 <dict>
735 <key>1</key>
736 <dict>
737 <key>name</key>
738 <string>keyword.other.substatement.powershell</string>
739 </dict>
740 <key>2</key>
741 <dict>
742 <key>name</key>
743 <string>punctuation.definition.substatement.powershell</string>
744 </dict>
745 <key>3</key>
746 <dict>
747 <key>name</key>
748 <string>punctuation.section.embedded.substatement.begin.powershell</string>
749 </dict>
750 <key>4</key>
751 <dict>
752 <key>name</key>
753 <string>punctuation.section.group.begin.powershell</string>
754 </dict>
755 <key>5</key>
756 <dict>
757 <key>name</key>
758 <string>punctuation.section.embedded.substatement.begin.powershell</string>
759 </dict>
760 </dict>
761 <key>contentName</key>
762 <string>interpolated.complex.source.powershell</string>
763 <key>end</key>
764 <string>(\))</string>
765 <key>endCaptures</key>
766 <dict>
767 <key>0</key>
768 <dict>
769 <key>name</key>
770 <string>punctuation.section.group.end.powershell</string>
771 </dict>
772 <key>1</key>
773 <dict>
774 <key>name</key>
775 <string>punctuation.section.embedded.substatement.end.powershell</string>
776 </dict>
777 </dict>
778 <key>name</key>
779 <string>meta.embedded.substatement.powershell</string>
780 <key>patterns</key>
781 <array>
782 <dict>
783 <key>include</key>
784 <string>$self</string>
785 </dict>
786 </array>
787 </dict>
788 <key>numericConstant</key>
789 <dict>
790 <key>patterns</key>
791 <array>
792 <dict>
793 <key>captures</key>
794 <dict>
795 <key>1</key>
796 <dict>
797 <key>name</key>
798 <string>constant.numeric.hex.powershell</string>
799 </dict>
800 <key>2</key>
801 <dict>
802 <key>name</key>
803 <string>keyword.other.powershell</string>
804 </dict>
805 </dict>
806 <key>match</key>
807 <string>(?&lt;!\w)([-+]?0(?:x|X)[0-9a-fA-F_]+(?:U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?)((?i:[kmgtp]b)?)\b</string>
808 </dict>
809 <dict>
810 <key>captures</key>
811 <dict>
812 <key>1</key>
813 <dict>
814 <key>name</key>
815 <string>constant.numeric.integer.powershell</string>
816 </dict>
817 <key>2</key>
818 <dict>
819 <key>name</key>
820 <string>keyword.other.powershell</string>
821 </dict>
822 </dict>
823 <key>match</key>
824 <string>(?&lt;!\w)([-+]?(?:[0-9_]+)?\.[0-9_]+(?:(?:e|E)[0-9]+)?(?:F|f|D|d|M|m)?)((?i:[kmgtp]b)?)\b</string>
825 </dict>
826 <dict>
827 <key>captures</key>
828 <dict>
829 <key>1</key>
830 <dict>
831 <key>name</key>
832 <string>constant.numeric.octal.powershell</string>
833 </dict>
834 <key>2</key>
835 <dict>
836 <key>name</key>
837 <string>keyword.other.powershell</string>
838 </dict>
839 </dict>
840 <key>match</key>
841 <string>(?&lt;!\w)([-+]?0(?:b|B)[01_]+(?:U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?)((?i:[kmgtp]b)?)\b</string>
842 </dict>
843 <dict>
844 <key>captures</key>
845 <dict>
846 <key>1</key>
847 <dict>
848 <key>name</key>
849 <string>constant.numeric.integer.powershell</string>
850 </dict>
851 <key>2</key>
852 <dict>
853 <key>name</key>
854 <string>keyword.other.powershell</string>
855 </dict>
856 </dict>
857 <key>match</key>
858 <string>(?&lt;!\w)([-+]?[0-9_]+(?:e|E)(?:[0-9_])?+(?:F|f|D|d|M|m)?)((?i:[kmgtp]b)?)\b</string>
859 </dict>
860 <dict>
861 <key>captures</key>
862 <dict>
863 <key>1</key>
864 <dict>
865 <key>name</key>
866 <string>constant.numeric.integer.powershell</string>
867 </dict>
868 <key>2</key>
869 <dict>
870 <key>name</key>
871 <string>keyword.other.powershell</string>
872 </dict>
873 </dict>
874 <key>match</key>
875 <string>(?&lt;!\w)([-+]?[0-9_]+\.(?:e|E)(?:[0-9_])?+(?:F|f|D|d|M|m)?)((?i:[kmgtp]b)?)\b</string>
876 </dict>
877 <dict>
878 <key>captures</key>
879 <dict>
880 <key>1</key>
881 <dict>
882 <key>name</key>
883 <string>constant.numeric.integer.powershell</string>
884 </dict>
885 <key>2</key>
886 <dict>
887 <key>name</key>
888 <string>keyword.other.powershell</string>
889 </dict>
890 </dict>
891 <key>match</key>
892 <string>(?&lt;!\w)([-+]?[0-9_]+[\.]?(?:F|f|D|d|M|m))((?i:[kmgtp]b)?)\b</string>
893 </dict>
894 <dict>
895 <key>captures</key>
896 <dict>
897 <key>1</key>
898 <dict>
899 <key>name</key>
900 <string>constant.numeric.integer.powershell</string>
901 </dict>
902 <key>2</key>
903 <dict>
904 <key>name</key>
905 <string>keyword.other.powershell</string>
906 </dict>
907 </dict>
908 <key>match</key>
909 <string>(?&lt;!\w)([-+]?[0-9_]+[\.]?(?:U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?)((?i:[kmgtp]b)?)\b</string>
910 </dict>
911 </array>
912 </dict>
913 <key>scriptblock</key>
914 <dict>
915 <key>begin</key>
916 <string>\{</string>
917 <key>beginCaptures</key>
918 <dict>
919 <key>0</key>
920 <dict>
921 <key>name</key>
922 <string>punctuation.section.braces.begin.powershell</string>
923 </dict>
924 </dict>
925 <key>end</key>
926 <string>\}</string>
927 <key>endCaptures</key>
928 <dict>
929 <key>0</key>
930 <dict>
931 <key>name</key>
932 <string>punctuation.section.braces.end.powershell</string>
933 </dict>
934 </dict>
935 <key>name</key>
936 <string>meta.scriptblock.powershell</string>
937 <key>patterns</key>
938 <array>
939 <dict>
940 <key>include</key>
941 <string>$self</string>
942 </dict>
943 </array>
944 </dict>
945 <key>type</key>
946 <dict>
947 <key>begin</key>
948 <string>\[</string>
949 <key>beginCaptures</key>
950 <dict>
951 <key>0</key>
952 <dict>
953 <key>name</key>
954 <string>punctuation.section.bracket.begin.powershell</string>
955 </dict>
956 </dict>
957 <key>end</key>
958 <string>\]</string>
959 <key>endCaptures</key>
960 <dict>
961 <key>0</key>
962 <dict>
963 <key>name</key>
964 <string>punctuation.section.bracket.end.powershell</string>
965 </dict>
966 </dict>
967 <key>patterns</key>
968 <array>
969 <dict>
970 <key>match</key>
971 <string>(?!\d+|\.)(?:\p{L}|\p{N}|\.)+</string>
972 <key>name</key>
973 <string>storage.type.powershell</string>
974 </dict>
975 <dict>
976 <key>include</key>
977 <string>$self</string>
978 </dict>
979 </array>
980 </dict>
981 <key>variable</key>
982 <dict>
983 <key>patterns</key>
984 <array>
985 <dict>
986 <key>captures</key>
987 <dict>
988 <key>0</key>
989 <dict>
990 <key>name</key>
991 <string>constant.language.powershell</string>
992 </dict>
993 <key>1</key>
994 <dict>
995 <key>name</key>
996 <string>punctuation.definition.variable.powershell</string>
997 </dict>
998 </dict>
999 <key>comment</key>
1000 <string>These are special constants.</string>
1001 <key>match</key>
1002 <string>(\$)(?i:(False|Null|True))\b</string>
1003 </dict>
1004 <dict>
1005 <key>captures</key>
1006 <dict>
1007 <key>0</key>
1008 <dict>
1009 <key>name</key>
1010 <string>support.constant.variable.powershell</string>
1011 </dict>
1012 <key>1</key>
1013 <dict>
1014 <key>name</key>
1015 <string>punctuation.definition.variable.powershell</string>
1016 </dict>
1017 <key>3</key>
1018 <dict>
1019 <key>name</key>
1020 <string>variable.other.member.powershell</string>
1021 </dict>
1022 </dict>
1023 <key>comment</key>
1024 <string>These are the other built-in constants.</string>
1025 <key>match</key>
1026 <string>(\$)(?i:(Error|ExecutionContext|Host|Home|PID|PsHome|PsVersionTable|ShellID))((?:\.(?:\p{L}|\d|_)+)*\b)?\b</string>
1027 </dict>
1028 <dict>
1029 <key>captures</key>
1030 <dict>
1031 <key>0</key>
1032 <dict>
1033 <key>name</key>
1034 <string>support.variable.automatic.powershell</string>
1035 </dict>
1036 <key>1</key>
1037 <dict>
1038 <key>name</key>
1039 <string>punctuation.definition.variable.powershell</string>
1040 </dict>
1041 <key>3</key>
1042 <dict>
1043 <key>name</key>
1044 <string>variable.other.member.powershell</string>
1045 </dict>
1046 </dict>
1047 <key>comment</key>
1048 <string>Automatic variables are not constants, but they are read-only. In monokai (default) color schema support.variable doesn't have color, so we use constant.</string>
1049 <key>match</key>
1050 <string>(\$)((?:[$^?])|(?i:_|Args|ConsoleFileName|Event|EventArgs|EventSubscriber|ForEach|Input|LastExitCode|Matches|MyInvocation|NestedPromptLevel|Profile|PSBoundParameters|PsCmdlet|PsCulture|PSDebugContext|PSItem|PSCommandPath|PSScriptRoot|PsUICulture|Pwd|Sender|SourceArgs|SourceEventArgs|StackTrace|Switch|This)\b)((?:\.(?:\p{L}|\d|_)+)*\b)?</string>
1051 </dict>
1052 <dict>
1053 <key>captures</key>
1054 <dict>
1055 <key>0</key>
1056 <dict>
1057 <key>name</key>
1058 <string>variable.language.powershell</string>
1059 </dict>
1060 <key>1</key>
1061 <dict>
1062 <key>name</key>
1063 <string>punctuation.definition.variable.powershell</string>
1064 </dict>
1065 <key>3</key>
1066 <dict>
1067 <key>name</key>
1068 <string>variable.other.member.powershell</string>
1069 </dict>
1070 </dict>
1071 <key>comment</key>
1072 <string>Style preference variables as language variables so that they stand out.</string>
1073 <key>match</key>
1074 <string>(\$)(?i:(ConfirmPreference|DebugPreference|ErrorActionPreference|ErrorView|FormatEnumerationLimit|InformationPreference|LogCommandHealthEvent|LogCommandLifecycleEvent|LogEngineHealthEvent|LogEngineLifecycleEvent|LogProviderHealthEvent|LogProviderLifecycleEvent|MaximumAliasCount|MaximumDriveCount|MaximumErrorCount|MaximumFunctionCount|MaximumHistoryCount|MaximumVariableCount|OFS|OutputEncoding|PSCulture|PSDebugContext|PSDefaultParameterValues|PSEmailServer|PSItem|PSModuleAutoLoadingPreference|PSModuleAutoloadingPreference|PSSenderInfo|PSSessionApplicationName|PSSessionConfigurationName|PSSessionOption|ProgressPreference|VerbosePreference|WarningPreference|WhatIfPreference))((?:\.(?:\p{L}|\d|_)+)*\b)?\b</string>
1075 </dict>
1076 <dict>
1077 <key>captures</key>
1078 <dict>
1079 <key>0</key>
1080 <dict>
1081 <key>name</key>
1082 <string>variable.other.readwrite.powershell</string>
1083 </dict>
1084 <key>1</key>
1085 <dict>
1086 <key>name</key>
1087 <string>punctuation.definition.variable.powershell</string>
1088 </dict>
1089 <key>2</key>
1090 <dict>
1091 <key>name</key>
1092 <string>storage.modifier.scope.powershell</string>
1093 </dict>
1094 <key>4</key>
1095 <dict>
1096 <key>name</key>
1097 <string>variable.other.member.powershell</string>
1098 </dict>
1099 </dict>
1100 <key>match</key>
1101 <string>(?i:(\$|@)(global|local|private|script|using|workflow):((?:\p{L}|\d|_)+))((?:\.(?:\p{L}|\d|_)+)*\b)?</string>
1102 </dict>
1103 <dict>
1104 <key>captures</key>
1105 <dict>
1106 <key>0</key>
1107 <dict>
1108 <key>name</key>
1109 <string>variable.other.readwrite.powershell</string>
1110 </dict>
1111 <key>1</key>
1112 <dict>
1113 <key>name</key>
1114 <string>punctuation.definition.variable.powershell</string>
1115 </dict>
1116 <key>2</key>
1117 <dict>
1118 <key>name</key>
1119 <string>punctuation.section.braces.begin.powershell</string>
1120 </dict>
1121 <key>3</key>
1122 <dict>
1123 <key>name</key>
1124 <string>storage.modifier.scope.powershell</string>
1125 </dict>
1126 <key>5</key>
1127 <dict>
1128 <key>name</key>
1129 <string>punctuation.section.braces.end.powershell</string>
1130 </dict>
1131 <key>6</key>
1132 <dict>
1133 <key>name</key>
1134 <string>variable.other.member.powershell</string>
1135 </dict>
1136 </dict>
1137 <key>match</key>
1138 <string>(?i:(\$)(\{)(global|local|private|script|using|workflow):([^}]*[^}`])(\}))((?:\.(?:\p{L}|\d|_)+)*\b)?</string>
1139 </dict>
1140 <dict>
1141 <key>captures</key>
1142 <dict>
1143 <key>0</key>
1144 <dict>
1145 <key>name</key>
1146 <string>variable.other.readwrite.powershell</string>
1147 </dict>
1148 <key>1</key>
1149 <dict>
1150 <key>name</key>
1151 <string>punctuation.definition.variable.powershell</string>
1152 </dict>
1153 <key>2</key>
1154 <dict>
1155 <key>name</key>
1156 <string>support.variable.drive.powershell</string>
1157 </dict>
1158 <key>4</key>
1159 <dict>
1160 <key>name</key>
1161 <string>variable.other.member.powershell</string>
1162 </dict>
1163 </dict>
1164 <key>match</key>
1165 <string>(?i:(\$|@)((?:\p{L}|\d|_)+:)?((?:\p{L}|\d|_)+))((?:\.(?:\p{L}|\d|_)+)*\b)?</string>
1166 </dict>
1167 <dict>
1168 <key>captures</key>
1169 <dict>
1170 <key>0</key>
1171 <dict>
1172 <key>name</key>
1173 <string>variable.other.readwrite.powershell</string>
1174 </dict>
1175 <key>1</key>
1176 <dict>
1177 <key>name</key>
1178 <string>punctuation.definition.variable.powershell</string>
1179 </dict>
1180 <key>2</key>
1181 <dict>
1182 <key>name</key>
1183 <string>punctuation.section.braces.begin.powershell</string>
1184 </dict>
1185 <key>3</key>
1186 <dict>
1187 <key>name</key>
1188 <string>support.variable.drive.powershell</string>
1189 </dict>
1190 <key>5</key>
1191 <dict>
1192 <key>name</key>
1193 <string>punctuation.section.braces.end.powershell</string>
1194 </dict>
1195 <key>6</key>
1196 <dict>
1197 <key>name</key>
1198 <string>variable.other.member.powershell</string>
1199 </dict>
1200 </dict>
1201 <key>match</key>
1202 <string>(?i:(\$)(\{)((?:\p{L}|\d|_)+:)?([^}]*[^}`])(\}))((?:\.(?:\p{L}|\d|_)+)*\b)?</string>
1203 </dict>
1204 </array>
1205 </dict>
1206 <key>UsingDirective</key>
1207 <dict>
1208 <key>match</key>
1209 <string>(?&lt;!\w)(?i:(using))\s+(?i:(namespace|module))\s+(?i:((?:\w+(?:\.)?)+))</string>
1210 <key>captures</key>
1211 <dict>
1212 <key>1</key>
1213 <dict>
1214 <key>name</key>
1215 <string>keyword.control.using.powershell</string>
1216 </dict>
1217 <key>2</key>
1218 <dict>
1219 <key>name</key>
1220 <string>keyword.other.powershell</string>
1221 </dict>
1222 <key>3</key>
1223 <dict>
1224 <key>name</key>
1225 <string>variable.parameter.powershell</string>
1226 </dict>
1227 </dict>
1228 </dict>
1229 <key>RequiresDirective</key>
1230 <dict>
1231 <key>begin</key>
1232 <string>(?&lt;=#)(?i:(requires))\s</string>
1233 <key>beginCaptures</key>
1234 <dict>
1235 <key>0</key>
1236 <dict>
1237 <key>name</key>
1238 <string>keyword.control.requires.powershell</string>
1239 </dict>
1240 </dict>
1241 <key>end</key>
1242 <string>$</string>
1243 <key>name</key>
1244 <string>meta.requires.powershell</string>
1245 <key>patterns</key>
1246 <array>
1247 <dict>
1248 <key>match</key>
1249 <string>\-(?i:Modules|PSSnapin|RunAsAdministrator|ShellId|Version|Assembly|PSEdition)</string>
1250 <key>name</key>
1251 <string>keyword.other.powershell</string>
1252 </dict>
1253 <dict>
1254 <key>match</key>
1255 <string>(?&lt;!-)\b\p{L}+|\d+(?:\.\d+)*</string>
1256 <key>name</key>
1257 <string>variable.parameter.powershell</string>
1258 </dict>
1259 <dict>
1260 <key>include</key>
1261 <string>#hashtable</string>
1262 </dict>
1263 </array>
1264 </dict>
1265 <key>variableNoProperty</key>
1266 <dict>
1267 <key>patterns</key>
1268 <array>
1269 <dict>
1270 <key>captures</key>
1271 <dict>
1272 <key>0</key>
1273 <dict>
1274 <key>name</key>
1275 <string>constant.language.powershell</string>
1276 </dict>
1277 <key>1</key>
1278 <dict>
1279 <key>name</key>
1280 <string>punctuation.definition.variable.powershell</string>
1281 </dict>
1282 </dict>
1283 <key>comment</key>
1284 <string>These are special constants.</string>
1285 <key>match</key>
1286 <string>(\$)(?i:(False|Null|True))\b</string>
1287 </dict>
1288 <dict>
1289 <key>captures</key>
1290 <dict>
1291 <key>0</key>
1292 <dict>
1293 <key>name</key>
1294 <string>support.constant.variable.powershell</string>
1295 </dict>
1296 <key>1</key>
1297 <dict>
1298 <key>name</key>
1299 <string>punctuation.definition.variable.powershell</string>
1300 </dict>
1301 <key>3</key>
1302 <dict>
1303 <key>name</key>
1304 <string>variable.other.member.powershell</string>
1305 </dict>
1306 </dict>
1307 <key>comment</key>
1308 <string>These are the other built-in constants.</string>
1309 <key>match</key>
1310 <string>(\$)(?i:(Error|ExecutionContext|Host|Home|PID|PsHome|PsVersionTable|ShellID))\b</string>
1311 </dict>
1312 <dict>
1313 <key>captures</key>
1314 <dict>
1315 <key>0</key>
1316 <dict>
1317 <key>name</key>
1318 <string>support.variable.automatic.powershell</string>
1319 </dict>
1320 <key>1</key>
1321 <dict>
1322 <key>name</key>
1323 <string>punctuation.definition.variable.powershell</string>
1324 </dict>
1325 <key>3</key>
1326 <dict>
1327 <key>name</key>
1328 <string>variable.other.member.powershell</string>
1329 </dict>
1330 </dict>
1331 <key>comment</key>
1332 <string>Automatic variables are not constants, but they are read-only...</string>
1333 <key>match</key>
1334 <string>(\$)((?:[$^?])|(?i:_|Args|ConsoleFileName|Event|EventArgs|EventSubscriber|ForEach|Input|LastExitCode|Matches|MyInvocation|NestedPromptLevel|Profile|PSBoundParameters|PsCmdlet|PsCulture|PSDebugContext|PSItem|PSCommandPath|PSScriptRoot|PsUICulture|Pwd|Sender|SourceArgs|SourceEventArgs|StackTrace|Switch|This)\b)</string>
1335 </dict>
1336 <dict>
1337 <key>captures</key>
1338 <dict>
1339 <key>0</key>
1340 <dict>
1341 <key>name</key>
1342 <string>variable.language.powershell</string>
1343 </dict>
1344 <key>1</key>
1345 <dict>
1346 <key>name</key>
1347 <string>punctuation.definition.variable.powershell</string>
1348 </dict>
1349 <key>3</key>
1350 <dict>
1351 <key>name</key>
1352 <string>variable.other.member.powershell</string>
1353 </dict>
1354 </dict>
1355 <key>comment</key>
1356 <string>Style preference variables as language variables so that they stand out.</string>
1357 <key>match</key>
1358 <string>(\$)(?i:(ConfirmPreference|DebugPreference|ErrorActionPreference|ErrorView|FormatEnumerationLimit|InformationPreference|LogCommandHealthEvent|LogCommandLifecycleEvent|LogEngineHealthEvent|LogEngineLifecycleEvent|LogProviderHealthEvent|LogProviderLifecycleEvent|MaximumAliasCount|MaximumDriveCount|MaximumErrorCount|MaximumFunctionCount|MaximumHistoryCount|MaximumVariableCount|OFS|OutputEncoding|PSCulture|PSDebugContext|PSDefaultParameterValues|PSEmailServer|PSItem|PSModuleAutoLoadingPreference|PSModuleAutoloadingPreference|PSSenderInfo|PSSessionApplicationName|PSSessionConfigurationName|PSSessionOption|ProgressPreference|VerbosePreference|WarningPreference|WhatIfPreference))\b</string>
1359 </dict>
1360 <dict>
1361 <key>captures</key>
1362 <dict>
1363 <key>0</key>
1364 <dict>
1365 <key>name</key>
1366 <string>variable.other.readwrite.powershell</string>
1367 </dict>
1368 <key>1</key>
1369 <dict>
1370 <key>name</key>
1371 <string>punctuation.definition.variable.powershell</string>
1372 </dict>
1373 <key>2</key>
1374 <dict>
1375 <key>name</key>
1376 <string>storage.modifier.scope.powershell</string>
1377 </dict>
1378 <key>4</key>
1379 <dict>
1380 <key>name</key>
1381 <string>variable.other.member.powershell</string>
1382 </dict>
1383 </dict>
1384 <key>match</key>
1385 <string>(?i:(\$)(global|local|private|script|using|workflow):((?:\p{L}|\d|_)+))</string>
1386 </dict>
1387 <dict>
1388 <key>captures</key>
1389 <dict>
1390 <key>0</key>
1391 <dict>
1392 <key>name</key>
1393 <string>variable.other.readwrite.powershell</string>
1394 </dict>
1395 <key>1</key>
1396 <dict>
1397 <key>name</key>
1398 <string>punctuation.definition.variable.powershell</string>
1399 </dict>
1400 <key>2</key>
1401 <dict>
1402 <key>name</key>
1403 <string>storage.modifier.scope.powershell</string>
1404 </dict>
1405 <key>4</key>
1406 <dict>
1407 <key>name</key>
1408 <string>keyword.other.powershell</string>
1409 </dict>
1410 <key>5</key>
1411 <dict>
1412 <key>name</key>
1413 <string>variable.other.member.powershell</string>
1414 </dict>
1415 </dict>
1416 <key>match</key>
1417 <string>(?i:(\$)(\{)(global|local|private|script|using|workflow):([^}]*[^}`])(\}))</string>
1418 </dict>
1419 <dict>
1420 <key>captures</key>
1421 <dict>
1422 <key>0</key>
1423 <dict>
1424 <key>name</key>
1425 <string>variable.other.readwrite.powershell</string>
1426 </dict>
1427 <key>1</key>
1428 <dict>
1429 <key>name</key>
1430 <string>punctuation.definition.variable.powershell</string>
1431 </dict>
1432 <key>2</key>
1433 <dict>
1434 <key>name</key>
1435 <string>support.variable.drive.powershell</string>
1436 </dict>
1437 <key>4</key>
1438 <dict>
1439 <key>name</key>
1440 <string>variable.other.member.powershell</string>
1441 </dict>
1442 </dict>
1443 <key>match</key>
1444 <string>(?i:(\$)((?:\p{L}|\d|_)+:)?((?:\p{L}|\d|_)+))</string>
1445 </dict>
1446 <dict>
1447 <key>captures</key>
1448 <dict>
1449 <key>0</key>
1450 <dict>
1451 <key>name</key>
1452 <string>variable.other.readwrite.powershell</string>
1453 </dict>
1454 <key>1</key>
1455 <dict>
1456 <key>name</key>
1457 <string>punctuation.definition.variable.powershell</string>
1458 </dict>
1459 <key>2</key>
1460 <dict>
1461 <key>name</key>
1462 <string>punctuation.section.braces.begin</string>
1463 </dict>
1464 <key>3</key>
1465 <dict>
1466 <key>name</key>
1467 <string>support.variable.drive.powershell</string>
1468 </dict>
1469 <key>5</key>
1470 <dict>
1471 <key>name</key>
1472 <string>punctuation.section.braces.end</string>
1473 </dict>
1474 </dict>
1475 <key>match</key>
1476 <string>(?i:(\$)(\{)((?:\p{L}|\d|_)+:)?([^}]*[^}`])(\}))</string>
1477 </dict>
1478 </array>
1479 </dict>
1480 <key>hashtable</key>
1481 <dict>
1482 <key>begin</key>
1483 <string>(@)(\{)</string>
1484 <key>beginCaptures</key>
1485 <dict>
1486 <key>1</key>
1487 <dict>
1488 <key>name</key>
1489 <string>keyword.other.hashtable.begin.powershell</string>
1490 </dict>
1491 <key>2</key>
1492 <dict>
1493 <key>name</key>
1494 <string>punctuation.section.braces.begin.powershell</string>
1495 </dict>
1496 </dict>
1497 <key>end</key>
1498 <string>(\})</string>
1499 <key>endCaptures</key>
1500 <dict>
1501 <key>1</key>
1502 <dict>
1503 <key>name</key>
1504 <string>punctuation.section.braces.end.powershell</string>
1505 </dict>
1506 </dict>
1507 <key>name</key>
1508 <string>meta.hashtable.powershell</string>
1509 <key>patterns</key>
1510 <array>
1511 <dict>
1512 <key>captures</key>
1513 <dict>
1514 <key>1</key>
1515 <dict>
1516 <key>name</key>
1517 <string>punctuation.definition.string.begin.powershell</string>
1518 </dict>
1519 <key>2</key>
1520 <dict>
1521 <key>name</key>
1522 <string>variable.other.readwrite.powershell</string>
1523 </dict>
1524 <key>3</key>
1525 <dict>
1526 <key>name</key>
1527 <string>punctuation.definition.string.end.powershell</string>
1528 </dict>
1529 <key>4</key>
1530 <dict>
1531 <key>name</key>
1532 <string>keyword.operator.assignment.powershell</string>
1533 </dict>
1534 </dict>
1535 <key>match</key>
1536 <string>\b((?:\'|\")?)(\w+)((?:\'|\")?)(?:\s+)?(=)(?:\s+)?</string>
1537 <key>name</key>
1538 <string>meta.hashtable.assignment.powershell</string>
1539 </dict>
1540 <dict>
1541 <key>include</key>
1542 <string>#scriptblock</string>
1543 </dict>
1544 <dict>
1545 <key>include</key>
1546 <string>$self</string>
1547 </dict>
1548 </array>
1549 </dict>
1550 <key>doubleQuotedString</key>
1551 <dict>
1552 <key>begin</key>
1553 <string>["\x{201C}-\x{201E}]</string>
1554 <key>beginCaptures</key>
1555 <dict>
1556 <key>0</key>
1557 <dict>
1558 <key>name</key>
1559 <string>punctuation.definition.string.begin.powershell</string>
1560 </dict>
1561 </dict>
1562 <key>end</key>
1563 <string>["\x{201C}-\x{201E}]</string>
1564 <key>applyEndPatternLast</key>
1565 <true/>
1566 <key>endCaptures</key>
1567 <dict>
1568 <key>0</key>
1569 <dict>
1570 <key>name</key>
1571 <string>punctuation.definition.string.end.powershell</string>
1572 </dict>
1573 </dict>
1574 <key>name</key>
1575 <string>string.quoted.double.powershell</string>
1576 <key>patterns</key>
1577 <array>
1578 <dict>
1579 <key>match</key>
1580 <string>(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,64}\b</string>
1581 </dict>
1582 <dict>
1583 <key>include</key>
1584 <string>#variableNoProperty</string>
1585 </dict>
1586 <dict>
1587 <key>include</key>
1588 <string>#doubleQuotedStringEscapes</string>
1589 </dict>
1590 <dict>
1591 <key>match</key>
1592 <string>["\x{201C}-\x{201E}]{2}</string>
1593 <key>name</key>
1594 <string>constant.character.escape.powershell</string>
1595 </dict>
1596 <dict>
1597 <key>include</key>
1598 <string>#interpolation</string>
1599 </dict>
1600 <dict>
1601 <key>match</key>
1602 <string>`\s*$</string>
1603 <key>name</key>
1604 <string>keyword.other.powershell</string>
1605 </dict>
1606 </array>
1607 </dict>
1608 </dict>
1609 <key>scopeName</key>
1610 <string>source.powershell</string>
1611 <key>uuid</key>
1612 <string>f8f5ffb0-503e-11df-9879-0800200c9a66</string>
1613</dict>
1614</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/python.plist created+4009
......@@ -0,0 +1,4009 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>fileTypes</key>
6 <array>
7 <string>py</string>
8 <string>py3</string>
9 <string>rpy</string>
10 <string>pyw</string>
11 <string>cpy</string>
12 <string>SConstruct</string>
13 <string>Sconstruct</string>
14 <string>sconstruct</string>
15 <string>SConscript</string>
16 <string>gyp</string>
17 <string>gypi</string>
18 </array>
19 <key>firstLineMatch</key>
20 <string>^#!/.*\bpython[\d\.]*\b</string>
21 <key>keyEquivalent</key>
22 <string>^~P</string>
23 <key>name</key>
24 <string>Python</string>
25 <key>patterns</key>
26 <array>
27 <dict>
28 <key>match</key>
29 <string>(?&lt;!^from\s|^import\s)(\.{3})</string>
30 <key>name</key>
31 <string>support.type.ellipsis.python</string>
32 </dict>
33 <dict>
34 <key>include</key>
35 <string>#comment</string>
36 </dict>
37 <dict>
38 <key>comment</key>
39 <string>Match identifiers in ALL_CAPS as constants, except when followed by `.`, `(`, `'`, or `"`.</string>
40 <key>match</key>
41 <string>\b([[:upper:]_][[:upper:][:digit:]_]*)\b(?![\.\(\'\"])</string>
42 <key>name</key>
43 <string>constant.other.allcaps.python</string>
44 </dict>
45 <dict>
46 <key>match</key>
47 <string>\b(?i:(0x\h+)L)</string>
48 <key>name</key>
49 <string>constant.numeric.integer.hexadecimal.long.python</string>
50 </dict>
51 <dict>
52 <key>match</key>
53 <string>\b(?i:(0x\h+))</string>
54 <key>name</key>
55 <string>constant.numeric.integer.hexadecimal.python</string>
56 </dict>
57 <dict>
58 <key>match</key>
59 <string>\b(?i:(0b[01]+)L)</string>
60 <key>name</key>
61 <string>constant.numeric.integer.binary.long.python</string>
62 </dict>
63 <dict>
64 <key>match</key>
65 <string>\b(?i:(0b[01]+))</string>
66 <key>name</key>
67 <string>constant.numeric.integer.binary.python</string>
68 </dict>
69 <dict>
70 <key>match</key>
71 <string>\b(?i:(0[o]?[0-7]+)L)</string>
72 <key>name</key>
73 <string>constant.numeric.integer.octal.long.python</string>
74 </dict>
75 <dict>
76 <key>match</key>
77 <string>\b(?i:(0[o]?[0-7]+))</string>
78 <key>name</key>
79 <string>constant.numeric.integer.octal.python</string>
80 </dict>
81 <dict>
82 <key>match</key>
83 <string>\b(?i:(((\d+(\.(?=[^[:alpha:]_])\d*)?|(?&lt;=[^[:alnum:]_])\.\d+)(e[\-\+]?\d+)?))J)</string>
84 <key>name</key>
85 <string>constant.numeric.complex.python</string>
86 </dict>
87 <dict>
88 <key>match</key>
89 <string>\b(?i:(\d+\.\d*(e[\-\+]?\d+)?))(?=[^[:alpha:]_])</string>
90 <key>name</key>
91 <string>constant.numeric.float.python</string>
92 </dict>
93 <dict>
94 <key>match</key>
95 <string>(?&lt;=[^[:alnum:]_])(?i:(\.\d+(e[\-\+]?\d+)?))</string>
96 <key>name</key>
97 <string>constant.numeric.float.python</string>
98 </dict>
99 <dict>
100 <key>match</key>
101 <string>\b(?i:(\d+e[\-\+]?\d+))</string>
102 <key>name</key>
103 <string>constant.numeric.float.python</string>
104 </dict>
105 <dict>
106 <key>match</key>
107 <string>\b(?i:([1-9]+[0-9]*|0)L)</string>
108 <key>name</key>
109 <string>constant.numeric.integer.decimal.long.python</string>
110 </dict>
111 <dict>
112 <key>match</key>
113 <string>\b([1-9]+[0-9]*|0)</string>
114 <key>name</key>
115 <string>constant.numeric.integer.decimal.python</string>
116 </dict>
117 <dict>
118 <key>match</key>
119 <string>\b(None|True|False|Ellipsis|NotImplemented|__debug__)\b</string>
120 <key>name</key>
121 <string>constant.language.python</string>
122 </dict>
123 <dict>
124 <key>match</key>
125 <string>\b(global|nonlocal)\b</string>
126 <key>name</key>
127 <string>storage.modifier.$1.python</string>
128 </dict>
129 <dict>
130 <key>match</key>
131 <string>\b(?:(import|from|as))\b</string>
132 <key>name</key>
133 <string>keyword.control.import.$1.python</string>
134 </dict>
135 <dict>
136 <key>comment</key>
137 <string>keyword operators that evaluate to True or False</string>
138 <key>match</key>
139 <string>\b(and|in|is|not|or)\b</string>
140 <key>name</key>
141 <string>keyword.operator.logical.python</string>
142 </dict>
143 <dict>
144 <key>comment</key>
145 <string>keywords that do not fit into other groups.</string>
146 <key>match</key>
147 <string>\b(assert|del)\b</string>
148 <key>name</key>
149 <string>keyword.other.python</string>
150 </dict>
151 <dict>
152 <key>match</key>
153 <string>&lt;&gt;</string>
154 <key>name</key>
155 <string>invalid.deprecated.operator.python</string>
156 </dict>
157 <dict>
158 <key>match</key>
159 <string>(?&lt;!\.)(apply|buffer|coerce|intern)\s*(?=\()</string>
160 <key>name</key>
161 <string>invalid.deprecated.function.python</string>
162 </dict>
163 <dict>
164 <key>match</key>
165 <string>&lt;\=|&gt;\=|\=\=|&lt;|&gt;|\!\=</string>
166 <key>name</key>
167 <string>keyword.operator.comparison.python</string>
168 </dict>
169 <dict>
170 <key>match</key>
171 <string>\+\=|-\=|\*\=|/\=|//\=|%\=|&amp;\=|\|\=|\^\=|&gt;&gt;\=|&lt;&lt;\=|\*\*\=|@\=</string>
172 <key>name</key>
173 <string>keyword.operator.assignment.augmented.python</string>
174 </dict>
175 <dict>
176 <key>match</key>
177 <string>\+|\-|\*|\*\*|/|//|%|&lt;&lt;|&gt;&gt;|&amp;|\||\^|~|(?!^)@</string>
178 <key>name</key>
179 <string>keyword.operator.arithmetic.python</string>
180 </dict>
181 <dict>
182 <key>match</key>
183 <string>\=</string>
184 <key>name</key>
185 <string>keyword.operator.assignment.python</string>
186 </dict>
187 <dict>
188 <key>begin</key>
189 <string>^\s*(class)\s+(?=[[:alpha:]_][[:alnum:]_]*\s*\:)</string>
190 <key>beginCaptures</key>
191 <dict>
192 <key>1</key>
193 <dict>
194 <key>name</key>
195 <string>storage.type.class.python</string>
196 </dict>
197 </dict>
198 <key>contentName</key>
199 <string>entity.name.type.class.python</string>
200 <key>end</key>
201 <string>\s*(:)</string>
202 <key>endCaptures</key>
203 <dict>
204 <key>1</key>
205 <dict>
206 <key>name</key>
207 <string>punctuation.section.class.begin.python</string>
208 </dict>
209 </dict>
210 <key>name</key>
211 <string>meta.class.old-style.python</string>
212 <key>patterns</key>
213 <array>
214 <dict>
215 <key>include</key>
216 <string>#entity_name_class</string>
217 </dict>
218 </array>
219 </dict>
220 <dict>
221 <key>begin</key>
222 <string>^\s*(class)\s+(?=[[:alpha:]_][[:alnum:]_]*\s*\()</string>
223 <key>beginCaptures</key>
224 <dict>
225 <key>1</key>
226 <dict>
227 <key>name</key>
228 <string>storage.type.class.python</string>
229 </dict>
230 </dict>
231 <key>end</key>
232 <string>(\))\s*(?:(\:)|(.*$\n?))</string>
233 <key>endCaptures</key>
234 <dict>
235 <key>1</key>
236 <dict>
237 <key>name</key>
238 <string>punctuation.definition.inheritance.end.python</string>
239 </dict>
240 <key>2</key>
241 <dict>
242 <key>name</key>
243 <string>punctuation.section.class.begin.python</string>
244 </dict>
245 <key>3</key>
246 <dict>
247 <key>name</key>
248 <string>invalid.illegal.missing-section-begin.python</string>
249 </dict>
250 </dict>
251 <key>name</key>
252 <string>meta.class.python</string>
253 <key>patterns</key>
254 <array>
255 <dict>
256 <key>begin</key>
257 <string>(?=[[:alpha:]_][[:alnum:]_]*)</string>
258 <key>contentName</key>
259 <string>entity.name.type.class.python</string>
260 <key>end</key>
261 <string>(?![[:alnum:]_])</string>
262 <key>patterns</key>
263 <array>
264 <dict>
265 <key>include</key>
266 <string>#entity_name_class</string>
267 </dict>
268 </array>
269 </dict>
270 <dict>
271 <key>begin</key>
272 <string>(\()</string>
273 <key>beginCaptures</key>
274 <dict>
275 <key>1</key>
276 <dict>
277 <key>name</key>
278 <string>punctuation.definition.inheritance.begin.python</string>
279 </dict>
280 </dict>
281 <key>contentName</key>
282 <string>meta.class.inheritance.python</string>
283 <key>end</key>
284 <string>(?=\)|:)</string>
285 <key>patterns</key>
286 <array>
287 <dict>
288 <key>begin</key>
289 <string>(?&lt;=\(|,)\s*</string>
290 <key>contentName</key>
291 <string>entity.other.inherited-class.python</string>
292 <key>end</key>
293 <string>\s*(?:(,)|(?=\)))</string>
294 <key>endCaptures</key>
295 <dict>
296 <key>1</key>
297 <dict>
298 <key>name</key>
299 <string>punctuation.separator.inheritance.python</string>
300 </dict>
301 </dict>
302 <key>patterns</key>
303 <array>
304 <dict>
305 <key>include</key>
306 <string>$self</string>
307 </dict>
308 </array>
309 </dict>
310 </array>
311 </dict>
312 </array>
313 </dict>
314 <dict>
315 <key>begin</key>
316 <string>^\s*(class)\s+(?=[[:alpha:]_][[:alnum:]_]*)</string>
317 <key>beginCaptures</key>
318 <dict>
319 <key>1</key>
320 <dict>
321 <key>name</key>
322 <string>storage.type.class.python</string>
323 </dict>
324 </dict>
325 <key>end</key>
326 <string>(\()|(\s*$\n?|#.*$\n?)</string>
327 <key>endCaptures</key>
328 <dict>
329 <key>1</key>
330 <dict>
331 <key>name</key>
332 <string>punctuation.definition.inheritance.begin.python</string>
333 </dict>
334 <key>2</key>
335 <dict>
336 <key>name</key>
337 <string>invalid.illegal.missing-inheritance.python</string>
338 </dict>
339 </dict>
340 <key>name</key>
341 <string>meta.class.python</string>
342 <key>patterns</key>
343 <array>
344 <dict>
345 <key>begin</key>
346 <string>(?=[[:alpha:]_][[:alnum:]_]*)</string>
347 <key>contentName</key>
348 <string>entity.name.type.class.python</string>
349 <key>end</key>
350 <string>(?![[:alnum:]_])</string>
351 <key>patterns</key>
352 <array>
353 <dict>
354 <key>include</key>
355 <string>#entity_name_function</string>
356 </dict>
357 </array>
358 </dict>
359 </array>
360 </dict>
361 <dict>
362 <key>begin</key>
363 <string>\s*(?:(async)\s+)?(def)\s+(?=[[:alpha:]_][[:alnum:]_]*\s*\()</string>
364 <key>beginCaptures</key>
365 <dict>
366 <key>1</key>
367 <dict>
368 <key>name</key>
369 <string>storage.modifier.async.python</string>
370 </dict>
371 <key>2</key>
372 <dict>
373 <key>name</key>
374 <string>storage.type.function.python</string>
375 </dict>
376 </dict>
377 <key>end</key>
378 <string>(\:)</string>
379 <key>endCaptures</key>
380 <dict>
381 <key>1</key>
382 <dict>
383 <key>name</key>
384 <string>punctuation.section.function.begin.python</string>
385 </dict>
386 </dict>
387 <key>name</key>
388 <string>meta.function.python</string>
389 <key>patterns</key>
390 <array>
391 <dict>
392 <key>begin</key>
393 <string>(?=[[:alpha:]_][[:alnum:]_]*)</string>
394 <key>contentName</key>
395 <string>entity.name.function.python</string>
396 <key>end</key>
397 <string>(?![[:alnum:]_])</string>
398 <key>patterns</key>
399 <array>
400 <dict>
401 <key>include</key>
402 <string>#entity_name_function</string>
403 </dict>
404 </array>
405 </dict>
406 <dict>
407 <key>begin</key>
408 <string>(\()</string>
409 <key>beginCaptures</key>
410 <dict>
411 <key>1</key>
412 <dict>
413 <key>name</key>
414 <string>punctuation.definition.parameters.begin.python</string>
415 </dict>
416 </dict>
417 <key>contentName</key>
418 <string>meta.function.parameters.python</string>
419 <key>end</key>
420 <string>(?=\)\s*(?:\:|-\&gt;))</string>
421 <key>patterns</key>
422 <array>
423 <dict>
424 <key>include</key>
425 <string>#annotated_arguments</string>
426 </dict>
427 <dict>
428 <key>include</key>
429 <string>#keyword_arguments</string>
430 </dict>
431 <dict>
432 <key>include</key>
433 <string>#comment</string>
434 </dict>
435 <dict>
436 <key>captures</key>
437 <dict>
438 <key>1</key>
439 <dict>
440 <key>name</key>
441 <string>variable.parameter.function.language.python</string>
442 </dict>
443 <key>2</key>
444 <dict>
445 <key>name</key>
446 <string>variable.parameter.function.python</string>
447 </dict>
448 <key>3</key>
449 <dict>
450 <key>name</key>
451 <string>punctuation.separator.parameters.python</string>
452 </dict>
453 </dict>
454 <key>match</key>
455 <string>\b(?:(self|cls)|([[:alpha:]_][[:alnum:]_]*))\s*(?:(,)|(?=[\n\)]))</string>
456 </dict>
457 </array>
458 </dict>
459 <dict>
460 <key>begin</key>
461 <string>(\))\s*(\-&gt;)</string>
462 <key>beginCaptures</key>
463 <dict>
464 <key>1</key>
465 <dict>
466 <key>name</key>
467 <string>punctuation.definition.parameters.end.python</string>
468 </dict>
469 <key>2</key>
470 <dict>
471 <key>name</key>
472 <string>punctuation.separator.annotation.result.python</string>
473 </dict>
474 </dict>
475 <key>end</key>
476 <string>(?=\:)</string>
477 <key>patterns</key>
478 <array>
479 <dict>
480 <key>include</key>
481 <string>$self</string>
482 </dict>
483 </array>
484 </dict>
485 </array>
486 </dict>
487 <dict>
488 <key>begin</key>
489 <string>\s*(?:(async)\s+)?(def)\s+(?=[[:alpha:]_][[:alnum:]_]*)</string>
490 <key>beginCaptures</key>
491 <dict>
492 <key>1</key>
493 <dict>
494 <key>name</key>
495 <string>storage.modifier.async.python</string>
496 </dict>
497 <key>2</key>
498 <dict>
499 <key>name</key>
500 <string>storage.type.function.python</string>
501 </dict>
502 </dict>
503 <key>end</key>
504 <string>(\()|\s*($\n?|#.*$\n?)</string>
505 <key>endCaptures</key>
506 <dict>
507 <key>1</key>
508 <dict>
509 <key>name</key>
510 <string>punctuation.definition.parameters.begin.python</string>
511 </dict>
512 <key>2</key>
513 <dict>
514 <key>name</key>
515 <string>invalid.illegal.missing-parameters.python</string>
516 </dict>
517 </dict>
518 <key>name</key>
519 <string>meta.function.python</string>
520 <key>patterns</key>
521 <array>
522 <dict>
523 <key>begin</key>
524 <string>(?=[[:alpha:]_][[:alnum:]_]*)</string>
525 <key>contentName</key>
526 <string>entity.name.function.python</string>
527 <key>end</key>
528 <string>(?![[:alnum:]_])</string>
529 <key>patterns</key>
530 <array>
531 <dict>
532 <key>include</key>
533 <string>#entity_name_function</string>
534 </dict>
535 </array>
536 </dict>
537 </array>
538 </dict>
539 <dict>
540 <key>captures</key>
541 <dict>
542 <key>1</key>
543 <dict>
544 <key>name</key>
545 <string>storage.modifier.async.python</string>
546 </dict>
547 <key>2</key>
548 <dict>
549 <key>name</key>
550 <string>storage.type.function.python</string>
551 </dict>
552 <key>3</key>
553 <dict>
554 <key>name</key>
555 <string>storage.type.function.python</string>
556 </dict>
557 </dict>
558 <key>match</key>
559 <string>\b(?:(?:(async)\s+)?(def)|(lambda))\b</string>
560 </dict>
561 <dict>
562 <key>comment</key>
563 <string>Keywords that delimit flow blocks or alter flow from within a
564 block.
565
566 This block should be matched *after* meta.function.python to
567 let 'async def' be matched *first*.
568 </string>
569 <key>match</key>
570 <string>(?x) \b(
571 async | await | break | continue | elif | else | except | finally | for |
572 if | pass | raise | return | try | while | with |
573 (yield(?:\s+from)?)
574 )\b
575 </string>
576 <key>name</key>
577 <string>keyword.control.flow.python</string>
578 </dict>
579 <dict>
580 <key>begin</key>
581 <string>(lambda)(?=\s+|:)</string>
582 <key>beginCaptures</key>
583 <dict>
584 <key>1</key>
585 <dict>
586 <key>name</key>
587 <string>storage.type.function.inline.python</string>
588 </dict>
589 </dict>
590 <key>end</key>
591 <string>(\:)</string>
592 <key>endCaptures</key>
593 <dict>
594 <key>1</key>
595 <dict>
596 <key>name</key>
597 <string>punctuation.definition.parameters.end.python</string>
598 </dict>
599 <key>2</key>
600 <dict>
601 <key>name</key>
602 <string>punctuation.section.function.begin.python</string>
603 </dict>
604 <key>3</key>
605 <dict>
606 <key>name</key>
607 <string>invalid.illegal.missing-section-begin.python</string>
608 </dict>
609 </dict>
610 <key>name</key>
611 <string>meta.function.inline.python</string>
612 <key>patterns</key>
613 <array>
614 <dict>
615 <key>begin</key>
616 <string>\s+</string>
617 <key>contentName</key>
618 <string>meta.function.inline.parameters.python</string>
619 <key>end</key>
620 <string>(?=\:)</string>
621 <key>patterns</key>
622 <array>
623 <dict>
624 <key>include</key>
625 <string>#keyword_arguments</string>
626 </dict>
627 <dict>
628 <key>captures</key>
629 <dict>
630 <key>1</key>
631 <dict>
632 <key>name</key>
633 <string>variable.parameter.function.python</string>
634 </dict>
635 <key>2</key>
636 <dict>
637 <key>name</key>
638 <string>punctuation.separator.parameters.python</string>
639 </dict>
640 </dict>
641 <key>match</key>
642 <string>\b([[:alpha:]_][[:alnum:]_]*)\s*(?:(,)|(?=[\n\)\:]))</string>
643 </dict>
644 </array>
645 </dict>
646 </array>
647 </dict>
648 <dict>
649 <key>begin</key>
650 <string>^\s*(?=@\s*[[:alpha:]_][[:alnum:]_]*(?:\s*\.\s*[[:alpha:]_][[:alnum:]_]*)*\s*\()</string>
651 <key>comment</key>
652 <string>a decorator may be a function call which returns a decorator.</string>
653 <key>end</key>
654 <string>(\))</string>
655 <key>endCaptures</key>
656 <dict>
657 <key>1</key>
658 <dict>
659 <key>name</key>
660 <string>punctuation.definition.arguments.end.python</string>
661 </dict>
662 </dict>
663 <key>name</key>
664 <string>meta.function.decorator.python</string>
665 <key>patterns</key>
666 <array>
667 <dict>
668 <key>begin</key>
669 <string>(?=(@)\s*[[:alpha:]_][[:alnum:]_]*(?:\s*\.\s*[[:alpha:]_][[:alnum:]_]*)*\s*\()</string>
670 <key>beginCaptures</key>
671 <dict>
672 <key>1</key>
673 <dict>
674 <key>name</key>
675 <string>punctuation.definition.decorator.python</string>
676 </dict>
677 </dict>
678 <key>contentName</key>
679 <string>entity.name.function.decorator.python</string>
680 <key>end</key>
681 <string>(?=\s*\()</string>
682 <key>patterns</key>
683 <array>
684 <dict>
685 <key>include</key>
686 <string>#dotted_name</string>
687 </dict>
688 </array>
689 </dict>
690 <dict>
691 <key>begin</key>
692 <string>(\()</string>
693 <key>beginCaptures</key>
694 <dict>
695 <key>1</key>
696 <dict>
697 <key>name</key>
698 <string>punctuation.definition.arguments.begin.python</string>
699 </dict>
700 </dict>
701 <key>contentName</key>
702 <string>meta.function.decorator.arguments.python</string>
703 <key>end</key>
704 <string>(?=\))</string>
705 <key>patterns</key>
706 <array>
707 <dict>
708 <key>include</key>
709 <string>#keyword_arguments</string>
710 </dict>
711 <dict>
712 <key>include</key>
713 <string>$self</string>
714 </dict>
715 </array>
716 </dict>
717 </array>
718 </dict>
719 <dict>
720 <key>begin</key>
721 <string>^\s*(?=@\s*[[:alpha:]_][[:alnum:]_]*(?:\s*\.\s*[[:alpha:]_][[:alnum:]_]*)*)</string>
722 <key>contentName</key>
723 <string>entity.name.function.decorator.python</string>
724 <key>end</key>
725 <string>(?=\s|$\n?|#)</string>
726 <key>name</key>
727 <string>meta.function.decorator.python</string>
728 <key>patterns</key>
729 <array>
730 <dict>
731 <key>begin</key>
732 <string>(?=(@)\s*[[:alpha:]_][[:alnum:]_]*(\s*\.\s*[[:alpha:]_][[:alnum:]_]*)*)</string>
733 <key>beginCaptures</key>
734 <dict>
735 <key>1</key>
736 <dict>
737 <key>name</key>
738 <string>punctuation.definition.decorator.python</string>
739 </dict>
740 </dict>
741 <key>end</key>
742 <string>(?=\s|$\n?|#)</string>
743 <key>patterns</key>
744 <array>
745 <dict>
746 <key>include</key>
747 <string>#dotted_name</string>
748 </dict>
749 </array>
750 </dict>
751 </array>
752 </dict>
753 <dict>
754 <key>begin</key>
755 <string>(?&lt;=\)|\])\s*(\()</string>
756 <key>beginCaptures</key>
757 <dict>
758 <key>1</key>
759 <dict>
760 <key>name</key>
761 <string>punctuation.definition.arguments.begin.python</string>
762 </dict>
763 </dict>
764 <key>contentName</key>
765 <string>meta.function-call.arguments.python</string>
766 <key>end</key>
767 <string>(\))</string>
768 <key>endCaptures</key>
769 <dict>
770 <key>1</key>
771 <dict>
772 <key>name</key>
773 <string>punctuation.definition.arguments.end.python</string>
774 </dict>
775 </dict>
776 <key>name</key>
777 <string>meta.function-call.python</string>
778 <key>patterns</key>
779 <array>
780 <dict>
781 <key>include</key>
782 <string>#keyword_arguments</string>
783 </dict>
784 <dict>
785 <key>include</key>
786 <string>$self</string>
787 </dict>
788 </array>
789 </dict>
790 <dict>
791 <key>include</key>
792 <string>#builtin_types</string>
793 </dict>
794 <dict>
795 <key>include</key>
796 <string>#builtin_functions_name</string>
797 </dict>
798 <dict>
799 <key>include</key>
800 <string>#builtin_functions_call</string>
801 </dict>
802 <dict>
803 <key>include</key>
804 <string>#errors_warnings_exceptions</string>
805 </dict>
806 <dict>
807 <key>include</key>
808 <string>#magic_function_names</string>
809 </dict>
810 <dict>
811 <key>include</key>
812 <string>#magic_function_calls</string>
813 </dict>
814 <dict>
815 <key>include</key>
816 <string>#docstrings</string>
817 </dict>
818 <dict>
819 <key>include</key>
820 <string>#magic_variable_names</string>
821 </dict>
822 <dict>
823 <key>begin</key>
824 <string>\b(self|cls)\b\s*(?=(\())</string>
825 <key>beginCaptures</key>
826 <dict>
827 <key>1</key>
828 <dict>
829 <key>name</key>
830 <string>variable.language.python</string>
831 </dict>
832 <key>2</key>
833 <dict>
834 <key>name</key>
835 <string>punctuation.definition.arguments.begin.python</string>
836 </dict>
837 </dict>
838 <key>end</key>
839 <string>(\))</string>
840 <key>endCaptures</key>
841 <dict>
842 <key>1</key>
843 <dict>
844 <key>name</key>
845 <string>punctuation.definition.arguments.end.python</string>
846 </dict>
847 </dict>
848 <key>name</key>
849 <string>meta.function-call.python</string>
850 <key>patterns</key>
851 <array>
852 <dict>
853 <key>begin</key>
854 <string>(\()</string>
855 <key>beginCaptures</key>
856 <dict>
857 <key>1</key>
858 <dict>
859 <key>name</key>
860 <string>punctuation.definition.arguments.begin.python</string>
861 </dict>
862 </dict>
863 <key>contentName</key>
864 <string>meta.function-call.arguments.python</string>
865 <key>end</key>
866 <string>(?=(\)))</string>
867 <key>endCaptures</key>
868 <dict>
869 <key>1</key>
870 <dict>
871 <key>name</key>
872 <string>punctuation.definition.arguments.end.python</string>
873 </dict>
874 </dict>
875 <key>patterns</key>
876 <array>
877 <dict>
878 <key>include</key>
879 <string>#keyword_arguments</string>
880 </dict>
881 <dict>
882 <key>include</key>
883 <string>$self</string>
884 </dict>
885 </array>
886 </dict>
887 </array>
888 </dict>
889 <dict>
890 <key>include</key>
891 <string>#language_variables</string>
892 </dict>
893 <dict>
894 <key>include</key>
895 <string>#generic_object_names</string>
896 </dict>
897 <dict>
898 <key>begin</key>
899 <string>(?:\.)?([[:alpha:]_][[:alnum:]_]*)\s*(?=(\())</string>
900 <key>beginCaptures</key>
901 <dict>
902 <key>1</key>
903 <dict>
904 <key>name</key>
905 <string>meta.function-call.generic.python</string>
906 </dict>
907 </dict>
908 <key>end</key>
909 <string>(\))</string>
910 <key>endCaptures</key>
911 <dict>
912 <key>1</key>
913 <dict>
914 <key>name</key>
915 <string>punctuation.definition.arguments.end.python</string>
916 </dict>
917 </dict>
918 <key>name</key>
919 <string>meta.function-call.python</string>
920 <key>patterns</key>
921 <array>
922 <dict>
923 <key>begin</key>
924 <string>(\()</string>
925 <key>beginCaptures</key>
926 <dict>
927 <key>1</key>
928 <dict>
929 <key>name</key>
930 <string>punctuation.definition.arguments.begin.python</string>
931 </dict>
932 </dict>
933 <key>contentName</key>
934 <string>meta.function-call.arguments.python</string>
935 <key>end</key>
936 <string>(?=\))</string>
937 <key>patterns</key>
938 <array>
939 <dict>
940 <key>include</key>
941 <string>#keyword_arguments</string>
942 </dict>
943 <dict>
944 <key>include</key>
945 <string>$self</string>
946 </dict>
947 </array>
948 </dict>
949 </array>
950 </dict>
951 <dict>
952 <key>comment</key>
953 <string>Py2 print statement that should only be matched after function calls</string>
954 <key>match</key>
955 <string>(?&lt;!\.)\b(print)(?=\s|$)</string>
956 <key>name</key>
957 <string>keyword.other.print.python</string>
958 </dict>
959 <dict>
960 <key>begin</key>
961 <string>(?=[[:alpha:]_][[:alnum:]_]*(?:\s*\.\s*[[:alpha:]_][[:alnum:]_]*)*\s*\[)</string>
962 <key>end</key>
963 <string>(\])</string>
964 <key>endCaptures</key>
965 <dict>
966 <key>1</key>
967 <dict>
968 <key>name</key>
969 <string>punctuation.definition.arguments.end.python</string>
970 </dict>
971 </dict>
972 <key>name</key>
973 <string>meta.item-access.python</string>
974 <key>patterns</key>
975 <array>
976 <dict>
977 <key>begin</key>
978 <string>(?=[[:alpha:]_][[:alnum:]_]*(?:\s*\.\s*[[:alpha:]_][[:alnum:]_]*)*\s*\[)</string>
979 <key>end</key>
980 <string>(?=\s*\[)</string>
981 <key>patterns</key>
982 <array>
983 <dict>
984 <key>include</key>
985 <string>#dotted_name</string>
986 </dict>
987 </array>
988 </dict>
989 <dict>
990 <key>begin</key>
991 <string>(\[)</string>
992 <key>beginCaptures</key>
993 <dict>
994 <key>1</key>
995 <dict>
996 <key>name</key>
997 <string>punctuation.definition.arguments.begin.python</string>
998 </dict>
999 </dict>
1000 <key>contentName</key>
1001 <string>meta.item-access.arguments.python</string>
1002 <key>end</key>
1003 <string>(?=\])</string>
1004 <key>patterns</key>
1005 <array>
1006 <dict>
1007 <key>include</key>
1008 <string>$self</string>
1009 </dict>
1010 </array>
1011 </dict>
1012 <dict>
1013 <key>begin</key>
1014 <string>\G</string>
1015 <key>end</key>
1016 <string>(?=\[)</string>
1017 <key>patterns</key>
1018 <array>
1019 <dict>
1020 <key>include</key>
1021 <string>#dotted_name</string>
1022 </dict>
1023 </array>
1024 </dict>
1025 </array>
1026 </dict>
1027 <dict>
1028 <key>captures</key>
1029 <dict>
1030 <key>1</key>
1031 <dict>
1032 <key>name</key>
1033 <string>storage.type.class.python</string>
1034 </dict>
1035 </dict>
1036 <key>match</key>
1037 <string>\b(class)\b</string>
1038 </dict>
1039 <dict>
1040 <key>include</key>
1041 <string>#line_continuation</string>
1042 </dict>
1043 <dict>
1044 <key>include</key>
1045 <string>#string_quoted_single</string>
1046 </dict>
1047 <dict>
1048 <key>include</key>
1049 <string>#string_quoted_double</string>
1050 </dict>
1051 <dict>
1052 <key>include</key>
1053 <string>#dotted_name</string>
1054 </dict>
1055 <dict>
1056 <key>begin</key>
1057 <string>(\()</string>
1058 <key>end</key>
1059 <string>(\))</string>
1060 <key>patterns</key>
1061 <array>
1062 <dict>
1063 <key>include</key>
1064 <string>$self</string>
1065 </dict>
1066 </array>
1067 </dict>
1068 <dict>
1069 <key>captures</key>
1070 <dict>
1071 <key>1</key>
1072 <dict>
1073 <key>name</key>
1074 <string>punctuation.definition.list.begin.python</string>
1075 </dict>
1076 <key>2</key>
1077 <dict>
1078 <key>name</key>
1079 <string>meta.empty-list.python</string>
1080 </dict>
1081 <key>3</key>
1082 <dict>
1083 <key>name</key>
1084 <string>punctuation.definition.list.end.python</string>
1085 </dict>
1086 </dict>
1087 <key>match</key>
1088 <string>(\[)(\s*(\]))\b</string>
1089 </dict>
1090 <dict>
1091 <key>begin</key>
1092 <string>(\[)</string>
1093 <key>beginCaptures</key>
1094 <dict>
1095 <key>1</key>
1096 <dict>
1097 <key>name</key>
1098 <string>punctuation.definition.list.begin.python</string>
1099 </dict>
1100 </dict>
1101 <key>end</key>
1102 <string>(\])</string>
1103 <key>endCaptures</key>
1104 <dict>
1105 <key>1</key>
1106 <dict>
1107 <key>name</key>
1108 <string>punctuation.definition.list.end.python</string>
1109 </dict>
1110 </dict>
1111 <key>name</key>
1112 <string>meta.structure.list.python</string>
1113 <key>patterns</key>
1114 <array>
1115 <dict>
1116 <key>begin</key>
1117 <string>(?&lt;=\[|\,)\s*(?![\],])</string>
1118 <key>contentName</key>
1119 <string>meta.structure.list.item.python</string>
1120 <key>end</key>
1121 <string>\s*(?:(,)|(?=\]))</string>
1122 <key>endCaptures</key>
1123 <dict>
1124 <key>1</key>
1125 <dict>
1126 <key>name</key>
1127 <string>punctuation.separator.list.python</string>
1128 </dict>
1129 </dict>
1130 <key>patterns</key>
1131 <array>
1132 <dict>
1133 <key>include</key>
1134 <string>$self</string>
1135 </dict>
1136 </array>
1137 </dict>
1138 </array>
1139 </dict>
1140 <dict>
1141 <key>captures</key>
1142 <dict>
1143 <key>1</key>
1144 <dict>
1145 <key>name</key>
1146 <string>punctuation.definition.tuple.begin.python</string>
1147 </dict>
1148 <key>2</key>
1149 <dict>
1150 <key>name</key>
1151 <string>meta.empty-tuple.python</string>
1152 </dict>
1153 <key>3</key>
1154 <dict>
1155 <key>name</key>
1156 <string>punctuation.definition.tuple.end.python</string>
1157 </dict>
1158 </dict>
1159 <key>match</key>
1160 <string>(\()(\s*(\)))</string>
1161 <key>name</key>
1162 <string>meta.structure.tuple.python</string>
1163 </dict>
1164 <dict>
1165 <key>captures</key>
1166 <dict>
1167 <key>1</key>
1168 <dict>
1169 <key>name</key>
1170 <string>punctuation.definition.dictionary.begin.python</string>
1171 </dict>
1172 <key>2</key>
1173 <dict>
1174 <key>name</key>
1175 <string>meta.empty-dictionary.python</string>
1176 </dict>
1177 <key>3</key>
1178 <dict>
1179 <key>name</key>
1180 <string>punctuation.definition.dictionary.end.python</string>
1181 </dict>
1182 </dict>
1183 <key>match</key>
1184 <string>(\{)(\s*(\}))</string>
1185 <key>name</key>
1186 <string>meta.structure.dictionary.python</string>
1187 </dict>
1188 <dict>
1189 <key>begin</key>
1190 <string>(\{)</string>
1191 <key>beginCaptures</key>
1192 <dict>
1193 <key>1</key>
1194 <dict>
1195 <key>name</key>
1196 <string>punctuation.definition.dictionary.begin.python</string>
1197 </dict>
1198 </dict>
1199 <key>end</key>
1200 <string>(\})</string>
1201 <key>endCaptures</key>
1202 <dict>
1203 <key>1</key>
1204 <dict>
1205 <key>name</key>
1206 <string>punctuation.definition.dictionary.end.python</string>
1207 </dict>
1208 </dict>
1209 <key>name</key>
1210 <string>meta.structure.dictionary.python</string>
1211 <key>patterns</key>
1212 <array>
1213 <dict>
1214 <key>begin</key>
1215 <string>(?&lt;=\{|\,|^)\s*(?![\},])</string>
1216 <key>contentName</key>
1217 <string>meta.structure.dictionary.key.python</string>
1218 <key>end</key>
1219 <string>\s*(?:(?=\})|(\:))</string>
1220 <key>endCaptures</key>
1221 <dict>
1222 <key>1</key>
1223 <dict>
1224 <key>name</key>
1225 <string>punctuation.separator.valuepair.dictionary.python</string>
1226 </dict>
1227 </dict>
1228 <key>patterns</key>
1229 <array>
1230 <dict>
1231 <key>include</key>
1232 <string>$self</string>
1233 </dict>
1234 </array>
1235 </dict>
1236 <dict>
1237 <key>begin</key>
1238 <string>(?&lt;=\:|^)\s*</string>
1239 <key>contentName</key>
1240 <string>meta.structure.dictionary.value.python</string>
1241 <key>end</key>
1242 <string>\s*(?:(?=\})|(,))</string>
1243 <key>endCaptures</key>
1244 <dict>
1245 <key>1</key>
1246 <dict>
1247 <key>name</key>
1248 <string>punctuation.separator.dictionary.python</string>
1249 </dict>
1250 </dict>
1251 <key>patterns</key>
1252 <array>
1253 <dict>
1254 <key>include</key>
1255 <string>$self</string>
1256 </dict>
1257 </array>
1258 </dict>
1259 </array>
1260 </dict>
1261 </array>
1262 <key>repository</key>
1263 <dict>
1264 <key>annotated_arguments</key>
1265 <dict>
1266 <key>begin</key>
1267 <string>\b([[:alpha:]_][[:alnum:]_]*)\s*(:)|(?=\()</string>
1268 <key>beginCaptures</key>
1269 <dict>
1270 <key>1</key>
1271 <dict>
1272 <key>name</key>
1273 <string>variable.parameter.function.python</string>
1274 </dict>
1275 <key>2</key>
1276 <dict>
1277 <key>name</key>
1278 <string>punctuation.separator.annotation.python</string>
1279 </dict>
1280 </dict>
1281 <key>end</key>
1282 <string>\s*(?:(,)|(?=$\n?|[\)\:]))</string>
1283 <key>endCaptures</key>
1284 <dict>
1285 <key>1</key>
1286 <dict>
1287 <key>name</key>
1288 <string>punctuation.separator.parameters.python</string>
1289 </dict>
1290 </dict>
1291 <key>patterns</key>
1292 <array>
1293 <dict>
1294 <key>include</key>
1295 <string>#annotated_group</string>
1296 </dict>
1297 <dict>
1298 <key>match</key>
1299 <string>=</string>
1300 <key>name</key>
1301 <string>keyword.operator.assignment.python</string>
1302 </dict>
1303 <dict>
1304 <key>include</key>
1305 <string>$self</string>
1306 </dict>
1307 </array>
1308 </dict>
1309 <key>annotated_group</key>
1310 <dict>
1311 <key>begin</key>
1312 <string>(\()</string>
1313 <key>beginCaptures</key>
1314 <dict>
1315 <key>1</key>
1316 <dict>
1317 <key>name</key>
1318 <string>punctuation.definition.parameters-group.begin.python</string>
1319 </dict>
1320 </dict>
1321 <key>end</key>
1322 <string>(\))</string>
1323 <key>endCaptures</key>
1324 <dict>
1325 <key>1</key>
1326 <dict>
1327 <key>name</key>
1328 <string>punctuation.definition.parameters-group.end.python</string>
1329 </dict>
1330 </dict>
1331 <key>patterns</key>
1332 <array>
1333 <dict>
1334 <key>begin</key>
1335 <string>\b([[:alpha:]_][[:alnum:]_]*)\s*(:)</string>
1336 <key>beginCaptures</key>
1337 <dict>
1338 <key>1</key>
1339 <dict>
1340 <key>name</key>
1341 <string>variable.parameter.function.python</string>
1342 </dict>
1343 <key>2</key>
1344 <dict>
1345 <key>name</key>
1346 <string>punctuation.separator.annotation.python</string>
1347 </dict>
1348 </dict>
1349 <key>end</key>
1350 <string>\s*(?:(,)|(?=$\n?|\)))</string>
1351 <key>endCaptures</key>
1352 <dict>
1353 <key>1</key>
1354 <dict>
1355 <key>name</key>
1356 <string>punctuation.separator.parameters.python</string>
1357 </dict>
1358 </dict>
1359 <key>patterns</key>
1360 <array>
1361 <dict>
1362 <key>include</key>
1363 <string>$self</string>
1364 </dict>
1365 </array>
1366 </dict>
1367 <dict>
1368 <key>begin</key>
1369 <string>\b([[:alpha:]_][[:alnum:]_]*)</string>
1370 <key>beginCaptures</key>
1371 <dict>
1372 <key>1</key>
1373 <dict>
1374 <key>name</key>
1375 <string>variable.parameter.function.python</string>
1376 </dict>
1377 </dict>
1378 <key>end</key>
1379 <string>\s*(?:(,)|(?=$\n?|\)))</string>
1380 <key>endCaptures</key>
1381 <dict>
1382 <key>1</key>
1383 <dict>
1384 <key>name</key>
1385 <string>punctuation.separator.parameters.python</string>
1386 </dict>
1387 </dict>
1388 </dict>
1389 <dict>
1390 <key>include</key>
1391 <string>#comment</string>
1392 </dict>
1393 </array>
1394 </dict>
1395 <key>builtin_functions_call</key>
1396 <dict>
1397 <key>patterns</key>
1398 <array>
1399 <dict>
1400 <key>begin</key>
1401 <string>(?x)
1402 (?&lt;!\.)\b(
1403 __import__ | abs | all | any | ascii | basestring | bin | bool |
1404 bytearray | bytes | callable | chr | classmethod | cmp | compile |
1405 complex | delattr | dict | dir | divmod | enumerate | eval | exec |
1406 execfile | file | filter | float | format | frozenset | getattr |
1407 globals | hasattr | hash | help | hex | id | input | int |
1408 isinstance | issubclass | iter | len | list | locals | long | map |
1409 max | memoryview | min | next | object | oct | open | ord | pow |
1410 print | property | range | raw_input | reduce | reload | repr |
1411 reversed | round | set | setattr | slice | sorted | staticmethod |
1412 str | sum | super | tuple | type | unichr | unicode | vars |
1413 xrange | zip)
1414 \b\s*(?=\()
1415 </string>
1416 <key>beginCaptures</key>
1417 <dict>
1418 <key>1</key>
1419 <dict>
1420 <key>name</key>
1421 <string>support.function.builtin.call.python</string>
1422 </dict>
1423 </dict>
1424 <key>end</key>
1425 <string>(\))</string>
1426 <key>endCaptures</key>
1427 <dict>
1428 <key>1</key>
1429 <dict>
1430 <key>name</key>
1431 <string>punctuation.definition.arguments.end.python</string>
1432 </dict>
1433 </dict>
1434 <key>name</key>
1435 <string>meta.function-call.python</string>
1436 <key>patterns</key>
1437 <array>
1438 <dict>
1439 <key>begin</key>
1440 <string>(?=[[:alpha:]_][[:alnum:]_]*(?:\s*\.\s*[[:alpha:]_][[:alnum:]_]*)*\s*\()</string>
1441 <key>end</key>
1442 <string>(?=\s*\()</string>
1443 <key>patterns</key>
1444 <array>
1445 <dict>
1446 <key>include</key>
1447 <string>#dotted_name</string>
1448 </dict>
1449 </array>
1450 </dict>
1451 <dict>
1452 <key>begin</key>
1453 <string>(\()</string>
1454 <key>beginCaptures</key>
1455 <dict>
1456 <key>1</key>
1457 <dict>
1458 <key>name</key>
1459 <string>punctuation.definition.arguments.begin.python</string>
1460 </dict>
1461 </dict>
1462 <key>contentName</key>
1463 <string>meta.function-call.arguments.python</string>
1464 <key>end</key>
1465 <string>(?=\))</string>
1466 <key>patterns</key>
1467 <array>
1468 <dict>
1469 <key>include</key>
1470 <string>#keyword_arguments</string>
1471 </dict>
1472 <dict>
1473 <key>include</key>
1474 <string>$self</string>
1475 </dict>
1476 </array>
1477 </dict>
1478 </array>
1479 </dict>
1480 </array>
1481 </dict>
1482 <key>builtin_functions_name</key>
1483 <dict>
1484 <key>match</key>
1485 <string>(?x)
1486 (?&lt;!\.|@)
1487 \b(
1488 __import__ | abs | all | any | ascii | basestring | bin | bool |
1489 bytearray | bytes | callable | chr | classmethod | cmp | compile |
1490 complex | delattr | dict | dir | divmod | enumerate | eval | exec |
1491 execfile | file | filter | float | format | frozenset | getattr |
1492 globals | hasattr | hash | help | hex | id | input | int |
1493 isinstance | issubclass | iter | len | list | locals | long | map |
1494 max | memoryview | min | next | object | oct | open | ord | pow |
1495 property | range | raw_input | reduce | reload | repr |
1496 reversed | round | set | setattr | slice | sorted | staticmethod |
1497 str | sum | super | tuple | type | unichr | unicode | vars |
1498 xrange | zip)
1499 \b\s*(?!(\())</string>
1500 <key>name</key>
1501 <string>support.function.builtin.name.python</string>
1502 </dict>
1503 <key>builtin_types</key>
1504 <dict>
1505 <key>comment</key>
1506 <string>These are from https://docs.python.org/X/library/stdtypes.html
1507 where X is 2.7 or 3.5.</string>
1508 <key>match</key>
1509 <string>(?x)
1510 (?&lt;!\.)
1511 \b(
1512 bool | buffer | bytearray | bytes | complex | dict | float |
1513 frozenset | int | list | long | memoryview | object | property |
1514 range | set | slice | str | tuple | type | unicode | xrange)
1515 \b(?!(\s*\())</string>
1516 <key>name</key>
1517 <string>support.type.python</string>
1518 </dict>
1519 <key>comment</key>
1520 <dict>
1521 <key>begin</key>
1522 <string>(^[ \t]+)?(?=#)</string>
1523 <key>beginCaptures</key>
1524 <dict>
1525 <key>1</key>
1526 <dict>
1527 <key>name</key>
1528 <string>punctuation.whitespace.comment.leading.python</string>
1529 </dict>
1530 </dict>
1531 <key>end</key>
1532 <string>(?!\G)</string>
1533 <key>patterns</key>
1534 <array>
1535 <dict>
1536 <key>begin</key>
1537 <string>#</string>
1538 <key>beginCaptures</key>
1539 <dict>
1540 <key>0</key>
1541 <dict>
1542 <key>name</key>
1543 <string>punctuation.definition.comment.python</string>
1544 </dict>
1545 </dict>
1546 <key>end</key>
1547 <string>\n</string>
1548 <key>name</key>
1549 <string>comment.line.number-sign.python</string>
1550 </dict>
1551 </array>
1552 </dict>
1553 <key>constant_placeholder</key>
1554 <dict>
1555 <key>match</key>
1556 <string>(?i:(%(\([[:lower:]_]+\))?#?0?\-?[ ]?\+?([0-9]*|\*)(\.([0-9]*|\*))?[hL]?[[:lower:]%])|(\{([!\[\].:\w ]+)?\}))</string>
1557 <key>name</key>
1558 <string>constant.other.placeholder.python</string>
1559 </dict>
1560 <key>docstrings</key>
1561 <dict>
1562 <key>patterns</key>
1563 <array>
1564 <dict>
1565 <key>begin</key>
1566 <string>^\s*(?=[uU]?[rR]?""")</string>
1567 <key>end</key>
1568 <string>(?&lt;=""")</string>
1569 <key>name</key>
1570 <string>comment.block.python</string>
1571 <key>patterns</key>
1572 <array>
1573 <dict>
1574 <key>include</key>
1575 <string>#string_quoted_double</string>
1576 </dict>
1577 </array>
1578 </dict>
1579 <dict>
1580 <key>begin</key>
1581 <string>^\s*(?=[uU]?[rR]?''')</string>
1582 <key>end</key>
1583 <string>(?&lt;=''')</string>
1584 <key>name</key>
1585 <string>comment.block.python</string>
1586 <key>patterns</key>
1587 <array>
1588 <dict>
1589 <key>include</key>
1590 <string>#string_quoted_single</string>
1591 </dict>
1592 </array>
1593 </dict>
1594 </array>
1595 </dict>
1596 <key>dotted_name</key>
1597 <dict>
1598 <key>begin</key>
1599 <string>(?=(?:\.(?!\s+import)\s*)?[[:alpha:]_][[:alnum:]_]*(?:\s*\.\s*[[:alpha:]_][[:alnum:]_]*)*)</string>
1600 <key>end</key>
1601 <string>(?![[:alnum:]_\.\s])|(?=(?&lt;!\.)\s+[^.])|$</string>
1602 <key>patterns</key>
1603 <array>
1604 <dict>
1605 <key>begin</key>
1606 <string>(\.)(?=[[:alpha:]_][[:alnum:]_]*)</string>
1607 <key>beginCaptures</key>
1608 <dict>
1609 <key>1</key>
1610 <dict>
1611 <key>name</key>
1612 <string>meta.dot.python</string>
1613 </dict>
1614 </dict>
1615 <key>end</key>
1616 <string>(?![[:alnum:]_])</string>
1617 <key>patterns</key>
1618 <array>
1619 <dict>
1620 <key>include</key>
1621 <string>#builtin_functions_name</string>
1622 </dict>
1623 <dict>
1624 <key>include</key>
1625 <string>#magic_function_names</string>
1626 </dict>
1627 <dict>
1628 <key>include</key>
1629 <string>#magic_variable_names</string>
1630 </dict>
1631 <dict>
1632 <key>include</key>
1633 <string>#generic_names</string>
1634 </dict>
1635 <dict>
1636 <key>include</key>
1637 <string>#illegal_names</string>
1638 </dict>
1639 </array>
1640 </dict>
1641 <dict>
1642 <key>begin</key>
1643 <string>(?&lt;!\.)(?=[[:alpha:]_][[:alnum:]_]*)</string>
1644 <key>end</key>
1645 <string>(?![[:alnum:]_])</string>
1646 <key>patterns</key>
1647 <array>
1648 <dict>
1649 <key>include</key>
1650 <string>#builtin_types</string>
1651 </dict>
1652 <dict>
1653 <key>include</key>
1654 <string>#builtin_functions_name</string>
1655 </dict>
1656 <dict>
1657 <key>include</key>
1658 <string>#builtin_functions_call</string>
1659 </dict>
1660 <dict>
1661 <key>include</key>
1662 <string>#errors_warnings_exceptions</string>
1663 </dict>
1664 <dict>
1665 <key>include</key>
1666 <string>#magic_function_names</string>
1667 </dict>
1668 <dict>
1669 <key>include</key>
1670 <string>#magic_function_calls</string>
1671 </dict>
1672 <dict>
1673 <key>include</key>
1674 <string>#magic_variable_names</string>
1675 </dict>
1676 <dict>
1677 <key>include</key>
1678 <string>#language_variables</string>
1679 </dict>
1680 <dict>
1681 <key>include</key>
1682 <string>#generic_names</string>
1683 </dict>
1684 <dict>
1685 <key>include</key>
1686 <string>#illegal_names</string>
1687 </dict>
1688 </array>
1689 </dict>
1690 </array>
1691 </dict>
1692 <key>entity_name_class</key>
1693 <dict>
1694 <key>patterns</key>
1695 <array>
1696 <dict>
1697 <key>include</key>
1698 <string>#generic_names</string>
1699 </dict>
1700 <dict>
1701 <key>include</key>
1702 <string>#illegal_names</string>
1703 </dict>
1704 </array>
1705 </dict>
1706 <key>entity_name_function</key>
1707 <dict>
1708 <key>patterns</key>
1709 <array>
1710 <dict>
1711 <key>include</key>
1712 <string>#builtin_functions_name</string>
1713 </dict>
1714 <dict>
1715 <key>include</key>
1716 <string>#magic_function_names</string>
1717 </dict>
1718 <dict>
1719 <key>include</key>
1720 <string>#illegal_names</string>
1721 </dict>
1722 </array>
1723 </dict>
1724 <key>errors_warnings_exceptions</key>
1725 <dict>
1726 <key>match</key>
1727 <string>(?x)
1728 \b(
1729 (
1730 Arithmetic | Assertion | Attribute | Buffer | BlockingIO |
1731 BrokenPipe | ChildProcess | (Connection(Aborted | Refused | Reset)?) |
1732 EOF | Environment | FileExists | FileNotFound | FloatingPoint | IO |
1733 Import | Indentation | Index | Interrupted | IsADirectory |
1734 NotADirectory | Permission | ProcessLookup | Timeout | Key | Lookup |
1735 Memory | Name | NotImplemented | OS | Overflow | Reference | Runtime |
1736 Recursion | Standard | Syntax | System | Tab | Type | UnboundLocal |
1737 Unicode(Encode | Decode | Translate)? | Value | VMS | Windows |
1738 ZeroDivision | ([[:alpha:]_][[:alnum:]_]*))
1739 ?Error
1740 |
1741 (
1742 (Pending)?Deprecation | Bytes | Future | Import | Resource |
1743 Runtime | Syntax | Unicode | User | [[:alpha:]_][[:alnum:]_]*)
1744 ?Warning
1745 |
1746 SystemExit | Stop(Async)?Iteration | NotImplemented |
1747 KeyboardInterrupt | GeneratorExit
1748 |
1749 ([[:alpha:]_][[:alnum:]_]*)
1750 ?Exception
1751 )
1752 \b</string>
1753 <key>name</key>
1754 <string>support.type.exception.python</string>
1755 </dict>
1756 <key>escaped_char</key>
1757 <dict>
1758 <key>captures</key>
1759 <dict>
1760 <key>1</key>
1761 <dict>
1762 <key>name</key>
1763 <string>constant.character.escape.hex.python</string>
1764 </dict>
1765 <key>10</key>
1766 <dict>
1767 <key>name</key>
1768 <string>constant.character.escape.linefeed.python</string>
1769 </dict>
1770 <key>11</key>
1771 <dict>
1772 <key>name</key>
1773 <string>constant.character.escape.return.python</string>
1774 </dict>
1775 <key>12</key>
1776 <dict>
1777 <key>name</key>
1778 <string>constant.character.escape.tab.python</string>
1779 </dict>
1780 <key>13</key>
1781 <dict>
1782 <key>name</key>
1783 <string>constant.character.escape.vertical-tab.python</string>
1784 </dict>
1785 <key>2</key>
1786 <dict>
1787 <key>name</key>
1788 <string>constant.character.escape.octal.python</string>
1789 </dict>
1790 <key>3</key>
1791 <dict>
1792 <key>name</key>
1793 <string>constant.character.escape.newline.python</string>
1794 </dict>
1795 <key>4</key>
1796 <dict>
1797 <key>name</key>
1798 <string>constant.character.escape.backslash.python</string>
1799 </dict>
1800 <key>5</key>
1801 <dict>
1802 <key>name</key>
1803 <string>constant.character.escape.double-quote.python</string>
1804 </dict>
1805 <key>6</key>
1806 <dict>
1807 <key>name</key>
1808 <string>constant.character.escape.single-quote.python</string>
1809 </dict>
1810 <key>7</key>
1811 <dict>
1812 <key>name</key>
1813 <string>constant.character.escape.bell.python</string>
1814 </dict>
1815 <key>8</key>
1816 <dict>
1817 <key>name</key>
1818 <string>constant.character.escape.backspace.python</string>
1819 </dict>
1820 <key>9</key>
1821 <dict>
1822 <key>name</key>
1823 <string>constant.character.escape.formfeed.python</string>
1824 </dict>
1825 </dict>
1826 <key>match</key>
1827 <string>(\\x[\h]{2})|(\\[0-7]{3})|(\\\n)|(\\\\)|(\\\")|(\\')|(\\a)|(\\b)|(\\f)|(\\n)|(\\r)|(\\t)|(\\v)</string>
1828 </dict>
1829 <key>escaped_char_raw_double</key>
1830 <dict>
1831 <key>match</key>
1832 <string>\\"</string>
1833 <key>name</key>
1834 <string>constant.character.escape.quote.python</string>
1835 </dict>
1836 <key>escaped_char_raw_single</key>
1837 <dict>
1838 <key>match</key>
1839 <string>\\'</string>
1840 <key>name</key>
1841 <string>constant.character.escape.quote.python</string>
1842 </dict>
1843 <key>escaped_unicode_char</key>
1844 <dict>
1845 <key>captures</key>
1846 <dict>
1847 <key>1</key>
1848 <dict>
1849 <key>name</key>
1850 <string>constant.character.escape.unicode.32-bit-hex.python</string>
1851 </dict>
1852 <key>2</key>
1853 <dict>
1854 <key>name</key>
1855 <string>constant.character.escape.unicode.16-bit-hex.python</string>
1856 </dict>
1857 <key>3</key>
1858 <dict>
1859 <key>name</key>
1860 <string>constant.character.escape.unicode.name.python</string>
1861 </dict>
1862 </dict>
1863 <key>match</key>
1864 <string>(\\U[\h]{8})|(\\u[\h]{4})|(\\N\{[a-zA-Z0-9\, ]+\})</string>
1865 </dict>
1866 <key>generic_names</key>
1867 <dict>
1868 <key>match</key>
1869 <string>[[:alpha:]_][[:alnum:]_]*</string>
1870 <key>name</key>
1871 <string>meta.identifier.python</string>
1872 </dict>
1873 <key>generic_object_names</key>
1874 <dict>
1875 <key>match</key>
1876 <string>(\.\b([[:alpha:]_][[:alnum:]_]*)\b(?!\(|\[)|\b([[:alpha:]_][[:alnum:]_]*)\b\.)</string>
1877 </dict>
1878 <key>illegal_names</key>
1879 <dict>
1880 <key>comment</key>
1881 <string>from Lib/keyword.py, in kwlist. `async` and `await` not keywords until Python 3.7 (according to PEP-0492)</string>
1882 <key>match</key>
1883 <string>(?x)
1884 \b (
1885 False | None | True | and | as | assert | break | class | continue | def |
1886 del | elif | else | except | exec | finally | for | from | global | if |
1887 import | in | is | lambda | nonlocal | not | or | pass | print | raise |
1888 return | try | while | with | yield | __debug__ )
1889 \b</string>
1890 <key>name</key>
1891 <string>invalid.illegal.name.python</string>
1892 </dict>
1893 <key>keyword_arguments</key>
1894 <dict>
1895 <key>begin</key>
1896 <string>\b([[:alpha:]_][[:alnum:]_]*)\s*(=)(?!=)</string>
1897 <key>beginCaptures</key>
1898 <dict>
1899 <key>1</key>
1900 <dict>
1901 <key>name</key>
1902 <string>variable.parameter.function.keyword.python</string>
1903 </dict>
1904 <key>2</key>
1905 <dict>
1906 <key>name</key>
1907 <string>keyword.operator.assignment.python</string>
1908 </dict>
1909 </dict>
1910 <key>end</key>
1911 <string>\s*(?:(,)|(?=[\)\:]))</string>
1912 <key>endCaptures</key>
1913 <dict>
1914 <key>1</key>
1915 <dict>
1916 <key>name</key>
1917 <string>punctuation.separator.parameters.python</string>
1918 </dict>
1919 </dict>
1920 <key>patterns</key>
1921 <array>
1922 <dict>
1923 <key>include</key>
1924 <string>$self</string>
1925 </dict>
1926 </array>
1927 </dict>
1928 <key>language_variables</key>
1929 <dict>
1930 <key>captures</key>
1931 <dict>
1932 <key>1</key>
1933 <dict>
1934 <key>name</key>
1935 <string>variable.language.python</string>
1936 </dict>
1937 </dict>
1938 <key>match</key>
1939 <string>(?&lt;!\.)\b(self|cls)\b(?:\.|\()?</string>
1940 </dict>
1941 <key>line_continuation</key>
1942 <dict>
1943 <key>captures</key>
1944 <dict>
1945 <key>1</key>
1946 <dict>
1947 <key>name</key>
1948 <string>punctuation.separator.continuation.line.python</string>
1949 </dict>
1950 <key>2</key>
1951 <dict>
1952 <key>name</key>
1953 <string>invalid.illegal.unexpected-text.python</string>
1954 </dict>
1955 </dict>
1956 <key>match</key>
1957 <string>(\\)(.*)$\n?</string>
1958 </dict>
1959 <key>magic_function_calls</key>
1960 <dict>
1961 <key>patterns</key>
1962 <array>
1963 <dict>
1964 <key>begin</key>
1965 <string>(?x)
1966 (\.)?
1967 \b(
1968 __(?:
1969 abs | add | aenter | aexit | aiter | and | anext | await | bool |
1970 bytes | call | ceil | cmp | class_getitem | coerce | complex | contains |
1971 copy | deepcopy | del | delattr | delete | delitem | delslice | dir | div |
1972 divmod | enter | eq | execute | exit | float | floor | floordiv | format |
1973 fspath | ge | get | getattr | getattribute | getinitargs | getitem |
1974 getnewargs | getnewargs_ex | getslice | getstate | gt | hash | hex | iadd |
1975 iand | idiv | idivmod | ifloordiv | ilshift | imatmul | imod | imul | index |
1976 init | init_subclass | instancecheck | int | invert | iop | ior | ipow |
1977 irshift | isub | iter | itruediv | ixor | le | len | length_hint | long |
1978 lshift | lt | main | matmul | missing | mod | mro_entries | mul | ne | neg |
1979 new | next | nonzero | oct | op | or | pos | pow | prepare | radd | rand |
1980 rcmp | rdiv | rdivmod | reduce | reduce_ex | repr | reversed | rfloordiv |
1981 rlshift | rmatmul | rmod | rmul | rop | ror | round | rpow | rrshift |
1982 rshift | rsub | rtruediv | rxor | set | set_name | setattr | setitem |
1983 setslice | setstate | sizeof | str | sub | subclasscheck | subclasshook |
1984 truediv | trunc | unicode | xor)
1985 __)
1986 \s*(?=(\())</string>
1987 <key>beginCaptures</key>
1988 <dict>
1989 <key>2</key>
1990 <dict>
1991 <key>name</key>
1992 <string>support.function.magic.call.python</string>
1993 </dict>
1994 <key>4</key>
1995 <dict>
1996 <key>name</key>
1997 <string>punctuation.definition.arguments.begin.python</string>
1998 </dict>
1999 </dict>
2000 <key>end</key>
2001 <string>(\))</string>
2002 <key>endCaptures</key>
2003 <dict>
2004 <key>1</key>
2005 <dict>
2006 <key>name</key>
2007 <string>punctuation.definition.arguments.end.python</string>
2008 </dict>
2009 </dict>
2010 <key>name</key>
2011 <string>meta.function-call.python</string>
2012 <key>patterns</key>
2013 <array>
2014 <dict>
2015 <key>begin</key>
2016 <string>(?=[[:alpha:]_][[:alnum:]_]*(?:\s*\.\s*[[:alpha:]_][[:alnum:]_]*)*\s*\()</string>
2017 <key>end</key>
2018 <string>(?=\s*\()</string>
2019 <key>patterns</key>
2020 <array>
2021 <dict>
2022 <key>include</key>
2023 <string>#dotted_name</string>
2024 </dict>
2025 </array>
2026 </dict>
2027 <dict>
2028 <key>begin</key>
2029 <string>(\()</string>
2030 <key>beginCaptures</key>
2031 <dict>
2032 <key>1</key>
2033 <dict>
2034 <key>name</key>
2035 <string>punctuation.definition.arguments.begin.python</string>
2036 </dict>
2037 </dict>
2038 <key>contentName</key>
2039 <string>meta.function-call.arguments.python</string>
2040 <key>end</key>
2041 <string>(?=\))</string>
2042 <key>patterns</key>
2043 <array>
2044 <dict>
2045 <key>include</key>
2046 <string>#keyword_arguments</string>
2047 </dict>
2048 <dict>
2049 <key>include</key>
2050 <string>$self</string>
2051 </dict>
2052 </array>
2053 </dict>
2054 </array>
2055 </dict>
2056 </array>
2057 </dict>
2058 <key>magic_function_names</key>
2059 <dict>
2060 <key>captures</key>
2061 <dict>
2062 <key>2</key>
2063 <dict>
2064 <key>name</key>
2065 <string>support.function.magic.name.python</string>
2066 </dict>
2067 </dict>
2068 <key>comment</key>
2069 <string>These methods have magic interpretation by python and are generally
2070 called indirectly through syntactic constructs. Names are from
2071 https://docs.python.org/X/reference/datamodel.html where X is 2.7 and 3.5
2072 See also http://www.rafekettler.com/magicmethods.html</string>
2073 <key>match</key>
2074 <string>(?x)
2075 (def|\.)?
2076 \s*\b(
2077 __(?:
2078 abs | add | aenter | aexit | aiter | and | anext | await | bool |
2079 bytes | call | ceil | cmp | class_getitem | coerce | complex | contains |
2080 copy | deepcopy | del | delattr | delete | delitem | delslice | dir | div |
2081 divmod | enter | eq | execute | exit | float | floor | floordiv | format |
2082 fspath | ge | get | getattr | getattribute | getinitargs | getitem |
2083 getnewargs | getnewargs_ex | getslice | getstate | gt | hash | hex | iadd |
2084 iand | idiv | idivmod | ifloordiv | ilshift | imatmul | imod | imul | index |
2085 init | init_subclass | instancecheck | int | invert | iop | ior | ipow |
2086 irshift | isub | iter | itruediv | ixor | le | len | length_hint | long |
2087 lshift | lt | main | matmul | missing | mod | mro_entries | mul | ne | neg |
2088 new | next | nonzero | oct | op | or | pos | pow | prepare | radd | rand |
2089 rcmp | rdiv | rdivmod | reduce | reduce_ex | repr | reversed | rfloordiv |
2090 rlshift | rmatmul | rmod | rmul | rop | ror | round | rpow | rrshift |
2091 rshift | rsub | rtruediv | rxor | set | set_name | setattr | setitem |
2092 setslice | setstate | sizeof | str | sub | subclasscheck | subclasshook |
2093 truediv | trunc | unicode | xor)
2094 __)
2095 \b</string>
2096 </dict>
2097 <key>magic_variable_names</key>
2098 <dict>
2099 <key>captures</key>
2100 <dict>
2101 <key>2</key>
2102 <dict>
2103 <key>name</key>
2104 <string>support.variable.magic.python</string>
2105 </dict>
2106 </dict>
2107 <key>comment</key>
2108 <string>magic attributes which a class/module may have.</string>
2109 <key>match</key>
2110 <string>(?x)
2111 (\.)?
2112 \b(
2113 __(?:
2114 all | annotations | bases | cached | class | closure | code | debug |
2115 defaults | dict | doc | file | func | future | globals | kwdefaults |
2116 loader | members | metaclass | methods | module | mro | name | origin |
2117 package | path | qualname | self | slots | spec | subclasses | version |
2118 weakref | wrapped)
2119 __) \b</string>
2120 </dict>
2121 <key>regular_expressions</key>
2122 <dict>
2123 <key>comment</key>
2124 <string>Changed disabled to 1 to turn off syntax highlighting in “r” strings.</string>
2125 <key>disabled</key>
2126 <integer>0</integer>
2127 <key>patterns</key>
2128 <array>
2129 <dict>
2130 <key>include</key>
2131 <string>source.regexp.python</string>
2132 </dict>
2133 </array>
2134 </dict>
2135 <key>string_quoted_double</key>
2136 <dict>
2137 <key>patterns</key>
2138 <array>
2139 <dict>
2140 <key>begin</key>
2141 <string>([uU]r)(""")</string>
2142 <key>beginCaptures</key>
2143 <dict>
2144 <key>1</key>
2145 <dict>
2146 <key>name</key>
2147 <string>storage.type.string.python</string>
2148 </dict>
2149 <key>2</key>
2150 <dict>
2151 <key>name</key>
2152 <string>punctuation.definition.string.begin.python</string>
2153 </dict>
2154 </dict>
2155 <key>comment</key>
2156 <string>single quoted unicode-raw string</string>
2157 <key>end</key>
2158 <string>"""</string>
2159 <key>endCaptures</key>
2160 <dict>
2161 <key>0</key>
2162 <dict>
2163 <key>name</key>
2164 <string>punctuation.definition.string.end.python</string>
2165 </dict>
2166 </dict>
2167 <key>name</key>
2168 <string>string.quoted.double.block.unicode-raw-regex.python</string>
2169 <key>patterns</key>
2170 <array>
2171 <dict>
2172 <key>include</key>
2173 <string>#constant_placeholder</string>
2174 </dict>
2175 <dict>
2176 <key>include</key>
2177 <string>#escaped_char_raw_double</string>
2178 </dict>
2179 <dict>
2180 <key>include</key>
2181 <string>#regular_expressions</string>
2182 </dict>
2183 </array>
2184 </dict>
2185 <dict>
2186 <key>begin</key>
2187 <string>([uU]R)(""")</string>
2188 <key>beginCaptures</key>
2189 <dict>
2190 <key>1</key>
2191 <dict>
2192 <key>name</key>
2193 <string>storage.type.string.python</string>
2194 </dict>
2195 <key>2</key>
2196 <dict>
2197 <key>name</key>
2198 <string>punctuation.definition.string.begin.python</string>
2199 </dict>
2200 </dict>
2201 <key>comment</key>
2202 <string>single quoted unicode-raw string without regular expression highlighting</string>
2203 <key>end</key>
2204 <string>"""</string>
2205 <key>endCaptures</key>
2206 <dict>
2207 <key>0</key>
2208 <dict>
2209 <key>name</key>
2210 <string>punctuation.definition.string.end.python</string>
2211 </dict>
2212 </dict>
2213 <key>name</key>
2214 <string>string.quoted.double.block.unicode-raw.python</string>
2215 <key>patterns</key>
2216 <array>
2217 <dict>
2218 <key>include</key>
2219 <string>#constant_placeholder</string>
2220 </dict>
2221 <dict>
2222 <key>include</key>
2223 <string>#escaped_char_raw_double</string>
2224 </dict>
2225 </array>
2226 </dict>
2227 <dict>
2228 <key>begin</key>
2229 <string>([bB]r)(""")</string>
2230 <key>beginCaptures</key>
2231 <dict>
2232 <key>1</key>
2233 <dict>
2234 <key>name</key>
2235 <string>storage.type.string.python</string>
2236 </dict>
2237 <key>2</key>
2238 <dict>
2239 <key>name</key>
2240 <string>punctuation.definition.string.begin.python</string>
2241 </dict>
2242 </dict>
2243 <key>comment</key>
2244 <string>single quoted bytes-raw string</string>
2245 <key>end</key>
2246 <string>"""</string>
2247 <key>endCaptures</key>
2248 <dict>
2249 <key>0</key>
2250 <dict>
2251 <key>name</key>
2252 <string>punctuation.definition.string.end.python</string>
2253 </dict>
2254 </dict>
2255 <key>name</key>
2256 <string>string.quoted.double.block.bytes-raw-regex.python</string>
2257 <key>patterns</key>
2258 <array>
2259 <dict>
2260 <key>include</key>
2261 <string>#constant_placeholder</string>
2262 </dict>
2263 <dict>
2264 <key>include</key>
2265 <string>#escaped_char_raw_double</string>
2266 </dict>
2267 <dict>
2268 <key>include</key>
2269 <string>#regular_expressions</string>
2270 </dict>
2271 </array>
2272 </dict>
2273 <dict>
2274 <key>begin</key>
2275 <string>([bB]R)(""")</string>
2276 <key>beginCaptures</key>
2277 <dict>
2278 <key>1</key>
2279 <dict>
2280 <key>name</key>
2281 <string>storage.type.string.python</string>
2282 </dict>
2283 <key>2</key>
2284 <dict>
2285 <key>name</key>
2286 <string>punctuation.definition.string.begin.python</string>
2287 </dict>
2288 </dict>
2289 <key>comment</key>
2290 <string>single quoted bytes-raw string without regular expression highlighting</string>
2291 <key>end</key>
2292 <string>"""</string>
2293 <key>endCaptures</key>
2294 <dict>
2295 <key>0</key>
2296 <dict>
2297 <key>name</key>
2298 <string>punctuation.definition.string.end.python</string>
2299 </dict>
2300 </dict>
2301 <key>name</key>
2302 <string>string.quoted.double.block.bytes-raw.python</string>
2303 <key>patterns</key>
2304 <array>
2305 <dict>
2306 <key>include</key>
2307 <string>#constant_placeholder</string>
2308 </dict>
2309 <dict>
2310 <key>include</key>
2311 <string>#escaped_char_raw_double</string>
2312 </dict>
2313 </array>
2314 </dict>
2315 <dict>
2316 <key>begin</key>
2317 <string>(r)(""")</string>
2318 <key>beginCaptures</key>
2319 <dict>
2320 <key>1</key>
2321 <dict>
2322 <key>name</key>
2323 <string>storage.type.string.python</string>
2324 </dict>
2325 <key>2</key>
2326 <dict>
2327 <key>name</key>
2328 <string>punctuation.definition.string.begin.python</string>
2329 </dict>
2330 </dict>
2331 <key>comment</key>
2332 <string>double quoted raw string</string>
2333 <key>end</key>
2334 <string>"""</string>
2335 <key>endCaptures</key>
2336 <dict>
2337 <key>0</key>
2338 <dict>
2339 <key>name</key>
2340 <string>punctuation.definition.string.end.python</string>
2341 </dict>
2342 </dict>
2343 <key>name</key>
2344 <string>string.quoted.double.block.raw-regex.python</string>
2345 <key>patterns</key>
2346 <array>
2347 <dict>
2348 <key>include</key>
2349 <string>#constant_placeholder</string>
2350 </dict>
2351 <dict>
2352 <key>include</key>
2353 <string>#escaped_char_raw_double</string>
2354 </dict>
2355 <dict>
2356 <key>include</key>
2357 <string>#regular_expressions</string>
2358 </dict>
2359 </array>
2360 </dict>
2361 <dict>
2362 <key>begin</key>
2363 <string>(R)(""")</string>
2364 <key>beginCaptures</key>
2365 <dict>
2366 <key>1</key>
2367 <dict>
2368 <key>name</key>
2369 <string>storage.type.string.python</string>
2370 </dict>
2371 <key>2</key>
2372 <dict>
2373 <key>name</key>
2374 <string>punctuation.definition.string.begin.python</string>
2375 </dict>
2376 </dict>
2377 <key>comment</key>
2378 <string>double quoted raw string</string>
2379 <key>end</key>
2380 <string>"""</string>
2381 <key>endCaptures</key>
2382 <dict>
2383 <key>0</key>
2384 <dict>
2385 <key>name</key>
2386 <string>punctuation.definition.string.end.python</string>
2387 </dict>
2388 </dict>
2389 <key>name</key>
2390 <string>string.quoted.double.block.raw.python</string>
2391 <key>patterns</key>
2392 <array>
2393 <dict>
2394 <key>include</key>
2395 <string>#constant_placeholder</string>
2396 </dict>
2397 <dict>
2398 <key>include</key>
2399 <string>#escaped_char_raw_double</string>
2400 </dict>
2401 </array>
2402 </dict>
2403 <dict>
2404 <key>begin</key>
2405 <string>([uU])(""")</string>
2406 <key>beginCaptures</key>
2407 <dict>
2408 <key>1</key>
2409 <dict>
2410 <key>name</key>
2411 <string>storage.type.string.python</string>
2412 </dict>
2413 <key>2</key>
2414 <dict>
2415 <key>name</key>
2416 <string>punctuation.definition.string.begin.python</string>
2417 </dict>
2418 </dict>
2419 <key>comment</key>
2420 <string>double quoted unicode string</string>
2421 <key>end</key>
2422 <string>"""</string>
2423 <key>endCaptures</key>
2424 <dict>
2425 <key>0</key>
2426 <dict>
2427 <key>name</key>
2428 <string>punctuation.definition.string.end.python</string>
2429 </dict>
2430 </dict>
2431 <key>name</key>
2432 <string>string.quoted.double.block.unicode.python</string>
2433 <key>patterns</key>
2434 <array>
2435 <dict>
2436 <key>include</key>
2437 <string>#constant_placeholder</string>
2438 </dict>
2439 <dict>
2440 <key>include</key>
2441 <string>#escaped_unicode_char</string>
2442 </dict>
2443 <dict>
2444 <key>include</key>
2445 <string>#escaped_char</string>
2446 </dict>
2447 </array>
2448 </dict>
2449 <dict>
2450 <key>begin</key>
2451 <string>([bB])(""")</string>
2452 <key>beginCaptures</key>
2453 <dict>
2454 <key>1</key>
2455 <dict>
2456 <key>name</key>
2457 <string>storage.type.string.python</string>
2458 </dict>
2459 <key>2</key>
2460 <dict>
2461 <key>name</key>
2462 <string>punctuation.definition.string.begin.python</string>
2463 </dict>
2464 </dict>
2465 <key>comment</key>
2466 <string>double quoted bytes string</string>
2467 <key>end</key>
2468 <string>"""</string>
2469 <key>endCaptures</key>
2470 <dict>
2471 <key>0</key>
2472 <dict>
2473 <key>name</key>
2474 <string>punctuation.definition.string.end.python</string>
2475 </dict>
2476 </dict>
2477 <key>name</key>
2478 <string>string.quoted.double.block.bytes.python</string>
2479 <key>patterns</key>
2480 <array>
2481 <dict>
2482 <key>include</key>
2483 <string>#constant_placeholder</string>
2484 </dict>
2485 <dict>
2486 <key>include</key>
2487 <string>#escaped_unicode_char</string>
2488 </dict>
2489 <dict>
2490 <key>include</key>
2491 <string>#escaped_char</string>
2492 </dict>
2493 </array>
2494 </dict>
2495 <dict>
2496 <key>captures</key>
2497 <dict>
2498 <key>1</key>
2499 <dict>
2500 <key>name</key>
2501 <string>storage.type.string.python</string>
2502 </dict>
2503 <key>2</key>
2504 <dict>
2505 <key>name</key>
2506 <string>punctuation.definition.string.begin.python</string>
2507 </dict>
2508 <key>3</key>
2509 <dict>
2510 <key>patterns</key>
2511 <array>
2512 <dict>
2513 <key>include</key>
2514 <string>#constant_placeholder</string>
2515 </dict>
2516 <dict>
2517 <key>include</key>
2518 <string>#escaped_char_raw_double</string>
2519 </dict>
2520 <dict>
2521 <key>include</key>
2522 <string>#regular_expressions</string>
2523 </dict>
2524 </array>
2525 </dict>
2526 <key>4</key>
2527 <dict>
2528 <key>name</key>
2529 <string>punctuation.definition.string.end.python</string>
2530 </dict>
2531 </dict>
2532 <key>comment</key>
2533 <string>double-quoted raw string</string>
2534 <key>match</key>
2535 <string>([uU]r)(")((?:[^"\\]|\\.)*)(")</string>
2536 <key>name</key>
2537 <string>string.quoted.double.single-line.unicode-raw-regex.python</string>
2538 </dict>
2539 <dict>
2540 <key>begin</key>
2541 <string>([uU]R)(")</string>
2542 <key>beginCaptures</key>
2543 <dict>
2544 <key>1</key>
2545 <dict>
2546 <key>name</key>
2547 <string>storage.type.string.python</string>
2548 </dict>
2549 <key>2</key>
2550 <dict>
2551 <key>name</key>
2552 <string>punctuation.definition.string.begin.python</string>
2553 </dict>
2554 </dict>
2555 <key>comment</key>
2556 <string>double-quoted raw string</string>
2557 <key>end</key>
2558 <string>(")|(\n)</string>
2559 <key>endCaptures</key>
2560 <dict>
2561 <key>1</key>
2562 <dict>
2563 <key>name</key>
2564 <string>punctuation.definition.string.end.python</string>
2565 </dict>
2566 <key>2</key>
2567 <dict>
2568 <key>name</key>
2569 <string>invalid.illegal.unclosed-string.python</string>
2570 </dict>
2571 </dict>
2572 <key>name</key>
2573 <string>string.quoted.double.single-line.unicode-raw.python</string>
2574 <key>patterns</key>
2575 <array>
2576 <dict>
2577 <key>include</key>
2578 <string>#constant_placeholder</string>
2579 </dict>
2580 <dict>
2581 <key>include</key>
2582 <string>#escaped_char_raw_double</string>
2583 </dict>
2584 </array>
2585 </dict>
2586 <dict>
2587 <key>begin</key>
2588 <string>([bB]r)(")</string>
2589 <key>beginCaptures</key>
2590 <dict>
2591 <key>1</key>
2592 <dict>
2593 <key>name</key>
2594 <string>storage.type.string.python</string>
2595 </dict>
2596 <key>2</key>
2597 <dict>
2598 <key>name</key>
2599 <string>punctuation.definition.string.begin.python</string>
2600 </dict>
2601 </dict>
2602 <key>comment</key>
2603 <string>double-quoted raw string</string>
2604 <key>end</key>
2605 <string>(")|(\n)</string>
2606 <key>endCaptures</key>
2607 <dict>
2608 <key>1</key>
2609 <dict>
2610 <key>name</key>
2611 <string>punctuation.definition.string.end.python</string>
2612 </dict>
2613 <key>2</key>
2614 <dict>
2615 <key>name</key>
2616 <string>invalid.illegal.unclosed-string.python</string>
2617 </dict>
2618 </dict>
2619 <key>name</key>
2620 <string>string.quoted.double.single-line.bytes-raw-regex.python</string>
2621 <key>patterns</key>
2622 <array>
2623 <dict>
2624 <key>include</key>
2625 <string>#constant_placeholder</string>
2626 </dict>
2627 <dict>
2628 <key>include</key>
2629 <string>#escaped_char_raw_double</string>
2630 </dict>
2631 <dict>
2632 <key>include</key>
2633 <string>#regular_expressions</string>
2634 </dict>
2635 </array>
2636 </dict>
2637 <dict>
2638 <key>begin</key>
2639 <string>([bB]R)(")</string>
2640 <key>beginCaptures</key>
2641 <dict>
2642 <key>1</key>
2643 <dict>
2644 <key>name</key>
2645 <string>storage.type.string.python</string>
2646 </dict>
2647 <key>2</key>
2648 <dict>
2649 <key>name</key>
2650 <string>punctuation.definition.string.begin.python</string>
2651 </dict>
2652 </dict>
2653 <key>comment</key>
2654 <string>double-quoted raw string</string>
2655 <key>end</key>
2656 <string>(")|(\n)</string>
2657 <key>endCaptures</key>
2658 <dict>
2659 <key>1</key>
2660 <dict>
2661 <key>name</key>
2662 <string>punctuation.definition.string.end.python</string>
2663 </dict>
2664 <key>2</key>
2665 <dict>
2666 <key>name</key>
2667 <string>invalid.illegal.unclosed-string.python</string>
2668 </dict>
2669 </dict>
2670 <key>name</key>
2671 <string>string.quoted.double.single-line.bytes-raw.python</string>
2672 <key>patterns</key>
2673 <array>
2674 <dict>
2675 <key>include</key>
2676 <string>#constant_placeholder</string>
2677 </dict>
2678 <dict>
2679 <key>include</key>
2680 <string>#escaped_char_raw_double</string>
2681 </dict>
2682 </array>
2683 </dict>
2684 <dict>
2685 <key>captures</key>
2686 <dict>
2687 <key>1</key>
2688 <dict>
2689 <key>name</key>
2690 <string>storage.type.string.python</string>
2691 </dict>
2692 <key>2</key>
2693 <dict>
2694 <key>name</key>
2695 <string>punctuation.definition.string.begin.python</string>
2696 </dict>
2697 <key>3</key>
2698 <dict>
2699 <key>patterns</key>
2700 <array>
2701 <dict>
2702 <key>include</key>
2703 <string>#constant_placeholder</string>
2704 </dict>
2705 <dict>
2706 <key>include</key>
2707 <string>#escaped_char_raw_double</string>
2708 </dict>
2709 <dict>
2710 <key>include</key>
2711 <string>#regular_expressions</string>
2712 </dict>
2713 </array>
2714 </dict>
2715 <key>4</key>
2716 <dict>
2717 <key>name</key>
2718 <string>punctuation.definition.string.end.python</string>
2719 </dict>
2720 </dict>
2721 <key>comment</key>
2722 <string>double-quoted raw string</string>
2723 <key>match</key>
2724 <string>(r)(")((?:[^"\\]|\\.)*)(")</string>
2725 <key>name</key>
2726 <string>string.quoted.double.single-line.raw-regex.python</string>
2727 </dict>
2728 <dict>
2729 <key>begin</key>
2730 <string>(R)(")</string>
2731 <key>beginCaptures</key>
2732 <dict>
2733 <key>1</key>
2734 <dict>
2735 <key>name</key>
2736 <string>storage.type.string.python</string>
2737 </dict>
2738 <key>2</key>
2739 <dict>
2740 <key>name</key>
2741 <string>punctuation.definition.string.begin.python</string>
2742 </dict>
2743 </dict>
2744 <key>comment</key>
2745 <string>double-quoted raw string</string>
2746 <key>end</key>
2747 <string>(")|(\n)</string>
2748 <key>endCaptures</key>
2749 <dict>
2750 <key>1</key>
2751 <dict>
2752 <key>name</key>
2753 <string>punctuation.definition.string.end.python</string>
2754 </dict>
2755 <key>2</key>
2756 <dict>
2757 <key>name</key>
2758 <string>invalid.illegal.unclosed-string.python</string>
2759 </dict>
2760 </dict>
2761 <key>name</key>
2762 <string>string.quoted.double.single-line.raw.python</string>
2763 <key>patterns</key>
2764 <array>
2765 <dict>
2766 <key>include</key>
2767 <string>#constant_placeholder</string>
2768 </dict>
2769 <dict>
2770 <key>include</key>
2771 <string>#escaped_char_raw_double</string>
2772 </dict>
2773 </array>
2774 </dict>
2775 <dict>
2776 <key>begin</key>
2777 <string>([uU])(")</string>
2778 <key>beginCaptures</key>
2779 <dict>
2780 <key>1</key>
2781 <dict>
2782 <key>name</key>
2783 <string>storage.type.string.python</string>
2784 </dict>
2785 <key>2</key>
2786 <dict>
2787 <key>name</key>
2788 <string>punctuation.definition.string.begin.python</string>
2789 </dict>
2790 </dict>
2791 <key>comment</key>
2792 <string>double quoted unicode string</string>
2793 <key>end</key>
2794 <string>(")|(\n)</string>
2795 <key>endCaptures</key>
2796 <dict>
2797 <key>1</key>
2798 <dict>
2799 <key>name</key>
2800 <string>punctuation.definition.string.end.python</string>
2801 </dict>
2802 <key>2</key>
2803 <dict>
2804 <key>name</key>
2805 <string>invalid.illegal.unclosed-string.python</string>
2806 </dict>
2807 </dict>
2808 <key>name</key>
2809 <string>string.quoted.double.single-line.unicode.python</string>
2810 <key>patterns</key>
2811 <array>
2812 <dict>
2813 <key>include</key>
2814 <string>#constant_placeholder</string>
2815 </dict>
2816 <dict>
2817 <key>include</key>
2818 <string>#escaped_unicode_char</string>
2819 </dict>
2820 <dict>
2821 <key>include</key>
2822 <string>#escaped_char</string>
2823 </dict>
2824 </array>
2825 </dict>
2826 <dict>
2827 <key>begin</key>
2828 <string>([bB])(")</string>
2829 <key>beginCaptures</key>
2830 <dict>
2831 <key>1</key>
2832 <dict>
2833 <key>name</key>
2834 <string>storage.type.string.python</string>
2835 </dict>
2836 <key>2</key>
2837 <dict>
2838 <key>name</key>
2839 <string>punctuation.definition.string.begin.python</string>
2840 </dict>
2841 </dict>
2842 <key>comment</key>
2843 <string>double quoted bytes string</string>
2844 <key>end</key>
2845 <string>(")|(\n)</string>
2846 <key>endCaptures</key>
2847 <dict>
2848 <key>1</key>
2849 <dict>
2850 <key>name</key>
2851 <string>punctuation.definition.string.end.python</string>
2852 </dict>
2853 <key>2</key>
2854 <dict>
2855 <key>name</key>
2856 <string>invalid.illegal.unclosed-string.python</string>
2857 </dict>
2858 </dict>
2859 <key>name</key>
2860 <string>string.quoted.double.single-line.bytes.python</string>
2861 <key>patterns</key>
2862 <array>
2863 <dict>
2864 <key>include</key>
2865 <string>#constant_placeholder</string>
2866 </dict>
2867 <dict>
2868 <key>include</key>
2869 <string>#escaped_unicode_char</string>
2870 </dict>
2871 <dict>
2872 <key>include</key>
2873 <string>#escaped_char</string>
2874 </dict>
2875 </array>
2876 </dict>
2877 <dict>
2878 <key>begin</key>
2879 <string>(")(?=\s*(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER))</string>
2880 <key>beginCaptures</key>
2881 <dict>
2882 <key>1</key>
2883 <dict>
2884 <key>name</key>
2885 <string>punctuation.definition.string.begin.python</string>
2886 </dict>
2887 </dict>
2888 <key>comment</key>
2889 <string>double quoted string</string>
2890 <key>end</key>
2891 <string>(")|(\n)</string>
2892 <key>endCaptures</key>
2893 <dict>
2894 <key>1</key>
2895 <dict>
2896 <key>name</key>
2897 <string>punctuation.definition.string.end.python</string>
2898 </dict>
2899 <key>2</key>
2900 <dict>
2901 <key>name</key>
2902 <string>invalid.illegal.unclosed-string.python</string>
2903 </dict>
2904 </dict>
2905 <key>name</key>
2906 <string>string.quoted.double.single-line.sql.python</string>
2907 <key>patterns</key>
2908 <array>
2909 <dict>
2910 <key>captures</key>
2911 <dict>
2912 <key>0</key>
2913 <dict>
2914 <key>patterns</key>
2915 <array>
2916 <dict>
2917 <key>include</key>
2918 <string>#constant_placeholder</string>
2919 </dict>
2920 <dict>
2921 <key>include</key>
2922 <string>#escaped_unicode_char</string>
2923 </dict>
2924 <dict>
2925 <key>include</key>
2926 <string>#escaped_char</string>
2927 </dict>
2928 <dict>
2929 <key>include</key>
2930 <string>source.sql</string>
2931 </dict>
2932 </array>
2933 </dict>
2934 </dict>
2935 <key>match</key>
2936 <string>(\G|^)([^"\\]|\\(.|\n))*(?="|$)</string>
2937 </dict>
2938 </array>
2939 </dict>
2940 <dict>
2941 <key>begin</key>
2942 <string>(""")</string>
2943 <key>beginCaptures</key>
2944 <dict>
2945 <key>1</key>
2946 <dict>
2947 <key>name</key>
2948 <string>punctuation.definition.string.begin.python</string>
2949 </dict>
2950 </dict>
2951 <key>comment</key>
2952 <string>double quoted string</string>
2953 <key>end</key>
2954 <string>"""</string>
2955 <key>endCaptures</key>
2956 <dict>
2957 <key>0</key>
2958 <dict>
2959 <key>name</key>
2960 <string>punctuation.definition.string.end.python</string>
2961 </dict>
2962 </dict>
2963 <key>name</key>
2964 <string>string.quoted.double.block.python</string>
2965 <key>patterns</key>
2966 <array>
2967 <dict>
2968 <key>begin</key>
2969 <string>(?=(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER))</string>
2970 <key>end</key>
2971 <string>(?=""")</string>
2972 <key>patterns</key>
2973 <array>
2974 <dict>
2975 <key>include</key>
2976 <string>#constant_placeholder</string>
2977 </dict>
2978 <dict>
2979 <key>include</key>
2980 <string>#escaped_unicode_char</string>
2981 </dict>
2982 <dict>
2983 <key>include</key>
2984 <string>#escaped_char</string>
2985 </dict>
2986 <dict>
2987 <key>include</key>
2988 <string>source.sql</string>
2989 </dict>
2990 </array>
2991 </dict>
2992 <dict>
2993 <key>begin</key>
2994 <string>(?=\S)</string>
2995 <key>end</key>
2996 <string>(?=""")</string>
2997 <key>patterns</key>
2998 <array>
2999 <dict>
3000 <key>include</key>
3001 <string>#constant_placeholder</string>
3002 </dict>
3003 <dict>
3004 <key>include</key>
3005 <string>#escaped_unicode_char</string>
3006 </dict>
3007 <dict>
3008 <key>include</key>
3009 <string>#escaped_char</string>
3010 </dict>
3011 </array>
3012 </dict>
3013 </array>
3014 </dict>
3015 <dict>
3016 <key>begin</key>
3017 <string>(")</string>
3018 <key>beginCaptures</key>
3019 <dict>
3020 <key>1</key>
3021 <dict>
3022 <key>name</key>
3023 <string>punctuation.definition.string.begin.python</string>
3024 </dict>
3025 </dict>
3026 <key>comment</key>
3027 <string>double quoted string</string>
3028 <key>end</key>
3029 <string>(")|(\n)</string>
3030 <key>endCaptures</key>
3031 <dict>
3032 <key>1</key>
3033 <dict>
3034 <key>name</key>
3035 <string>punctuation.definition.string.end.python</string>
3036 </dict>
3037 <key>2</key>
3038 <dict>
3039 <key>name</key>
3040 <string>invalid.illegal.unclosed-string.python</string>
3041 </dict>
3042 </dict>
3043 <key>name</key>
3044 <string>string.quoted.double.single-line.python</string>
3045 <key>patterns</key>
3046 <array>
3047 <dict>
3048 <key>include</key>
3049 <string>#constant_placeholder</string>
3050 </dict>
3051 <dict>
3052 <key>include</key>
3053 <string>#escaped_unicode_char</string>
3054 </dict>
3055 <dict>
3056 <key>include</key>
3057 <string>#escaped_char</string>
3058 </dict>
3059 </array>
3060 </dict>
3061 </array>
3062 </dict>
3063 <key>string_quoted_single</key>
3064 <dict>
3065 <key>patterns</key>
3066 <array>
3067 <dict>
3068 <key>begin</key>
3069 <string>([uU]r)(''')</string>
3070 <key>beginCaptures</key>
3071 <dict>
3072 <key>1</key>
3073 <dict>
3074 <key>name</key>
3075 <string>storage.type.string.python</string>
3076 </dict>
3077 <key>2</key>
3078 <dict>
3079 <key>name</key>
3080 <string>punctuation.definition.string.begin.python</string>
3081 </dict>
3082 </dict>
3083 <key>comment</key>
3084 <string>single quoted unicode-raw string</string>
3085 <key>end</key>
3086 <string>'''</string>
3087 <key>endCaptures</key>
3088 <dict>
3089 <key>0</key>
3090 <dict>
3091 <key>name</key>
3092 <string>punctuation.definition.string.end.python</string>
3093 </dict>
3094 </dict>
3095 <key>name</key>
3096 <string>string.quoted.single.block.unicode-raw-regex.python</string>
3097 <key>patterns</key>
3098 <array>
3099 <dict>
3100 <key>include</key>
3101 <string>#constant_placeholder</string>
3102 </dict>
3103 <dict>
3104 <key>include</key>
3105 <string>#escaped_char_raw_single</string>
3106 </dict>
3107 <dict>
3108 <key>include</key>
3109 <string>#regular_expressions</string>
3110 </dict>
3111 </array>
3112 </dict>
3113 <dict>
3114 <key>begin</key>
3115 <string>([uU]R)(''')</string>
3116 <key>beginCaptures</key>
3117 <dict>
3118 <key>1</key>
3119 <dict>
3120 <key>name</key>
3121 <string>storage.type.string.python</string>
3122 </dict>
3123 <key>2</key>
3124 <dict>
3125 <key>name</key>
3126 <string>punctuation.definition.string.begin.python</string>
3127 </dict>
3128 </dict>
3129 <key>comment</key>
3130 <string>single quoted unicode-raw string</string>
3131 <key>end</key>
3132 <string>'''</string>
3133 <key>endCaptures</key>
3134 <dict>
3135 <key>0</key>
3136 <dict>
3137 <key>name</key>
3138 <string>punctuation.definition.string.end.python</string>
3139 </dict>
3140 </dict>
3141 <key>name</key>
3142 <string>string.quoted.single.block.unicode-raw.python</string>
3143 <key>patterns</key>
3144 <array>
3145 <dict>
3146 <key>include</key>
3147 <string>#constant_placeholder</string>
3148 </dict>
3149 <dict>
3150 <key>include</key>
3151 <string>#escaped_char_raw_single</string>
3152 </dict>
3153 </array>
3154 </dict>
3155 <dict>
3156 <key>begin</key>
3157 <string>([bB]r)(''')</string>
3158 <key>beginCaptures</key>
3159 <dict>
3160 <key>1</key>
3161 <dict>
3162 <key>name</key>
3163 <string>storage.type.string.python</string>
3164 </dict>
3165 <key>2</key>
3166 <dict>
3167 <key>name</key>
3168 <string>punctuation.definition.string.begin.python</string>
3169 </dict>
3170 </dict>
3171 <key>comment</key>
3172 <string>single quoted bytes-raw string</string>
3173 <key>end</key>
3174 <string>'''</string>
3175 <key>endCaptures</key>
3176 <dict>
3177 <key>0</key>
3178 <dict>
3179 <key>name</key>
3180 <string>punctuation.definition.string.end.python</string>
3181 </dict>
3182 </dict>
3183 <key>name</key>
3184 <string>string.quoted.single.block.bytes-raw-regex.python</string>
3185 <key>patterns</key>
3186 <array>
3187 <dict>
3188 <key>include</key>
3189 <string>#constant_placeholder</string>
3190 </dict>
3191 <dict>
3192 <key>include</key>
3193 <string>#escaped_char_raw_single</string>
3194 </dict>
3195 <dict>
3196 <key>include</key>
3197 <string>#regular_expressions</string>
3198 </dict>
3199 </array>
3200 </dict>
3201 <dict>
3202 <key>begin</key>
3203 <string>([bB]R)(''')</string>
3204 <key>beginCaptures</key>
3205 <dict>
3206 <key>1</key>
3207 <dict>
3208 <key>name</key>
3209 <string>storage.type.string.python</string>
3210 </dict>
3211 <key>2</key>
3212 <dict>
3213 <key>name</key>
3214 <string>punctuation.definition.string.begin.python</string>
3215 </dict>
3216 </dict>
3217 <key>comment</key>
3218 <string>single quoted bytes-raw string</string>
3219 <key>end</key>
3220 <string>'''</string>
3221 <key>endCaptures</key>
3222 <dict>
3223 <key>0</key>
3224 <dict>
3225 <key>name</key>
3226 <string>punctuation.definition.string.end.python</string>
3227 </dict>
3228 </dict>
3229 <key>name</key>
3230 <string>string.quoted.single.block.bytes-raw.python</string>
3231 <key>patterns</key>
3232 <array>
3233 <dict>
3234 <key>include</key>
3235 <string>#constant_placeholder</string>
3236 </dict>
3237 <dict>
3238 <key>include</key>
3239 <string>#escaped_char_raw_single</string>
3240 </dict>
3241 </array>
3242 </dict>
3243 <dict>
3244 <key>begin</key>
3245 <string>(r)(''')</string>
3246 <key>beginCaptures</key>
3247 <dict>
3248 <key>1</key>
3249 <dict>
3250 <key>name</key>
3251 <string>storage.type.string.python</string>
3252 </dict>
3253 <key>2</key>
3254 <dict>
3255 <key>name</key>
3256 <string>punctuation.definition.string.begin.python</string>
3257 </dict>
3258 </dict>
3259 <key>comment</key>
3260 <string>single quoted raw string</string>
3261 <key>end</key>
3262 <string>'''</string>
3263 <key>endCaptures</key>
3264 <dict>
3265 <key>0</key>
3266 <dict>
3267 <key>name</key>
3268 <string>punctuation.definition.string.end.python</string>
3269 </dict>
3270 </dict>
3271 <key>name</key>
3272 <string>string.quoted.single.block.raw-regex.python</string>
3273 <key>patterns</key>
3274 <array>
3275 <dict>
3276 <key>include</key>
3277 <string>#constant_placeholder</string>
3278 </dict>
3279 <dict>
3280 <key>include</key>
3281 <string>#escaped_char_raw_single</string>
3282 </dict>
3283 <dict>
3284 <key>include</key>
3285 <string>#regular_expressions</string>
3286 </dict>
3287 </array>
3288 </dict>
3289 <dict>
3290 <key>begin</key>
3291 <string>(R)(''')</string>
3292 <key>beginCaptures</key>
3293 <dict>
3294 <key>1</key>
3295 <dict>
3296 <key>name</key>
3297 <string>storage.type.string.python</string>
3298 </dict>
3299 <key>2</key>
3300 <dict>
3301 <key>name</key>
3302 <string>punctuation.definition.string.begin.python</string>
3303 </dict>
3304 </dict>
3305 <key>comment</key>
3306 <string>single quoted raw string</string>
3307 <key>end</key>
3308 <string>'''</string>
3309 <key>endCaptures</key>
3310 <dict>
3311 <key>0</key>
3312 <dict>
3313 <key>name</key>
3314 <string>punctuation.definition.string.end.python</string>
3315 </dict>
3316 </dict>
3317 <key>name</key>
3318 <string>string.quoted.single.block.raw.python</string>
3319 <key>patterns</key>
3320 <array>
3321 <dict>
3322 <key>include</key>
3323 <string>#constant_placeholder</string>
3324 </dict>
3325 <dict>
3326 <key>include</key>
3327 <string>#escaped_char_raw_single</string>
3328 </dict>
3329 </array>
3330 </dict>
3331 <dict>
3332 <key>begin</key>
3333 <string>([uU])(''')</string>
3334 <key>beginCaptures</key>
3335 <dict>
3336 <key>1</key>
3337 <dict>
3338 <key>name</key>
3339 <string>storage.type.string.python</string>
3340 </dict>
3341 <key>2</key>
3342 <dict>
3343 <key>name</key>
3344 <string>punctuation.definition.string.begin.python</string>
3345 </dict>
3346 </dict>
3347 <key>comment</key>
3348 <string>single quoted unicode string</string>
3349 <key>end</key>
3350 <string>'''</string>
3351 <key>endCaptures</key>
3352 <dict>
3353 <key>0</key>
3354 <dict>
3355 <key>name</key>
3356 <string>punctuation.definition.string.end.python</string>
3357 </dict>
3358 </dict>
3359 <key>name</key>
3360 <string>string.quoted.single.block.unicode.python</string>
3361 <key>patterns</key>
3362 <array>
3363 <dict>
3364 <key>include</key>
3365 <string>#constant_placeholder</string>
3366 </dict>
3367 <dict>
3368 <key>include</key>
3369 <string>#escaped_unicode_char</string>
3370 </dict>
3371 <dict>
3372 <key>include</key>
3373 <string>#escaped_char</string>
3374 </dict>
3375 </array>
3376 </dict>
3377 <dict>
3378 <key>begin</key>
3379 <string>([bB])(''')</string>
3380 <key>beginCaptures</key>
3381 <dict>
3382 <key>1</key>
3383 <dict>
3384 <key>name</key>
3385 <string>storage.type.string.python</string>
3386 </dict>
3387 <key>2</key>
3388 <dict>
3389 <key>name</key>
3390 <string>punctuation.definition.string.begin.python</string>
3391 </dict>
3392 </dict>
3393 <key>comment</key>
3394 <string>single quoted bytes string</string>
3395 <key>end</key>
3396 <string>'''</string>
3397 <key>endCaptures</key>
3398 <dict>
3399 <key>0</key>
3400 <dict>
3401 <key>name</key>
3402 <string>punctuation.definition.string.end.python</string>
3403 </dict>
3404 </dict>
3405 <key>name</key>
3406 <string>string.quoted.single.block.bytes.python</string>
3407 <key>patterns</key>
3408 <array>
3409 <dict>
3410 <key>include</key>
3411 <string>#constant_placeholder</string>
3412 </dict>
3413 <dict>
3414 <key>include</key>
3415 <string>#escaped_unicode_char</string>
3416 </dict>
3417 <dict>
3418 <key>include</key>
3419 <string>#escaped_char</string>
3420 </dict>
3421 </array>
3422 </dict>
3423 <dict>
3424 <key>captures</key>
3425 <dict>
3426 <key>1</key>
3427 <dict>
3428 <key>name</key>
3429 <string>storage.type.string.python</string>
3430 </dict>
3431 <key>2</key>
3432 <dict>
3433 <key>name</key>
3434 <string>punctuation.definition.string.begin.python</string>
3435 </dict>
3436 <key>3</key>
3437 <dict>
3438 <key>patterns</key>
3439 <array>
3440 <dict>
3441 <key>include</key>
3442 <string>#constant_placeholder</string>
3443 </dict>
3444 <dict>
3445 <key>include</key>
3446 <string>#escaped_char_raw_single</string>
3447 </dict>
3448 <dict>
3449 <key>include</key>
3450 <string>#regular_expressions</string>
3451 </dict>
3452 </array>
3453 </dict>
3454 <key>4</key>
3455 <dict>
3456 <key>name</key>
3457 <string>punctuation.definition.string.end.python</string>
3458 </dict>
3459 </dict>
3460 <key>comment</key>
3461 <string>single quoted raw string</string>
3462 <key>match</key>
3463 <string>([uU]r)(')((?:[^'\\]|\\.)*)(')</string>
3464 <key>name</key>
3465 <string>string.quoted.single.single-line.unicode-raw-regex.python</string>
3466 </dict>
3467 <dict>
3468 <key>begin</key>
3469 <string>([uU]R)(')</string>
3470 <key>beginCaptures</key>
3471 <dict>
3472 <key>1</key>
3473 <dict>
3474 <key>name</key>
3475 <string>storage.type.string.python</string>
3476 </dict>
3477 <key>2</key>
3478 <dict>
3479 <key>name</key>
3480 <string>punctuation.definition.string.begin.python</string>
3481 </dict>
3482 </dict>
3483 <key>comment</key>
3484 <string>single quoted unicode-raw string</string>
3485 <key>end</key>
3486 <string>(')|(\n)</string>
3487 <key>endCaptures</key>
3488 <dict>
3489 <key>1</key>
3490 <dict>
3491 <key>name</key>
3492 <string>punctuation.definition.string.end.python</string>
3493 </dict>
3494 <key>2</key>
3495 <dict>
3496 <key>name</key>
3497 <string>invalid.illegal.unclosed-string.python</string>
3498 </dict>
3499 </dict>
3500 <key>name</key>
3501 <string>string.quoted.single.single-line.unicode-raw.python</string>
3502 <key>patterns</key>
3503 <array>
3504 <dict>
3505 <key>include</key>
3506 <string>#constant_placeholder</string>
3507 </dict>
3508 <dict>
3509 <key>include</key>
3510 <string>#escaped_char_raw_single</string>
3511 </dict>
3512 </array>
3513 </dict>
3514 <dict>
3515 <key>begin</key>
3516 <string>([bB]r)(')</string>
3517 <key>beginCaptures</key>
3518 <dict>
3519 <key>1</key>
3520 <dict>
3521 <key>name</key>
3522 <string>storage.type.string.python</string>
3523 </dict>
3524 <key>2</key>
3525 <dict>
3526 <key>name</key>
3527 <string>punctuation.definition.string.begin.python</string>
3528 </dict>
3529 </dict>
3530 <key>comment</key>
3531 <string>single quoted bytes-raw string</string>
3532 <key>end</key>
3533 <string>(')|(\n)</string>
3534 <key>endCaptures</key>
3535 <dict>
3536 <key>1</key>
3537 <dict>
3538 <key>name</key>
3539 <string>punctuation.definition.string.end.python</string>
3540 </dict>
3541 <key>2</key>
3542 <dict>
3543 <key>name</key>
3544 <string>invalid.illegal.unclosed-string.python</string>
3545 </dict>
3546 </dict>
3547 <key>name</key>
3548 <string>string.quoted.single.single-line.bytes-raw-regex.python</string>
3549 <key>patterns</key>
3550 <array>
3551 <dict>
3552 <key>include</key>
3553 <string>#constant_placeholder</string>
3554 </dict>
3555 <dict>
3556 <key>include</key>
3557 <string>#escaped_char_raw_single</string>
3558 </dict>
3559 <dict>
3560 <key>include</key>
3561 <string>#regular_expressions</string>
3562 </dict>
3563 </array>
3564 </dict>
3565 <dict>
3566 <key>begin</key>
3567 <string>([bB]R)(')</string>
3568 <key>beginCaptures</key>
3569 <dict>
3570 <key>1</key>
3571 <dict>
3572 <key>name</key>
3573 <string>storage.type.string.python</string>
3574 </dict>
3575 <key>2</key>
3576 <dict>
3577 <key>name</key>
3578 <string>punctuation.definition.string.begin.python</string>
3579 </dict>
3580 </dict>
3581 <key>comment</key>
3582 <string>single quoted bytes-raw string</string>
3583 <key>end</key>
3584 <string>(')|(\n)</string>
3585 <key>endCaptures</key>
3586 <dict>
3587 <key>1</key>
3588 <dict>
3589 <key>name</key>
3590 <string>punctuation.definition.string.end.python</string>
3591 </dict>
3592 <key>2</key>
3593 <dict>
3594 <key>name</key>
3595 <string>invalid.illegal.unclosed-string.python</string>
3596 </dict>
3597 </dict>
3598 <key>name</key>
3599 <string>string.quoted.single.single-line.bytes-raw.python</string>
3600 <key>patterns</key>
3601 <array>
3602 <dict>
3603 <key>include</key>
3604 <string>#constant_placeholder</string>
3605 </dict>
3606 <dict>
3607 <key>include</key>
3608 <string>#escaped_char_raw_single</string>
3609 </dict>
3610 </array>
3611 </dict>
3612 <dict>
3613 <key>captures</key>
3614 <dict>
3615 <key>1</key>
3616 <dict>
3617 <key>name</key>
3618 <string>storage.type.string.python</string>
3619 </dict>
3620 <key>2</key>
3621 <dict>
3622 <key>name</key>
3623 <string>punctuation.definition.string.begin.python</string>
3624 </dict>
3625 <key>3</key>
3626 <dict>
3627 <key>patterns</key>
3628 <array>
3629 <dict>
3630 <key>include</key>
3631 <string>#constant_placeholder</string>
3632 </dict>
3633 <dict>
3634 <key>include</key>
3635 <string>#escaped_char_raw_single</string>
3636 </dict>
3637 <dict>
3638 <key>include</key>
3639 <string>#regular_expressions</string>
3640 </dict>
3641 </array>
3642 </dict>
3643 <key>4</key>
3644 <dict>
3645 <key>name</key>
3646 <string>punctuation.definition.string.end.python</string>
3647 </dict>
3648 </dict>
3649 <key>match</key>
3650 <string>(r)(')((?:[^'\\]|\\.)*)(')</string>
3651 <key>name</key>
3652 <string>string.quoted.single.single-line.raw-regex.python</string>
3653 </dict>
3654 <dict>
3655 <key>begin</key>
3656 <string>(R)(')</string>
3657 <key>beginCaptures</key>
3658 <dict>
3659 <key>1</key>
3660 <dict>
3661 <key>name</key>
3662 <string>storage.type.string.python</string>
3663 </dict>
3664 <key>2</key>
3665 <dict>
3666 <key>name</key>
3667 <string>punctuation.definition.string.begin.python</string>
3668 </dict>
3669 </dict>
3670 <key>comment</key>
3671 <string>single quoted raw string</string>
3672 <key>end</key>
3673 <string>(')|(\n)</string>
3674 <key>endCaptures</key>
3675 <dict>
3676 <key>1</key>
3677 <dict>
3678 <key>name</key>
3679 <string>punctuation.definition.string.end.python</string>
3680 </dict>
3681 <key>2</key>
3682 <dict>
3683 <key>name</key>
3684 <string>invalid.illegal.unclosed-string.python</string>
3685 </dict>
3686 </dict>
3687 <key>name</key>
3688 <string>string.quoted.single.single-line.raw.python</string>
3689 <key>patterns</key>
3690 <array>
3691 <dict>
3692 <key>include</key>
3693 <string>#constant_placeholder</string>
3694 </dict>
3695 <dict>
3696 <key>include</key>
3697 <string>#escaped_char_raw_single</string>
3698 </dict>
3699 </array>
3700 </dict>
3701 <dict>
3702 <key>begin</key>
3703 <string>([uU])(')</string>
3704 <key>beginCaptures</key>
3705 <dict>
3706 <key>1</key>
3707 <dict>
3708 <key>name</key>
3709 <string>storage.type.string.python</string>
3710 </dict>
3711 <key>2</key>
3712 <dict>
3713 <key>name</key>
3714 <string>punctuation.definition.string.begin.python</string>
3715 </dict>
3716 </dict>
3717 <key>comment</key>
3718 <string>single quoted unicode string</string>
3719 <key>end</key>
3720 <string>(')|(\n)</string>
3721 <key>endCaptures</key>
3722 <dict>
3723 <key>1</key>
3724 <dict>
3725 <key>name</key>
3726 <string>punctuation.definition.string.end.python</string>
3727 </dict>
3728 <key>2</key>
3729 <dict>
3730 <key>name</key>
3731 <string>invalid.illegal.unclosed-string.python</string>
3732 </dict>
3733 </dict>
3734 <key>name</key>
3735 <string>string.quoted.single.single-line.unicode.python</string>
3736 <key>patterns</key>
3737 <array>
3738 <dict>
3739 <key>include</key>
3740 <string>#constant_placeholder</string>
3741 </dict>
3742 <dict>
3743 <key>include</key>
3744 <string>#escaped_unicode_char</string>
3745 </dict>
3746 <dict>
3747 <key>include</key>
3748 <string>#escaped_char</string>
3749 </dict>
3750 </array>
3751 </dict>
3752 <dict>
3753 <key>begin</key>
3754 <string>([bB])(')</string>
3755 <key>beginCaptures</key>
3756 <dict>
3757 <key>1</key>
3758 <dict>
3759 <key>name</key>
3760 <string>storage.type.string.python</string>
3761 </dict>
3762 <key>2</key>
3763 <dict>
3764 <key>name</key>
3765 <string>punctuation.definition.string.begin.python</string>
3766 </dict>
3767 </dict>
3768 <key>comment</key>
3769 <string>single quoted bytes string</string>
3770 <key>end</key>
3771 <string>(')|(\n)</string>
3772 <key>endCaptures</key>
3773 <dict>
3774 <key>1</key>
3775 <dict>
3776 <key>name</key>
3777 <string>punctuation.definition.string.end.python</string>
3778 </dict>
3779 <key>2</key>
3780 <dict>
3781 <key>name</key>
3782 <string>invalid.illegal.unclosed-string.python</string>
3783 </dict>
3784 </dict>
3785 <key>name</key>
3786 <string>string.quoted.single.single-line.bytes.python</string>
3787 <key>patterns</key>
3788 <array>
3789 <dict>
3790 <key>include</key>
3791 <string>#constant_placeholder</string>
3792 </dict>
3793 <dict>
3794 <key>include</key>
3795 <string>#escaped_unicode_char</string>
3796 </dict>
3797 <dict>
3798 <key>include</key>
3799 <string>#escaped_char</string>
3800 </dict>
3801 </array>
3802 </dict>
3803 <dict>
3804 <key>begin</key>
3805 <string>(')(?=\s*(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER))</string>
3806 <key>beginCaptures</key>
3807 <dict>
3808 <key>1</key>
3809 <dict>
3810 <key>name</key>
3811 <string>punctuation.definition.string.begin.python</string>
3812 </dict>
3813 </dict>
3814 <key>comment</key>
3815 <string>single quoted string</string>
3816 <key>end</key>
3817 <string>(')|(\n)</string>
3818 <key>endCaptures</key>
3819 <dict>
3820 <key>1</key>
3821 <dict>
3822 <key>name</key>
3823 <string>punctuation.definition.string.end.python</string>
3824 </dict>
3825 <key>2</key>
3826 <dict>
3827 <key>name</key>
3828 <string>invalid.illegal.unclosed-string.python</string>
3829 </dict>
3830 </dict>
3831 <key>name</key>
3832 <string>string.quoted.single.single-line.python</string>
3833 <key>patterns</key>
3834 <array>
3835 <dict>
3836 <key>captures</key>
3837 <dict>
3838 <key>0</key>
3839 <dict>
3840 <key>patterns</key>
3841 <array>
3842 <dict>
3843 <key>include</key>
3844 <string>#constant_placeholder</string>
3845 </dict>
3846 <dict>
3847 <key>include</key>
3848 <string>#escaped_unicode_char</string>
3849 </dict>
3850 <dict>
3851 <key>include</key>
3852 <string>#escaped_char</string>
3853 </dict>
3854 <dict>
3855 <key>include</key>
3856 <string>source.sql</string>
3857 </dict>
3858 </array>
3859 </dict>
3860 </dict>
3861 <key>match</key>
3862 <string>(\G|^)([^'\\]|\\(.|\n))*(?='|$)</string>
3863 </dict>
3864 </array>
3865 </dict>
3866 <dict>
3867 <key>begin</key>
3868 <string>(''')</string>
3869 <key>beginCaptures</key>
3870 <dict>
3871 <key>1</key>
3872 <dict>
3873 <key>name</key>
3874 <string>punctuation.definition.string.begin.python</string>
3875 </dict>
3876 </dict>
3877 <key>comment</key>
3878 <string>single quoted string</string>
3879 <key>end</key>
3880 <string>'''</string>
3881 <key>endCaptures</key>
3882 <dict>
3883 <key>0</key>
3884 <dict>
3885 <key>name</key>
3886 <string>punctuation.definition.string.end.python</string>
3887 </dict>
3888 </dict>
3889 <key>name</key>
3890 <string>string.quoted.single.block.python</string>
3891 <key>patterns</key>
3892 <array>
3893 <dict>
3894 <key>begin</key>
3895 <string>(?=(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER))</string>
3896 <key>end</key>
3897 <string>(?=''')</string>
3898 <key>patterns</key>
3899 <array>
3900 <dict>
3901 <key>include</key>
3902 <string>#constant_placeholder</string>
3903 </dict>
3904 <dict>
3905 <key>include</key>
3906 <string>#escaped_unicode_char</string>
3907 </dict>
3908 <dict>
3909 <key>include</key>
3910 <string>#escaped_char</string>
3911 </dict>
3912 <dict>
3913 <key>include</key>
3914 <string>source.sql</string>
3915 </dict>
3916 </array>
3917 </dict>
3918 <dict>
3919 <key>begin</key>
3920 <string>(?=\S)</string>
3921 <key>end</key>
3922 <string>(?=''')</string>
3923 <key>patterns</key>
3924 <array>
3925 <dict>
3926 <key>include</key>
3927 <string>#constant_placeholder</string>
3928 </dict>
3929 <dict>
3930 <key>include</key>
3931 <string>#escaped_unicode_char</string>
3932 </dict>
3933 <dict>
3934 <key>include</key>
3935 <string>#escaped_char</string>
3936 </dict>
3937 </array>
3938 </dict>
3939 </array>
3940 </dict>
3941 <dict>
3942 <key>begin</key>
3943 <string>(')</string>
3944 <key>beginCaptures</key>
3945 <dict>
3946 <key>1</key>
3947 <dict>
3948 <key>name</key>
3949 <string>punctuation.definition.string.begin.python</string>
3950 </dict>
3951 </dict>
3952 <key>comment</key>
3953 <string>single quoted string</string>
3954 <key>end</key>
3955 <string>(')|(\n)</string>
3956 <key>endCaptures</key>
3957 <dict>
3958 <key>1</key>
3959 <dict>
3960 <key>name</key>
3961 <string>punctuation.definition.string.end.python</string>
3962 </dict>
3963 <key>2</key>
3964 <dict>
3965 <key>name</key>
3966 <string>invalid.illegal.unclosed-string.python</string>
3967 </dict>
3968 </dict>
3969 <key>name</key>
3970 <string>string.quoted.single.single-line.python</string>
3971 <key>patterns</key>
3972 <array>
3973 <dict>
3974 <key>include</key>
3975 <string>#constant_placeholder</string>
3976 </dict>
3977 <dict>
3978 <key>include</key>
3979 <string>#escaped_unicode_char</string>
3980 </dict>
3981 <dict>
3982 <key>include</key>
3983 <string>#escaped_char</string>
3984 </dict>
3985 </array>
3986 </dict>
3987 </array>
3988 </dict>
3989 <key>strings</key>
3990 <dict>
3991 <key>patterns</key>
3992 <array>
3993 <dict>
3994 <key>include</key>
3995 <string>#string_quoted_double</string>
3996 </dict>
3997 <dict>
3998 <key>include</key>
3999 <string>#string_quoted_single</string>
4000 </dict>
4001 </array>
4002 </dict>
4003 </dict>
4004 <key>scopeName</key>
4005 <string>source.python</string>
4006 <key>uuid</key>
4007 <string>F23DB5B2-7D08-11D9-A709-000D93B6E43C</string>
4008</dict>
4009</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/shell.plist created+1889
......@@ -0,0 +1,1889 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>fileTypes</key>
6 <array>
7 <string>sh</string>
8 <string>bash</string>
9 <string>zsh</string>
10 <string>bashrc</string>
11 <string>bash_profile</string>
12 <string>bash_login</string>
13 <string>profile</string>
14 <string>bash_logout</string>
15 <string>.textmate_init</string>
16 </array>
17 <key>firstLineMatch</key>
18 <string>^#!.*\b(bash|zsh|sh|tcsh)|^#.*-\*-.*\bshell-script\b.*-\*-</string>
19 <key>keyEquivalent</key>
20 <string>^~S</string>
21 <key>name</key>
22 <string>Shell Script (Bash)</string>
23 <key>patterns</key>
24 <array>
25 <dict>
26 <key>include</key>
27 <string>#comment</string>
28 </dict>
29 <dict>
30 <key>include</key>
31 <string>#pipeline</string>
32 </dict>
33 <dict>
34 <key>include</key>
35 <string>#list</string>
36 </dict>
37 <dict>
38 <key>include</key>
39 <string>#compound-command</string>
40 </dict>
41 <dict>
42 <key>include</key>
43 <string>#loop</string>
44 </dict>
45 <dict>
46 <key>include</key>
47 <string>#string</string>
48 </dict>
49 <dict>
50 <key>include</key>
51 <string>#function-definition</string>
52 </dict>
53 <dict>
54 <key>include</key>
55 <string>#variable</string>
56 </dict>
57 <dict>
58 <key>include</key>
59 <string>#interpolation</string>
60 </dict>
61 <dict>
62 <key>include</key>
63 <string>#heredoc</string>
64 </dict>
65 <dict>
66 <key>include</key>
67 <string>#herestring</string>
68 </dict>
69 <dict>
70 <key>include</key>
71 <string>#redirection</string>
72 </dict>
73 <dict>
74 <key>include</key>
75 <string>#pathname</string>
76 </dict>
77 <dict>
78 <key>include</key>
79 <string>#keyword</string>
80 </dict>
81 <dict>
82 <key>include</key>
83 <string>#support</string>
84 </dict>
85 <dict>
86 <key>include</key>
87 <string>#lines</string>
88 </dict>
89 </array>
90 <key>repository</key>
91 <dict>
92 <key>case-clause</key>
93 <dict>
94 <key>patterns</key>
95 <array>
96 <dict>
97 <key>begin</key>
98 <string>(?=\S)</string>
99 <key>end</key>
100 <string>;;</string>
101 <key>endCaptures</key>
102 <dict>
103 <key>0</key>
104 <dict>
105 <key>name</key>
106 <string>punctuation.terminator.case-clause.shell</string>
107 </dict>
108 </dict>
109 <key>name</key>
110 <string>meta.scope.case-clause.shell</string>
111 <key>patterns</key>
112 <array>
113 <dict>
114 <key>begin</key>
115 <string>(\(|(?=\S))</string>
116 <key>captures</key>
117 <dict>
118 <key>0</key>
119 <dict>
120 <key>name</key>
121 <string>punctuation.definition.case-pattern.shell</string>
122 </dict>
123 </dict>
124 <key>end</key>
125 <string>\)</string>
126 <key>name</key>
127 <string>meta.scope.case-pattern.shell</string>
128 <key>patterns</key>
129 <array>
130 <dict>
131 <key>match</key>
132 <string>\|</string>
133 <key>name</key>
134 <string>punctuation.separator.pipe-sign.shell</string>
135 </dict>
136 <dict>
137 <key>include</key>
138 <string>#string</string>
139 </dict>
140 <dict>
141 <key>include</key>
142 <string>#variable</string>
143 </dict>
144 <dict>
145 <key>include</key>
146 <string>#interpolation</string>
147 </dict>
148 <dict>
149 <key>include</key>
150 <string>#pathname</string>
151 </dict>
152 </array>
153 </dict>
154 <dict>
155 <key>begin</key>
156 <string>(?&lt;=\))</string>
157 <key>end</key>
158 <string>(?=;;)</string>
159 <key>name</key>
160 <string>meta.scope.case-clause-body.shell</string>
161 <key>patterns</key>
162 <array>
163 <dict>
164 <key>include</key>
165 <string>$self</string>
166 </dict>
167 </array>
168 </dict>
169 </array>
170 </dict>
171 </array>
172 </dict>
173 <key>comment</key>
174 <dict>
175 <key>begin</key>
176 <string>(^[ \t]+)?(?&lt;!\S)(?=#)(?!#\{)</string>
177 <key>beginCaptures</key>
178 <dict>
179 <key>1</key>
180 <dict>
181 <key>name</key>
182 <string>punctuation.whitespace.comment.leading.shell</string>
183 </dict>
184 </dict>
185 <key>end</key>
186 <string>(?!\G)</string>
187 <key>patterns</key>
188 <array>
189 <dict>
190 <key>begin</key>
191 <string>^(#!)</string>
192 <key>beginCaptures</key>
193 <dict>
194 <key>1</key>
195 <dict>
196 <key>name</key>
197 <string>punctuation.definition.comment.line.shebang.shell</string>
198 </dict>
199 </dict>
200 <key>end</key>
201 <string>\n</string>
202 <key>name</key>
203 <string>comment.line.shebang.shell</string>
204 </dict>
205 <dict>
206 <key>begin</key>
207 <string>#</string>
208 <key>beginCaptures</key>
209 <dict>
210 <key>0</key>
211 <dict>
212 <key>name</key>
213 <string>punctuation.definition.comment.shell</string>
214 </dict>
215 </dict>
216 <key>end</key>
217 <string>\n</string>
218 <key>name</key>
219 <string>comment.line.number-sign.shell</string>
220 </dict>
221 </array>
222 </dict>
223 <key>compound-command</key>
224 <dict>
225 <key>patterns</key>
226 <array>
227 <dict>
228 <key>begin</key>
229 <string>(\[{2})</string>
230 <key>captures</key>
231 <dict>
232 <key>1</key>
233 <dict>
234 <key>name</key>
235 <string>punctuation.definition.logical-expression.shell</string>
236 </dict>
237 </dict>
238 <key>end</key>
239 <string>(\]{2})</string>
240 <key>name</key>
241 <string>meta.scope.logical-expression.shell</string>
242 <key>patterns</key>
243 <array>
244 <dict>
245 <key>include</key>
246 <string>#logical-expression</string>
247 </dict>
248 <dict>
249 <key>include</key>
250 <string>$self</string>
251 </dict>
252 </array>
253 </dict>
254 <dict>
255 <key>begin</key>
256 <string>(\({2})</string>
257 <key>beginCaptures</key>
258 <dict>
259 <key>0</key>
260 <dict>
261 <key>name</key>
262 <string>punctuation.definition.string.begin.shell</string>
263 </dict>
264 </dict>
265 <key>end</key>
266 <string>(\){2})</string>
267 <key>endCaptures</key>
268 <dict>
269 <key>0</key>
270 <dict>
271 <key>name</key>
272 <string>punctuation.definition.string.end.shell</string>
273 </dict>
274 </dict>
275 <key>name</key>
276 <string>string.other.math.shell</string>
277 <key>patterns</key>
278 <array>
279 <dict>
280 <key>include</key>
281 <string>#math</string>
282 </dict>
283 </array>
284 </dict>
285 <dict>
286 <key>begin</key>
287 <string>(\()</string>
288 <key>captures</key>
289 <dict>
290 <key>1</key>
291 <dict>
292 <key>name</key>
293 <string>punctuation.definition.subshell.shell</string>
294 </dict>
295 </dict>
296 <key>end</key>
297 <string>(\))</string>
298 <key>name</key>
299 <string>meta.scope.subshell.shell</string>
300 <key>patterns</key>
301 <array>
302 <dict>
303 <key>include</key>
304 <string>$self</string>
305 </dict>
306 </array>
307 </dict>
308 <dict>
309 <key>begin</key>
310 <string>(?&lt;=\s|^)(\{)(?=\s|$)</string>
311 <key>captures</key>
312 <dict>
313 <key>1</key>
314 <dict>
315 <key>name</key>
316 <string>punctuation.definition.group.shell</string>
317 </dict>
318 </dict>
319 <key>end</key>
320 <string>(?&lt;=^|;)\s*(\})</string>
321 <key>name</key>
322 <string>meta.scope.group.shell</string>
323 <key>patterns</key>
324 <array>
325 <dict>
326 <key>include</key>
327 <string>$self</string>
328 </dict>
329 </array>
330 </dict>
331 </array>
332 </dict>
333 <key>function-definition</key>
334 <dict>
335 <key>patterns</key>
336 <array>
337 <dict>
338 <key>begin</key>
339 <string>(?&lt;=^|;|&amp;)\s*(function)\s+([^\s&lt;&gt;;'"\\|$&amp;()]+)(?:\s*(\(\)))?</string>
340 <key>beginCaptures</key>
341 <dict>
342 <key>1</key>
343 <dict>
344 <key>name</key>
345 <string>storage.type.function.shell</string>
346 </dict>
347 <key>2</key>
348 <dict>
349 <key>name</key>
350 <string>entity.name.function.shell</string>
351 </dict>
352 <key>3</key>
353 <dict>
354 <key>name</key>
355 <string>punctuation.definition.arguments.shell</string>
356 </dict>
357 </dict>
358 <key>end</key>
359 <string>;|&amp;|\n</string>
360 <key>endCaptures</key>
361 <dict>
362 <key>0</key>
363 <dict>
364 <key>name</key>
365 <string>punctuation.definition.function.shell</string>
366 </dict>
367 </dict>
368 <key>name</key>
369 <string>meta.function.shell</string>
370 <key>patterns</key>
371 <array>
372 <dict>
373 <key>include</key>
374 <string>$self</string>
375 </dict>
376 </array>
377 </dict>
378 <dict>
379 <key>begin</key>
380 <string>(?&lt;=^|;|&amp;)\s*([^\s&lt;&gt;;'"\\|$&amp;()]+)\s*(\(\))</string>
381 <key>beginCaptures</key>
382 <dict>
383 <key>1</key>
384 <dict>
385 <key>name</key>
386 <string>entity.name.function.shell</string>
387 </dict>
388 <key>2</key>
389 <dict>
390 <key>name</key>
391 <string>punctuation.definition.arguments.shell</string>
392 </dict>
393 </dict>
394 <key>end</key>
395 <string>;|&amp;|\n</string>
396 <key>endCaptures</key>
397 <dict>
398 <key>0</key>
399 <dict>
400 <key>name</key>
401 <string>punctuation.definition.function.shell</string>
402 </dict>
403 </dict>
404 <key>name</key>
405 <string>meta.function.shell</string>
406 <key>patterns</key>
407 <array>
408 <dict>
409 <key>include</key>
410 <string>$self</string>
411 </dict>
412 </array>
413 </dict>
414 </array>
415 </dict>
416 <key>heredoc</key>
417 <dict>
418 <key>patterns</key>
419 <array>
420 <dict>
421 <key>begin</key>
422 <string>(&lt;&lt;)-\s*("|'|)(RUBY)\2</string>
423 <key>beginCaptures</key>
424 <dict>
425 <key>1</key>
426 <dict>
427 <key>name</key>
428 <string>keyword.operator.heredoc.shell</string>
429 </dict>
430 <key>3</key>
431 <dict>
432 <key>name</key>
433 <string>keyword.control.heredoc-token.shell</string>
434 </dict>
435 </dict>
436 <key>captures</key>
437 <dict>
438 <key>0</key>
439 <dict>
440 <key>name</key>
441 <string>punctuation.definition.string.shell</string>
442 </dict>
443 </dict>
444 <key>contentName</key>
445 <string>source.ruby.embedded.shell</string>
446 <key>end</key>
447 <string>^\t*(RUBY)(?=\s|;|&amp;|$)</string>
448 <key>endCaptures</key>
449 <dict>
450 <key>1</key>
451 <dict>
452 <key>name</key>
453 <string>keyword.control.heredoc-token.shell</string>
454 </dict>
455 </dict>
456 <key>name</key>
457 <string>string.unquoted.heredoc.no-indent.ruby.shell</string>
458 <key>patterns</key>
459 <array>
460 <dict>
461 <key>include</key>
462 <string>source.ruby</string>
463 </dict>
464 </array>
465 </dict>
466 <dict>
467 <key>begin</key>
468 <string>(&lt;&lt;)\s*("|'|)(RUBY)\2</string>
469 <key>beginCaptures</key>
470 <dict>
471 <key>1</key>
472 <dict>
473 <key>name</key>
474 <string>keyword.operator.heredoc.shell</string>
475 </dict>
476 <key>3</key>
477 <dict>
478 <key>name</key>
479 <string>keyword.control.heredoc-token.shell</string>
480 </dict>
481 </dict>
482 <key>captures</key>
483 <dict>
484 <key>0</key>
485 <dict>
486 <key>name</key>
487 <string>punctuation.definition.string.shell</string>
488 </dict>
489 </dict>
490 <key>contentName</key>
491 <string>source.ruby.embedded.shell</string>
492 <key>end</key>
493 <string>^(RUBY)(?=\s|;|&amp;|$)</string>
494 <key>endCaptures</key>
495 <dict>
496 <key>1</key>
497 <dict>
498 <key>name</key>
499 <string>keyword.control.heredoc-token.shell</string>
500 </dict>
501 </dict>
502 <key>name</key>
503 <string>string.unquoted.heredoc.ruby.shell</string>
504 <key>patterns</key>
505 <array>
506 <dict>
507 <key>include</key>
508 <string>source.ruby</string>
509 </dict>
510 </array>
511 </dict>
512 <dict>
513 <key>begin</key>
514 <string>(&lt;&lt;)-\s*("|'|)(PYTHON)\2</string>
515 <key>beginCaptures</key>
516 <dict>
517 <key>1</key>
518 <dict>
519 <key>name</key>
520 <string>keyword.operator.heredoc.shell</string>
521 </dict>
522 <key>3</key>
523 <dict>
524 <key>name</key>
525 <string>keyword.control.heredoc-token.shell</string>
526 </dict>
527 </dict>
528 <key>captures</key>
529 <dict>
530 <key>0</key>
531 <dict>
532 <key>name</key>
533 <string>punctuation.definition.string.shell</string>
534 </dict>
535 </dict>
536 <key>contentName</key>
537 <string>source.python.embedded.shell</string>
538 <key>end</key>
539 <string>^\t*(PYTHON)(?=\s|;|&amp;|$)</string>
540 <key>endCaptures</key>
541 <dict>
542 <key>1</key>
543 <dict>
544 <key>name</key>
545 <string>keyword.control.heredoc-token.shell</string>
546 </dict>
547 </dict>
548 <key>name</key>
549 <string>string.unquoted.heredoc.no-indent.python.shell</string>
550 <key>patterns</key>
551 <array>
552 <dict>
553 <key>include</key>
554 <string>source.python</string>
555 </dict>
556 </array>
557 </dict>
558 <dict>
559 <key>begin</key>
560 <string>(&lt;&lt;)\s*("|'|)(PYTHON)\2</string>
561 <key>beginCaptures</key>
562 <dict>
563 <key>1</key>
564 <dict>
565 <key>name</key>
566 <string>keyword.operator.heredoc.shell</string>
567 </dict>
568 <key>3</key>
569 <dict>
570 <key>name</key>
571 <string>keyword.control.heredoc-token.shell</string>
572 </dict>
573 </dict>
574 <key>captures</key>
575 <dict>
576 <key>0</key>
577 <dict>
578 <key>name</key>
579 <string>punctuation.definition.string.shell</string>
580 </dict>
581 </dict>
582 <key>contentName</key>
583 <string>source.python.embedded.shell</string>
584 <key>end</key>
585 <string>^(PYTHON)(?=\s|;|&amp;|$)</string>
586 <key>endCaptures</key>
587 <dict>
588 <key>1</key>
589 <dict>
590 <key>name</key>
591 <string>keyword.control.heredoc-token.shell</string>
592 </dict>
593 </dict>
594 <key>name</key>
595 <string>string.unquoted.heredoc.python.shell</string>
596 <key>patterns</key>
597 <array>
598 <dict>
599 <key>include</key>
600 <string>source.python</string>
601 </dict>
602 </array>
603 </dict>
604 <dict>
605 <key>begin</key>
606 <string>(&lt;&lt;)-\s*("|'|)(APPLESCRIPT)\2</string>
607 <key>beginCaptures</key>
608 <dict>
609 <key>1</key>
610 <dict>
611 <key>name</key>
612 <string>keyword.operator.heredoc.shell</string>
613 </dict>
614 <key>3</key>
615 <dict>
616 <key>name</key>
617 <string>keyword.control.heredoc-token.shell</string>
618 </dict>
619 </dict>
620 <key>captures</key>
621 <dict>
622 <key>0</key>
623 <dict>
624 <key>name</key>
625 <string>punctuation.definition.string.shell</string>
626 </dict>
627 </dict>
628 <key>contentName</key>
629 <string>source.applescript.embedded.shell</string>
630 <key>end</key>
631 <string>^\t*(APPLESCRIPT)(?=\s|;|&amp;|$)</string>
632 <key>endCaptures</key>
633 <dict>
634 <key>1</key>
635 <dict>
636 <key>name</key>
637 <string>keyword.control.heredoc-token.shell</string>
638 </dict>
639 </dict>
640 <key>name</key>
641 <string>string.unquoted.heredoc.no-indent.applescript.shell</string>
642 <key>patterns</key>
643 <array>
644 <dict>
645 <key>include</key>
646 <string>source.applescript</string>
647 </dict>
648 </array>
649 </dict>
650 <dict>
651 <key>begin</key>
652 <string>(&lt;&lt;)\s*("|'|)(APPLESCRIPT)\2</string>
653 <key>beginCaptures</key>
654 <dict>
655 <key>1</key>
656 <dict>
657 <key>name</key>
658 <string>keyword.operator.heredoc.shell</string>
659 </dict>
660 <key>3</key>
661 <dict>
662 <key>name</key>
663 <string>keyword.control.heredoc-token.shell</string>
664 </dict>
665 </dict>
666 <key>captures</key>
667 <dict>
668 <key>0</key>
669 <dict>
670 <key>name</key>
671 <string>punctuation.definition.string.shell</string>
672 </dict>
673 </dict>
674 <key>contentName</key>
675 <string>source.applescript.embedded.shell</string>
676 <key>end</key>
677 <string>^(APPLESCRIPT)(?=\s|;|&amp;|$)</string>
678 <key>endCaptures</key>
679 <dict>
680 <key>1</key>
681 <dict>
682 <key>name</key>
683 <string>keyword.control.heredoc-token.shell</string>
684 </dict>
685 </dict>
686 <key>name</key>
687 <string>string.unquoted.heredoc.applescript.shell</string>
688 <key>patterns</key>
689 <array>
690 <dict>
691 <key>include</key>
692 <string>source.applescript</string>
693 </dict>
694 </array>
695 </dict>
696 <dict>
697 <key>begin</key>
698 <string>(&lt;&lt;)-\s*("|'|)(HTML)\2</string>
699 <key>beginCaptures</key>
700 <dict>
701 <key>1</key>
702 <dict>
703 <key>name</key>
704 <string>keyword.operator.heredoc.shell</string>
705 </dict>
706 <key>3</key>
707 <dict>
708 <key>name</key>
709 <string>keyword.control.heredoc-token.shell</string>
710 </dict>
711 </dict>
712 <key>captures</key>
713 <dict>
714 <key>0</key>
715 <dict>
716 <key>name</key>
717 <string>punctuation.definition.string.shell</string>
718 </dict>
719 </dict>
720 <key>contentName</key>
721 <string>text.html.embedded.shell</string>
722 <key>end</key>
723 <string>^\t*(HTML)(?=\s|;|&amp;|$)</string>
724 <key>endCaptures</key>
725 <dict>
726 <key>1</key>
727 <dict>
728 <key>name</key>
729 <string>keyword.control.heredoc-token.shell</string>
730 </dict>
731 </dict>
732 <key>name</key>
733 <string>string.unquoted.heredoc.no-indent.html.shell</string>
734 <key>patterns</key>
735 <array>
736 <dict>
737 <key>include</key>
738 <string>text.html.basic</string>
739 </dict>
740 </array>
741 </dict>
742 <dict>
743 <key>begin</key>
744 <string>(&lt;&lt;)\s*("|'|)(HTML)\2</string>
745 <key>beginCaptures</key>
746 <dict>
747 <key>1</key>
748 <dict>
749 <key>name</key>
750 <string>keyword.operator.heredoc.shell</string>
751 </dict>
752 <key>3</key>
753 <dict>
754 <key>name</key>
755 <string>keyword.control.heredoc-token.shell</string>
756 </dict>
757 </dict>
758 <key>captures</key>
759 <dict>
760 <key>0</key>
761 <dict>
762 <key>name</key>
763 <string>punctuation.definition.string.shell</string>
764 </dict>
765 </dict>
766 <key>contentName</key>
767 <string>text.html.embedded.shell</string>
768 <key>end</key>
769 <string>^(HTML)(?=\s|;|&amp;|$)</string>
770 <key>endCaptures</key>
771 <dict>
772 <key>1</key>
773 <dict>
774 <key>name</key>
775 <string>keyword.control.heredoc-token.shell</string>
776 </dict>
777 </dict>
778 <key>name</key>
779 <string>string.unquoted.heredoc.html.shell</string>
780 <key>patterns</key>
781 <array>
782 <dict>
783 <key>include</key>
784 <string>text.html.basic</string>
785 </dict>
786 </array>
787 </dict>
788 <dict>
789 <key>begin</key>
790 <string>(&lt;&lt;)-\s*("|'|)(MARKDOWN)\2</string>
791 <key>beginCaptures</key>
792 <dict>
793 <key>1</key>
794 <dict>
795 <key>name</key>
796 <string>keyword.operator.heredoc.shell</string>
797 </dict>
798 <key>3</key>
799 <dict>
800 <key>name</key>
801 <string>keyword.control.heredoc-token.shell</string>
802 </dict>
803 </dict>
804 <key>captures</key>
805 <dict>
806 <key>0</key>
807 <dict>
808 <key>name</key>
809 <string>punctuation.definition.string.shell</string>
810 </dict>
811 </dict>
812 <key>contentName</key>
813 <string>text.html.markdown.embedded.shell</string>
814 <key>end</key>
815 <string>^\t*(MARKDOWN)(?=\s|;|&amp;|$)</string>
816 <key>endCaptures</key>
817 <dict>
818 <key>1</key>
819 <dict>
820 <key>name</key>
821 <string>keyword.control.heredoc-token.shell</string>
822 </dict>
823 </dict>
824 <key>name</key>
825 <string>string.unquoted.heredoc.no-indent.markdown.shell</string>
826 <key>patterns</key>
827 <array>
828 <dict>
829 <key>include</key>
830 <string>text.html.markdown</string>
831 </dict>
832 </array>
833 </dict>
834 <dict>
835 <key>begin</key>
836 <string>(&lt;&lt;)\s*("|'|)(MARKDOWN)\2</string>
837 <key>beginCaptures</key>
838 <dict>
839 <key>1</key>
840 <dict>
841 <key>name</key>
842 <string>keyword.operator.heredoc.shell</string>
843 </dict>
844 <key>3</key>
845 <dict>
846 <key>name</key>
847 <string>keyword.control.heredoc-token.shell</string>
848 </dict>
849 </dict>
850 <key>captures</key>
851 <dict>
852 <key>0</key>
853 <dict>
854 <key>name</key>
855 <string>punctuation.definition.string.shell</string>
856 </dict>
857 </dict>
858 <key>contentName</key>
859 <string>text.html.markdown.embedded.shell</string>
860 <key>end</key>
861 <string>^(MARKDOWN)(?=\s|;|&amp;|$)</string>
862 <key>endCaptures</key>
863 <dict>
864 <key>1</key>
865 <dict>
866 <key>name</key>
867 <string>keyword.control.heredoc-token.shell</string>
868 </dict>
869 </dict>
870 <key>name</key>
871 <string>string.unquoted.heredoc.markdown.shell</string>
872 <key>patterns</key>
873 <array>
874 <dict>
875 <key>include</key>
876 <string>text.html.markdown</string>
877 </dict>
878 </array>
879 </dict>
880 <dict>
881 <key>begin</key>
882 <string>(&lt;&lt;)-\s*("|'|)(TEXTILE)\2</string>
883 <key>beginCaptures</key>
884 <dict>
885 <key>1</key>
886 <dict>
887 <key>name</key>
888 <string>keyword.operator.heredoc.shell</string>
889 </dict>
890 <key>3</key>
891 <dict>
892 <key>name</key>
893 <string>keyword.control.heredoc-token.shell</string>
894 </dict>
895 </dict>
896 <key>captures</key>
897 <dict>
898 <key>0</key>
899 <dict>
900 <key>name</key>
901 <string>punctuation.definition.string.shell</string>
902 </dict>
903 </dict>
904 <key>contentName</key>
905 <string>text.html.textile.embedded.shell</string>
906 <key>end</key>
907 <string>^\t*(TEXTILE)(?=\s|;|&amp;|$)</string>
908 <key>endCaptures</key>
909 <dict>
910 <key>1</key>
911 <dict>
912 <key>name</key>
913 <string>keyword.control.heredoc-token.shell</string>
914 </dict>
915 </dict>
916 <key>name</key>
917 <string>string.unquoted.heredoc.no-indent.textile.shell</string>
918 <key>patterns</key>
919 <array>
920 <dict>
921 <key>include</key>
922 <string>text.html.textile</string>
923 </dict>
924 </array>
925 </dict>
926 <dict>
927 <key>begin</key>
928 <string>(&lt;&lt;)\s*("|'|)(TEXTILE)\2</string>
929 <key>beginCaptures</key>
930 <dict>
931 <key>1</key>
932 <dict>
933 <key>name</key>
934 <string>keyword.operator.heredoc.shell</string>
935 </dict>
936 <key>3</key>
937 <dict>
938 <key>name</key>
939 <string>keyword.control.heredoc-token.shell</string>
940 </dict>
941 </dict>
942 <key>captures</key>
943 <dict>
944 <key>0</key>
945 <dict>
946 <key>name</key>
947 <string>punctuation.definition.string.shell</string>
948 </dict>
949 </dict>
950 <key>contentName</key>
951 <string>text.html.textile.embedded.shell</string>
952 <key>end</key>
953 <string>^(TEXTILE)(?=\s|;|&amp;|$)</string>
954 <key>endCaptures</key>
955 <dict>
956 <key>1</key>
957 <dict>
958 <key>name</key>
959 <string>keyword.control.heredoc-token.shell</string>
960 </dict>
961 </dict>
962 <key>name</key>
963 <string>string.unquoted.heredoc.textile.shell</string>
964 <key>patterns</key>
965 <array>
966 <dict>
967 <key>include</key>
968 <string>text.html.textile</string>
969 </dict>
970 </array>
971 </dict>
972 <dict>
973 <key>begin</key>
974 <string>(&lt;&lt;)-\s*("|'|)\\?(\w+)\2</string>
975 <key>beginCaptures</key>
976 <dict>
977 <key>1</key>
978 <dict>
979 <key>name</key>
980 <string>keyword.operator.heredoc.shell</string>
981 </dict>
982 <key>3</key>
983 <dict>
984 <key>name</key>
985 <string>keyword.control.heredoc-token.shell</string>
986 </dict>
987 </dict>
988 <key>captures</key>
989 <dict>
990 <key>0</key>
991 <dict>
992 <key>name</key>
993 <string>punctuation.definition.string.shell</string>
994 </dict>
995 </dict>
996 <key>end</key>
997 <string>^\t*(\3)(?=\s|;|&amp;|$)</string>
998 <key>endCaptures</key>
999 <dict>
1000 <key>1</key>
1001 <dict>
1002 <key>name</key>
1003 <string>keyword.control.heredoc-token.shell</string>
1004 </dict>
1005 </dict>
1006 <key>name</key>
1007 <string>string.unquoted.heredoc.no-indent.shell</string>
1008 </dict>
1009 <dict>
1010 <key>begin</key>
1011 <string>(&lt;&lt;)\s*("|'|)\\?(\w+)\2</string>
1012 <key>beginCaptures</key>
1013 <dict>
1014 <key>1</key>
1015 <dict>
1016 <key>name</key>
1017 <string>keyword.operator.heredoc.shell</string>
1018 </dict>
1019 <key>3</key>
1020 <dict>
1021 <key>name</key>
1022 <string>keyword.control.heredoc-token.shell</string>
1023 </dict>
1024 </dict>
1025 <key>captures</key>
1026 <dict>
1027 <key>0</key>
1028 <dict>
1029 <key>name</key>
1030 <string>punctuation.definition.string.shell</string>
1031 </dict>
1032 </dict>
1033 <key>end</key>
1034 <string>^(\3)(?=\s|;|&amp;|$)</string>
1035 <key>endCaptures</key>
1036 <dict>
1037 <key>1</key>
1038 <dict>
1039 <key>name</key>
1040 <string>keyword.control.heredoc-token.shell</string>
1041 </dict>
1042 </dict>
1043 <key>name</key>
1044 <string>string.unquoted.heredoc.shell</string>
1045 </dict>
1046 </array>
1047 </dict>
1048 <key>herestring</key>
1049 <dict>
1050 <key>patterns</key>
1051 <array>
1052 <dict>
1053 <key>captures</key>
1054 <dict>
1055 <key>1</key>
1056 <dict>
1057 <key>name</key>
1058 <string>keyword.operator.herestring.shell</string>
1059 </dict>
1060 </dict>
1061 <key>match</key>
1062 <string>(&lt;&lt;&lt;)</string>
1063 <key>name</key>
1064 <string>meta.herestring.shell</string>
1065 </dict>
1066 </array>
1067 </dict>
1068 <key>interpolation</key>
1069 <dict>
1070 <key>patterns</key>
1071 <array>
1072 <dict>
1073 <key>begin</key>
1074 <string>\$\({2}</string>
1075 <key>beginCaptures</key>
1076 <dict>
1077 <key>0</key>
1078 <dict>
1079 <key>name</key>
1080 <string>punctuation.definition.string.begin.shell</string>
1081 </dict>
1082 </dict>
1083 <key>end</key>
1084 <string>\){2}</string>
1085 <key>endCaptures</key>
1086 <dict>
1087 <key>0</key>
1088 <dict>
1089 <key>name</key>
1090 <string>punctuation.definition.string.end.shell</string>
1091 </dict>
1092 </dict>
1093 <key>name</key>
1094 <string>string.other.math.shell</string>
1095 <key>patterns</key>
1096 <array>
1097 <dict>
1098 <key>include</key>
1099 <string>#math</string>
1100 </dict>
1101 </array>
1102 </dict>
1103 <dict>
1104 <key>begin</key>
1105 <string>`</string>
1106 <key>beginCaptures</key>
1107 <dict>
1108 <key>0</key>
1109 <dict>
1110 <key>name</key>
1111 <string>punctuation.definition.string.begin.shell</string>
1112 </dict>
1113 </dict>
1114 <key>end</key>
1115 <string>`</string>
1116 <key>endCaptures</key>
1117 <dict>
1118 <key>0</key>
1119 <dict>
1120 <key>name</key>
1121 <string>punctuation.definition.string.end.shell</string>
1122 </dict>
1123 </dict>
1124 <key>name</key>
1125 <string>string.interpolated.backtick.shell</string>
1126 <key>patterns</key>
1127 <array>
1128 <dict>
1129 <key>match</key>
1130 <string>\\[`\\$]</string>
1131 <key>name</key>
1132 <string>constant.character.escape.shell</string>
1133 </dict>
1134 <dict>
1135 <key>begin</key>
1136 <string>(?&lt;=^|;|&amp;|\s|`)(#)(?!\{)</string>
1137 <key>beginCaptures</key>
1138 <dict>
1139 <key>1</key>
1140 <dict>
1141 <key>name</key>
1142 <string>punctuation.definition.comment.shell</string>
1143 </dict>
1144 </dict>
1145 <key>end</key>
1146 <string>(?=`)|\n</string>
1147 <key>name</key>
1148 <string>comment.line.number-sign.shell</string>
1149 </dict>
1150 <dict>
1151 <key>include</key>
1152 <string>$self</string>
1153 </dict>
1154 </array>
1155 </dict>
1156 <dict>
1157 <key>begin</key>
1158 <string>\$\(</string>
1159 <key>beginCaptures</key>
1160 <dict>
1161 <key>0</key>
1162 <dict>
1163 <key>name</key>
1164 <string>punctuation.definition.string.begin.shell</string>
1165 </dict>
1166 </dict>
1167 <key>end</key>
1168 <string>\)</string>
1169 <key>endCaptures</key>
1170 <dict>
1171 <key>0</key>
1172 <dict>
1173 <key>name</key>
1174 <string>punctuation.definition.string.end.shell</string>
1175 </dict>
1176 </dict>
1177 <key>name</key>
1178 <string>string.interpolated.dollar.shell</string>
1179 <key>patterns</key>
1180 <array>
1181 <dict>
1182 <key>begin</key>
1183 <string>(?&lt;=^|;|&amp;|\s|\()(#)(?!\{)</string>
1184 <key>beginCaptures</key>
1185 <dict>
1186 <key>1</key>
1187 <dict>
1188 <key>name</key>
1189 <string>punctuation.definition.comment.shell</string>
1190 </dict>
1191 </dict>
1192 <key>end</key>
1193 <string>(?=\))|\n</string>
1194 <key>name</key>
1195 <string>comment.line.number-sign.shell</string>
1196 </dict>
1197 <dict>
1198 <key>include</key>
1199 <string>$self</string>
1200 </dict>
1201 </array>
1202 </dict>
1203 </array>
1204 </dict>
1205 <key>keyword</key>
1206 <dict>
1207 <key>patterns</key>
1208 <array>
1209 <dict>
1210 <key>match</key>
1211 <string>(?&lt;=^|;|&amp;|\s)(?:if|then|else|elif|fi|for|in|do|done|select|case|continue|esac|while|until|return|coproc)(?=\s|;|&amp;|$)</string>
1212 <key>name</key>
1213 <string>keyword.control.shell</string>
1214 </dict>
1215 <dict>
1216 <key>match</key>
1217 <string>(?&lt;=^|;|&amp;|\s)(?:export|declare|typeset|local|readonly)(?=\s|;|&amp;|$)</string>
1218 <key>name</key>
1219 <string>storage.modifier.shell</string>
1220 </dict>
1221 </array>
1222 </dict>
1223 <key>lines</key>
1224 <dict>
1225 <key>patterns</key>
1226 <array>
1227 <dict>
1228 <key>match</key>
1229 <string>\\\n</string>
1230 <key>name</key>
1231 <string>constant.character.escape.newline.shell</string>
1232 </dict>
1233 </array>
1234 </dict>
1235 <key>list</key>
1236 <dict>
1237 <key>patterns</key>
1238 <array>
1239 <dict>
1240 <key>match</key>
1241 <string>;|&amp;&amp;|&amp;|\|\|</string>
1242 <key>name</key>
1243 <string>keyword.operator.list.shell</string>
1244 </dict>
1245 </array>
1246 </dict>
1247 <key>logical-expression</key>
1248 <dict>
1249 <key>patterns</key>
1250 <array>
1251 <dict>
1252 <key>comment</key>
1253 <string>do we want a special rule for ( expr )?</string>
1254 <key>match</key>
1255 <string>=[=~]?|!=?|&lt;|&gt;|&amp;&amp;|\|\|</string>
1256 <key>name</key>
1257 <string>keyword.operator.logical.shell</string>
1258 </dict>
1259 <dict>
1260 <key>match</key>
1261 <string>(?&lt;!\S)-(nt|ot|ef|eq|ne|l[te]|g[te]|[a-hknoprstuwxzOGLSN])</string>
1262 <key>name</key>
1263 <string>keyword.operator.logical.shell</string>
1264 </dict>
1265 </array>
1266 </dict>
1267 <key>loop</key>
1268 <dict>
1269 <key>patterns</key>
1270 <array>
1271 <dict>
1272 <key>begin</key>
1273 <string>(?&lt;=^|;|&amp;|\s)(for)\s+(?=\({2})</string>
1274 <key>captures</key>
1275 <dict>
1276 <key>1</key>
1277 <dict>
1278 <key>name</key>
1279 <string>keyword.control.shell</string>
1280 </dict>
1281 </dict>
1282 <key>end</key>
1283 <string>(?&lt;=^|;|&amp;|\s)(done)(?=\s|;|&amp;|$|\))</string>
1284 <key>name</key>
1285 <string>meta.scope.for-loop.shell</string>
1286 <key>patterns</key>
1287 <array>
1288 <dict>
1289 <key>include</key>
1290 <string>$self</string>
1291 </dict>
1292 </array>
1293 </dict>
1294 <dict>
1295 <key>begin</key>
1296 <string>(?&lt;=^|;|&amp;|\s)(for)\s+([^\s\\]+)(?=\s|;|&amp;|$)</string>
1297 <key>beginCaptures</key>
1298 <dict>
1299 <key>1</key>
1300 <dict>
1301 <key>name</key>
1302 <string>keyword.control.shell</string>
1303 </dict>
1304 <key>2</key>
1305 <dict>
1306 <key>name</key>
1307 <string>variable.other.loop.shell</string>
1308 </dict>
1309 </dict>
1310 <key>end</key>
1311 <string>(?&lt;=^|;|&amp;|\s)(done)(?=\s|;|&amp;|$|\))</string>
1312 <key>endCaptures</key>
1313 <dict>
1314 <key>1</key>
1315 <dict>
1316 <key>name</key>
1317 <string>keyword.control.shell</string>
1318 </dict>
1319 </dict>
1320 <key>name</key>
1321 <string>meta.scope.for-in-loop.shell</string>
1322 <key>patterns</key>
1323 <array>
1324 <dict>
1325 <key>include</key>
1326 <string>$self</string>
1327 </dict>
1328 </array>
1329 </dict>
1330 <dict>
1331 <key>begin</key>
1332 <string>(?&lt;=^|;|&amp;|\s)(while|until)(?=\s|;|&amp;|$)</string>
1333 <key>captures</key>
1334 <dict>
1335 <key>1</key>
1336 <dict>
1337 <key>name</key>
1338 <string>keyword.control.shell</string>
1339 </dict>
1340 </dict>
1341 <key>end</key>
1342 <string>(?&lt;=^|;|&amp;|\s)(done)(?=\s|;|&amp;|$|\))</string>
1343 <key>name</key>
1344 <string>meta.scope.while-loop.shell</string>
1345 <key>patterns</key>
1346 <array>
1347 <dict>
1348 <key>include</key>
1349 <string>$self</string>
1350 </dict>
1351 </array>
1352 </dict>
1353 <dict>
1354 <key>begin</key>
1355 <string>(?&lt;=^|;|&amp;|\s)(select)\s+([^\s\\]+)(?=\s|;|&amp;|$)</string>
1356 <key>beginCaptures</key>
1357 <dict>
1358 <key>1</key>
1359 <dict>
1360 <key>name</key>
1361 <string>keyword.control.shell</string>
1362 </dict>
1363 <key>2</key>
1364 <dict>
1365 <key>name</key>
1366 <string>variable.other.loop.shell</string>
1367 </dict>
1368 </dict>
1369 <key>end</key>
1370 <string>(?&lt;=^|;|&amp;|\s)(done)(?=\s|;|&amp;|$|\))</string>
1371 <key>endCaptures</key>
1372 <dict>
1373 <key>1</key>
1374 <dict>
1375 <key>name</key>
1376 <string>keyword.control.shell</string>
1377 </dict>
1378 </dict>
1379 <key>name</key>
1380 <string>meta.scope.select-block.shell</string>
1381 <key>patterns</key>
1382 <array>
1383 <dict>
1384 <key>include</key>
1385 <string>$self</string>
1386 </dict>
1387 </array>
1388 </dict>
1389 <dict>
1390 <key>begin</key>
1391 <string>(?&lt;=^|;|&amp;|\s)(case)(?=\s|;|&amp;|$)</string>
1392 <key>captures</key>
1393 <dict>
1394 <key>1</key>
1395 <dict>
1396 <key>name</key>
1397 <string>keyword.control.shell</string>
1398 </dict>
1399 </dict>
1400 <key>end</key>
1401 <string>(?&lt;=^|;|&amp;|\s)(esac)(?=\s|;|&amp;|$|\))</string>
1402 <key>name</key>
1403 <string>meta.scope.case-block.shell</string>
1404 <key>patterns</key>
1405 <array>
1406 <dict>
1407 <key>begin</key>
1408 <string>(?&lt;=^|;|&amp;|\s)(?:in)(?=\s|;|&amp;|$)</string>
1409 <key>beginCaptures</key>
1410 <dict>
1411 <key>1</key>
1412 <dict>
1413 <key>name</key>
1414 <string>keyword.control.shell</string>
1415 </dict>
1416 </dict>
1417 <key>end</key>
1418 <string>(?&lt;=^|;|&amp;|\s)(?=(?:esac)(?:\s|;|&amp;|$|\)))</string>
1419 <key>name</key>
1420 <string>meta.scope.case-body.shell</string>
1421 <key>patterns</key>
1422 <array>
1423 <dict>
1424 <key>include</key>
1425 <string>#comment</string>
1426 </dict>
1427 <dict>
1428 <key>include</key>
1429 <string>#case-clause</string>
1430 </dict>
1431 <dict>
1432 <key>include</key>
1433 <string>$self</string>
1434 </dict>
1435 </array>
1436 </dict>
1437 <dict>
1438 <key>include</key>
1439 <string>$self</string>
1440 </dict>
1441 </array>
1442 </dict>
1443 <dict>
1444 <key>begin</key>
1445 <string>(^|(?&lt;=[&amp;;|]))\s*(if)(?=\s|;|&amp;|$)</string>
1446 <key>beginCaptures</key>
1447 <dict>
1448 <key>2</key>
1449 <dict>
1450 <key>name</key>
1451 <string>keyword.control.shell</string>
1452 </dict>
1453 </dict>
1454 <key>comment</key>
1455 <string>Restrict match to avoid matching in lines like `dd if=/dev/sda1 …`</string>
1456 <key>end</key>
1457 <string>(?&lt;=^|;|&amp;|\s)(fi)(?=\s|;|&amp;|$|\))</string>
1458 <key>endCaptures</key>
1459 <dict>
1460 <key>1</key>
1461 <dict>
1462 <key>name</key>
1463 <string>keyword.control.shell</string>
1464 </dict>
1465 </dict>
1466 <key>name</key>
1467 <string>meta.scope.if-block.shell</string>
1468 <key>patterns</key>
1469 <array>
1470 <dict>
1471 <key>include</key>
1472 <string>$self</string>
1473 </dict>
1474 </array>
1475 </dict>
1476 </array>
1477 </dict>
1478 <key>math</key>
1479 <dict>
1480 <key>patterns</key>
1481 <array>
1482 <dict>
1483 <key>include</key>
1484 <string>#variable</string>
1485 </dict>
1486 <dict>
1487 <key>match</key>
1488 <string>\+{1,2}|-{1,2}|!|~|\*{1,2}|/|%|&lt;[&lt;=]?|&gt;[&gt;=]?|==|!=|\^|\|{1,2}|&amp;{1,2}|\?|\:|,|=|[*/%+\-&amp;^|]=|&lt;&lt;=|&gt;&gt;=</string>
1489 <key>name</key>
1490 <string>keyword.operator.arithmetic.shell</string>
1491 </dict>
1492 <dict>
1493 <key>match</key>
1494 <string>0[xX]\h+</string>
1495 <key>name</key>
1496 <string>constant.numeric.hex.shell</string>
1497 </dict>
1498 <dict>
1499 <key>match</key>
1500 <string>0\d+</string>
1501 <key>name</key>
1502 <string>constant.numeric.octal.shell</string>
1503 </dict>
1504 <dict>
1505 <key>match</key>
1506 <string>\d{1,2}#[0-9a-zA-Z@_]+</string>
1507 <key>name</key>
1508 <string>constant.numeric.other.shell</string>
1509 </dict>
1510 <dict>
1511 <key>match</key>
1512 <string>\d+</string>
1513 <key>name</key>
1514 <string>constant.numeric.integer.shell</string>
1515 </dict>
1516 </array>
1517 </dict>
1518 <key>pathname</key>
1519 <dict>
1520 <key>patterns</key>
1521 <array>
1522 <dict>
1523 <key>match</key>
1524 <string>(?&lt;=\s|:|=|^)~</string>
1525 <key>name</key>
1526 <string>keyword.operator.tilde.shell</string>
1527 </dict>
1528 <dict>
1529 <key>match</key>
1530 <string>\*|\?</string>
1531 <key>name</key>
1532 <string>keyword.operator.glob.shell</string>
1533 </dict>
1534 <dict>
1535 <key>begin</key>
1536 <string>([?*+@!])(\()</string>
1537 <key>beginCaptures</key>
1538 <dict>
1539 <key>1</key>
1540 <dict>
1541 <key>name</key>
1542 <string>keyword.operator.extglob.shell</string>
1543 </dict>
1544 <key>2</key>
1545 <dict>
1546 <key>name</key>
1547 <string>punctuation.definition.extglob.shell</string>
1548 </dict>
1549 </dict>
1550 <key>end</key>
1551 <string>(\))</string>
1552 <key>endCaptures</key>
1553 <dict>
1554 <key>1</key>
1555 <dict>
1556 <key>name</key>
1557 <string>punctuation.definition.extglob.shell</string>
1558 </dict>
1559 </dict>
1560 <key>name</key>
1561 <string>meta.structure.extglob.shell</string>
1562 <key>patterns</key>
1563 <array>
1564 <dict>
1565 <key>include</key>
1566 <string>$self</string>
1567 </dict>
1568 </array>
1569 </dict>
1570 </array>
1571 </dict>
1572 <key>pipeline</key>
1573 <dict>
1574 <key>patterns</key>
1575 <array>
1576 <dict>
1577 <key>match</key>
1578 <string>(?&lt;=^|;|&amp;|\s)(time)(?=\s|;|&amp;|$)</string>
1579 <key>name</key>
1580 <string>keyword.other.shell</string>
1581 </dict>
1582 <dict>
1583 <key>match</key>
1584 <string>[|!]</string>
1585 <key>name</key>
1586 <string>keyword.operator.pipe.shell</string>
1587 </dict>
1588 </array>
1589 </dict>
1590 <key>redirection</key>
1591 <dict>
1592 <key>patterns</key>
1593 <array>
1594 <dict>
1595 <key>begin</key>
1596 <string>[&gt;&lt;]\(</string>
1597 <key>beginCaptures</key>
1598 <dict>
1599 <key>0</key>
1600 <dict>
1601 <key>name</key>
1602 <string>punctuation.definition.string.begin.shell</string>
1603 </dict>
1604 </dict>
1605 <key>end</key>
1606 <string>\)</string>
1607 <key>endCaptures</key>
1608 <dict>
1609 <key>0</key>
1610 <dict>
1611 <key>name</key>
1612 <string>punctuation.definition.string.end.shell</string>
1613 </dict>
1614 </dict>
1615 <key>name</key>
1616 <string>string.interpolated.process-substitution.shell</string>
1617 <key>patterns</key>
1618 <array>
1619 <dict>
1620 <key>include</key>
1621 <string>$self</string>
1622 </dict>
1623 </array>
1624 </dict>
1625 <dict>
1626 <key>comment</key>
1627 <string>valid: &amp;&gt;word &gt;&amp;word &gt;word [n]&gt;&amp;[n] [n]&lt;word [n]&gt;word [n]&gt;&gt;word [n]&lt;&amp;word (last one is duplicate)</string>
1628 <key>match</key>
1629 <string>&amp;&gt;|\d*&gt;&amp;\d*|\d*(&gt;&gt;|&gt;|&lt;)|\d*&lt;&amp;|\d*&lt;&gt;</string>
1630 <key>name</key>
1631 <string>keyword.operator.redirect.shell</string>
1632 </dict>
1633 </array>
1634 </dict>
1635 <key>string</key>
1636 <dict>
1637 <key>patterns</key>
1638 <array>
1639 <dict>
1640 <key>match</key>
1641 <string>\\.</string>
1642 <key>name</key>
1643 <string>constant.character.escape.shell</string>
1644 </dict>
1645 <dict>
1646 <key>begin</key>
1647 <string>'</string>
1648 <key>beginCaptures</key>
1649 <dict>
1650 <key>0</key>
1651 <dict>
1652 <key>name</key>
1653 <string>punctuation.definition.string.begin.shell</string>
1654 </dict>
1655 </dict>
1656 <key>end</key>
1657 <string>'</string>
1658 <key>endCaptures</key>
1659 <dict>
1660 <key>0</key>
1661 <dict>
1662 <key>name</key>
1663 <string>punctuation.definition.string.end.shell</string>
1664 </dict>
1665 </dict>
1666 <key>name</key>
1667 <string>string.quoted.single.shell</string>
1668 </dict>
1669 <dict>
1670 <key>begin</key>
1671 <string>\$?"</string>
1672 <key>beginCaptures</key>
1673 <dict>
1674 <key>0</key>
1675 <dict>
1676 <key>name</key>
1677 <string>punctuation.definition.string.begin.shell</string>
1678 </dict>
1679 </dict>
1680 <key>end</key>
1681 <string>"</string>
1682 <key>endCaptures</key>
1683 <dict>
1684 <key>0</key>
1685 <dict>
1686 <key>name</key>
1687 <string>punctuation.definition.string.end.shell</string>
1688 </dict>
1689 </dict>
1690 <key>name</key>
1691 <string>string.quoted.double.shell</string>
1692 <key>patterns</key>
1693 <array>
1694 <dict>
1695 <key>match</key>
1696 <string>\\[\$`"\\\n]</string>
1697 <key>name</key>
1698 <string>constant.character.escape.shell</string>
1699 </dict>
1700 <dict>
1701 <key>include</key>
1702 <string>#variable</string>
1703 </dict>
1704 <dict>
1705 <key>include</key>
1706 <string>#interpolation</string>
1707 </dict>
1708 </array>
1709 </dict>
1710 <dict>
1711 <key>begin</key>
1712 <string>\$'</string>
1713 <key>beginCaptures</key>
1714 <dict>
1715 <key>0</key>
1716 <dict>
1717 <key>name</key>
1718 <string>punctuation.definition.string.begin.shell</string>
1719 </dict>
1720 </dict>
1721 <key>end</key>
1722 <string>'</string>
1723 <key>endCaptures</key>
1724 <dict>
1725 <key>0</key>
1726 <dict>
1727 <key>name</key>
1728 <string>punctuation.definition.string.end.shell</string>
1729 </dict>
1730 </dict>
1731 <key>name</key>
1732 <string>string.quoted.single.dollar.shell</string>
1733 <key>patterns</key>
1734 <array>
1735 <dict>
1736 <key>match</key>
1737 <string>\\(a|b|e|f|n|r|t|v|\\|')</string>
1738 <key>name</key>
1739 <string>constant.character.escape.ansi-c.shell</string>
1740 </dict>
1741 <dict>
1742 <key>match</key>
1743 <string>\\[0-9]{3}</string>
1744 <key>name</key>
1745 <string>constant.character.escape.octal.shell</string>
1746 </dict>
1747 <dict>
1748 <key>match</key>
1749 <string>\\x[0-9a-fA-F]{2}</string>
1750 <key>name</key>
1751 <string>constant.character.escape.hex.shell</string>
1752 </dict>
1753 <dict>
1754 <key>match</key>
1755 <string>\\c.</string>
1756 <key>name</key>
1757 <string>constant.character.escape.control-char.shell</string>
1758 </dict>
1759 </array>
1760 </dict>
1761 </array>
1762 </dict>
1763 <key>support</key>
1764 <dict>
1765 <key>patterns</key>
1766 <array>
1767 <dict>
1768 <key>match</key>
1769 <string>(?&lt;=^|;|&amp;|\s)(?::|\.)(?=\s|;|&amp;|$)</string>
1770 <key>name</key>
1771 <string>support.function.builtin.shell</string>
1772 </dict>
1773 <dict>
1774 <key>match</key>
1775 <string>(?&lt;=^|;|&amp;|\s)(?:alias|bg|bind|break|builtin|caller|cd|command|compgen|complete|dirs|disown|echo|enable|eval|exec|exit|false|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|mapfile|popd|printf|pushd|pwd|read(array)?|readonly|set|shift|shopt|source|suspend|test|times|trap|true|type|ulimit|umask|unalias|unset|wait)(?=\s|;|&amp;|$)</string>
1776 <key>name</key>
1777 <string>support.function.builtin.shell</string>
1778 </dict>
1779 </array>
1780 </dict>
1781 <key>variable</key>
1782 <dict>
1783 <key>patterns</key>
1784 <array>
1785 <dict>
1786 <key>captures</key>
1787 <dict>
1788 <key>1</key>
1789 <dict>
1790 <key>name</key>
1791 <string>punctuation.definition.variable.shell</string>
1792 </dict>
1793 </dict>
1794 <key>match</key>
1795 <string>(\$)[a-zA-Z_][a-zA-Z0-9_]*</string>
1796 <key>name</key>
1797 <string>variable.other.normal.shell</string>
1798 </dict>
1799 <dict>
1800 <key>captures</key>
1801 <dict>
1802 <key>1</key>
1803 <dict>
1804 <key>name</key>
1805 <string>punctuation.definition.variable.shell</string>
1806 </dict>
1807 </dict>
1808 <key>match</key>
1809 <string>(\$)[-*@#?$!0_]</string>
1810 <key>name</key>
1811 <string>variable.other.special.shell</string>
1812 </dict>
1813 <dict>
1814 <key>captures</key>
1815 <dict>
1816 <key>1</key>
1817 <dict>
1818 <key>name</key>
1819 <string>punctuation.definition.variable.shell</string>
1820 </dict>
1821 </dict>
1822 <key>match</key>
1823 <string>(\$)[1-9]</string>
1824 <key>name</key>
1825 <string>variable.other.positional.shell</string>
1826 </dict>
1827 <dict>
1828 <key>begin</key>
1829 <string>\$\{</string>
1830 <key>captures</key>
1831 <dict>
1832 <key>0</key>
1833 <dict>
1834 <key>name</key>
1835 <string>punctuation.definition.variable.shell</string>
1836 </dict>
1837 </dict>
1838 <key>end</key>
1839 <string>\}</string>
1840 <key>name</key>
1841 <string>variable.other.bracket.shell</string>
1842 <key>patterns</key>
1843 <array>
1844 <dict>
1845 <key>match</key>
1846 <string>!|:[-=?+]?|\*|@|#{1,2}|%{1,2}|/</string>
1847 <key>name</key>
1848 <string>keyword.operator.expansion.shell</string>
1849 </dict>
1850 <dict>
1851 <key>captures</key>
1852 <dict>
1853 <key>1</key>
1854 <dict>
1855 <key>name</key>
1856 <string>punctuation.section.array.shell</string>
1857 </dict>
1858 <key>3</key>
1859 <dict>
1860 <key>name</key>
1861 <string>punctuation.section.array.shell</string>
1862 </dict>
1863 </dict>
1864 <key>match</key>
1865 <string>(\[)([^\]]+)(\])</string>
1866 </dict>
1867 <dict>
1868 <key>include</key>
1869 <string>#string</string>
1870 </dict>
1871 <dict>
1872 <key>include</key>
1873 <string>#variable</string>
1874 </dict>
1875 <dict>
1876 <key>include</key>
1877 <string>#interpolation</string>
1878 </dict>
1879 </array>
1880 </dict>
1881 </array>
1882 </dict>
1883 </dict>
1884 <key>scopeName</key>
1885 <string>source.shell</string>
1886 <key>uuid</key>
1887 <string>DDEEA3ED-6B1C-11D9-8B10-000D93589AF6</string>
1888</dict>
1889</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/toml.plist created+736
......@@ -0,0 +1,736 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>fileTypes</key>
6 <array>
7 <string>toml</string>
8 </array>
9 <key>keyEquivalent</key>
10 <string>^~T</string>
11 <key>name</key>
12 <string>TOML</string>
13 <key>patterns</key>
14 <array>
15 <dict>
16 <key>include</key>
17 <string>#comments</string>
18 </dict>
19 <dict>
20 <key>include</key>
21 <string>#groups</string>
22 </dict>
23 <dict>
24 <key>include</key>
25 <string>#key_pair</string>
26 </dict>
27 <dict>
28 <key>include</key>
29 <string>#invalid</string>
30 </dict>
31 </array>
32 <key>repository</key>
33 <dict>
34 <key>comments</key>
35 <dict>
36 <key>begin</key>
37 <string>(^[ \t]+)?(?=#)</string>
38 <key>beginCaptures</key>
39 <dict>
40 <key>1</key>
41 <dict>
42 <key>name</key>
43 <string>punctuation.whitespace.comment.leading.toml</string>
44 </dict>
45 </dict>
46 <key>end</key>
47 <string>(?!\G)</string>
48 <key>patterns</key>
49 <array>
50 <dict>
51 <key>begin</key>
52 <string>#</string>
53 <key>beginCaptures</key>
54 <dict>
55 <key>0</key>
56 <dict>
57 <key>name</key>
58 <string>punctuation.definition.comment.toml</string>
59 </dict>
60 </dict>
61 <key>end</key>
62 <string>\n</string>
63 <key>name</key>
64 <string>comment.line.number-sign.toml</string>
65 </dict>
66 </array>
67 </dict>
68 <key>groups</key>
69 <dict>
70 <key>patterns</key>
71 <array>
72 <dict>
73 <key>captures</key>
74 <dict>
75 <key>1</key>
76 <dict>
77 <key>name</key>
78 <string>punctuation.definition.section.begin.toml</string>
79 </dict>
80 <key>2</key>
81 <dict>
82 <key>patterns</key>
83 <array>
84 <dict>
85 <key>match</key>
86 <string>[^\s.]+</string>
87 <key>name</key>
88 <string>entity.name.section.toml</string>
89 </dict>
90 </array>
91 </dict>
92 <key>3</key>
93 <dict>
94 <key>name</key>
95 <string>punctuation.definition.section.begin.toml</string>
96 </dict>
97 </dict>
98 <key>match</key>
99 <string>^\s*(\[)([^\[\]]*)(\])</string>
100 <key>name</key>
101 <string>meta.group.toml</string>
102 </dict>
103 <dict>
104 <key>captures</key>
105 <dict>
106 <key>1</key>
107 <dict>
108 <key>name</key>
109 <string>punctuation.definition.section.begin.toml</string>
110 </dict>
111 <key>2</key>
112 <dict>
113 <key>patterns</key>
114 <array>
115 <dict>
116 <key>match</key>
117 <string>[^\s.]+</string>
118 <key>name</key>
119 <string>entity.name.section.toml</string>
120 </dict>
121 </array>
122 </dict>
123 <key>3</key>
124 <dict>
125 <key>name</key>
126 <string>punctuation.definition.section.begin.toml</string>
127 </dict>
128 </dict>
129 <key>match</key>
130 <string>^\s*(\[\[)([^\[\]]*)(\]\])</string>
131 <key>name</key>
132 <string>meta.group.double.toml</string>
133 </dict>
134 </array>
135 </dict>
136 <key>invalid</key>
137 <dict>
138 <key>match</key>
139 <string>\S+(\s*(?=\S))?</string>
140 <key>name</key>
141 <string>invalid.illegal.not-allowed-here.toml</string>
142 </dict>
143 <key>key_pair</key>
144 <dict>
145 <key>patterns</key>
146 <array>
147 <dict>
148 <key>begin</key>
149 <string>([A-Za-z0-9_-]+)\s*(=)\s*</string>
150 <key>captures</key>
151 <dict>
152 <key>1</key>
153 <dict>
154 <key>name</key>
155 <string>variable.other.key.toml</string>
156 </dict>
157 <key>2</key>
158 <dict>
159 <key>name</key>
160 <string>punctuation.separator.key-value.toml</string>
161 </dict>
162 </dict>
163 <key>end</key>
164 <string>(?&lt;=\S)(?&lt;!=)|$</string>
165 <key>patterns</key>
166 <array>
167 <dict>
168 <key>include</key>
169 <string>#primatives</string>
170 </dict>
171 </array>
172 </dict>
173 <dict>
174 <key>begin</key>
175 <string>((")(.*?)("))\s*(=)\s*</string>
176 <key>captures</key>
177 <dict>
178 <key>1</key>
179 <dict>
180 <key>name</key>
181 <string>variable.other.key.toml</string>
182 </dict>
183 <key>2</key>
184 <dict>
185 <key>name</key>
186 <string>punctuation.definition.variable.begin.toml</string>
187 </dict>
188 <key>3</key>
189 <dict>
190 <key>patterns</key>
191 <array>
192 <dict>
193 <key>match</key>
194 <string>\\([btnfr"\\]|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})</string>
195 <key>name</key>
196 <string>constant.character.escape.toml</string>
197 </dict>
198 <dict>
199 <key>match</key>
200 <string>\\[^btnfr"\\]</string>
201 <key>name</key>
202 <string>invalid.illegal.escape.toml</string>
203 </dict>
204 <dict>
205 <key>match</key>
206 <string>"</string>
207 <key>name</key>
208 <string>invalid.illegal.not-allowed-here.toml</string>
209 </dict>
210 </array>
211 </dict>
212 <key>4</key>
213 <dict>
214 <key>name</key>
215 <string>punctuation.definition.variable.end.toml</string>
216 </dict>
217 <key>5</key>
218 <dict>
219 <key>name</key>
220 <string>punctuation.separator.key-value.toml</string>
221 </dict>
222 </dict>
223 <key>end</key>
224 <string>(?&lt;=\S)(?&lt;!=)|$</string>
225 <key>patterns</key>
226 <array>
227 <dict>
228 <key>include</key>
229 <string>#primatives</string>
230 </dict>
231 </array>
232 </dict>
233 <dict>
234 <key>begin</key>
235 <string>((')([^']*)('))\s*(=)\s*</string>
236 <key>captures</key>
237 <dict>
238 <key>1</key>
239 <dict>
240 <key>name</key>
241 <string>variable.other.key.toml</string>
242 </dict>
243 <key>2</key>
244 <dict>
245 <key>name</key>
246 <string>punctuation.definition.variable.begin.toml</string>
247 </dict>
248 <key>4</key>
249 <dict>
250 <key>name</key>
251 <string>punctuation.definition.variable.end.toml</string>
252 </dict>
253 <key>5</key>
254 <dict>
255 <key>name</key>
256 <string>punctuation.separator.key-value.toml</string>
257 </dict>
258 </dict>
259 <key>end</key>
260 <string>(?&lt;=\S)(?&lt;!=)|$</string>
261 <key>patterns</key>
262 <array>
263 <dict>
264 <key>include</key>
265 <string>#primatives</string>
266 </dict>
267 </array>
268 </dict>
269 <dict>
270 <key>begin</key>
271 <string>(?x)
272 (
273 (
274 (?:
275 [A-Za-z0-9_-]+ # Bare key
276 | " (?:[^"\\]|\\.)* " # Double quoted key
277 | ' [^']* ' # Sindle quoted key
278 )
279 (?:
280 \s* \. \s* # Dot
281 | (?= \s* =) # or look-ahead for equals
282 )
283 ){2,} # Ensure at least one dot
284 )
285 \s*(=)\s*
286 </string>
287 <key>captures</key>
288 <dict>
289 <key>1</key>
290 <dict>
291 <key>name</key>
292 <string>variable.other.key.toml</string>
293 <key>patterns</key>
294 <array>
295 <dict>
296 <key>match</key>
297 <string>\.</string>
298 <key>name</key>
299 <string>punctuation.separator.variable.toml</string>
300 </dict>
301 <dict>
302 <key>captures</key>
303 <dict>
304 <key>1</key>
305 <dict>
306 <key>name</key>
307 <string>punctuation.definition.variable.begin.toml</string>
308 </dict>
309 <key>2</key>
310 <dict>
311 <key>patterns</key>
312 <array>
313 <dict>
314 <key>match</key>
315 <string>\\([btnfr"\\]|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})</string>
316 <key>name</key>
317 <string>constant.character.escape.toml</string>
318 </dict>
319 <dict>
320 <key>match</key>
321 <string>\\[^btnfr"\\]</string>
322 <key>name</key>
323 <string>invalid.illegal.escape.toml</string>
324 </dict>
325 </array>
326 </dict>
327 <key>3</key>
328 <dict>
329 <key>name</key>
330 <string>punctuation.definition.variable.end.toml</string>
331 </dict>
332 </dict>
333 <key>match</key>
334 <string>(")((?:[^"\\]|\\.)*)(")</string>
335 </dict>
336 <dict>
337 <key>captures</key>
338 <dict>
339 <key>1</key>
340 <dict>
341 <key>name</key>
342 <string>punctuation.definition.variable.begin.toml</string>
343 </dict>
344 <key>2</key>
345 <dict>
346 <key>name</key>
347 <string>punctuation.definition.variable.end.toml</string>
348 </dict>
349 </dict>
350 <key>match</key>
351 <string>(')[^']*(')</string>
352 </dict>
353 </array>
354 </dict>
355 <key>3</key>
356 <dict>
357 <key>name</key>
358 <string>punctuation.separator.key-value.toml</string>
359 </dict>
360 </dict>
361 <key>comment</key>
362 <string>Dotted key</string>
363 <key>end</key>
364 <string>(?&lt;=\S)(?&lt;!=)|$</string>
365 <key>patterns</key>
366 <array>
367 <dict>
368 <key>include</key>
369 <string>#primatives</string>
370 </dict>
371 </array>
372 </dict>
373 </array>
374 </dict>
375 <key>primatives</key>
376 <dict>
377 <key>patterns</key>
378 <array>
379 <dict>
380 <key>begin</key>
381 <string>\G"""</string>
382 <key>beginCaptures</key>
383 <dict>
384 <key>0</key>
385 <dict>
386 <key>name</key>
387 <string>punctuation.definition.string.begin.toml</string>
388 </dict>
389 </dict>
390 <key>end</key>
391 <string>"{3,5}</string>
392 <key>endCaptures</key>
393 <dict>
394 <key>0</key>
395 <dict>
396 <key>name</key>
397 <string>punctuation.definition.string.end.toml</string>
398 </dict>
399 </dict>
400 <key>name</key>
401 <string>string.quoted.triple.double.toml</string>
402 <key>patterns</key>
403 <array>
404 <dict>
405 <key>match</key>
406 <string>\\([btnfr"\\]|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})</string>
407 <key>name</key>
408 <string>constant.character.escape.toml</string>
409 </dict>
410 <dict>
411 <key>match</key>
412 <string>\\[^btnfr"\\\n]</string>
413 <key>name</key>
414 <string>invalid.illegal.escape.toml</string>
415 </dict>
416 </array>
417 </dict>
418 <dict>
419 <key>begin</key>
420 <string>\G"</string>
421 <key>beginCaptures</key>
422 <dict>
423 <key>0</key>
424 <dict>
425 <key>name</key>
426 <string>punctuation.definition.string.begin.toml</string>
427 </dict>
428 </dict>
429 <key>end</key>
430 <string>"</string>
431 <key>endCaptures</key>
432 <dict>
433 <key>0</key>
434 <dict>
435 <key>name</key>
436 <string>punctuation.definition.string.end.toml</string>
437 </dict>
438 </dict>
439 <key>name</key>
440 <string>string.quoted.double.toml</string>
441 <key>patterns</key>
442 <array>
443 <dict>
444 <key>match</key>
445 <string>\\([btnfr"\\]|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})</string>
446 <key>name</key>
447 <string>constant.character.escape.toml</string>
448 </dict>
449 <dict>
450 <key>match</key>
451 <string>\\[^btnfr"\\]</string>
452 <key>name</key>
453 <string>invalid.illegal.escape.toml</string>
454 </dict>
455 </array>
456 </dict>
457 <dict>
458 <key>begin</key>
459 <string>\G'''</string>
460 <key>beginCaptures</key>
461 <dict>
462 <key>0</key>
463 <dict>
464 <key>name</key>
465 <string>punctuation.definition.string.begin.toml</string>
466 </dict>
467 </dict>
468 <key>end</key>
469 <string>'{3,5}</string>
470 <key>endCaptures</key>
471 <dict>
472 <key>0</key>
473 <dict>
474 <key>name</key>
475 <string>punctuation.definition.string.end.toml</string>
476 </dict>
477 </dict>
478 <key>name</key>
479 <string>string.quoted.triple.single.toml</string>
480 </dict>
481 <dict>
482 <key>begin</key>
483 <string>\G'</string>
484 <key>beginCaptures</key>
485 <dict>
486 <key>0</key>
487 <dict>
488 <key>name</key>
489 <string>punctuation.definition.string.begin.toml</string>
490 </dict>
491 </dict>
492 <key>end</key>
493 <string>'</string>
494 <key>endCaptures</key>
495 <dict>
496 <key>0</key>
497 <dict>
498 <key>name</key>
499 <string>punctuation.definition.string.end.toml</string>
500 </dict>
501 </dict>
502 <key>name</key>
503 <string>string.quoted.single.toml</string>
504 </dict>
505 <dict>
506 <key>match</key>
507 <string>\G(?x)
508 [0-9]{4}
509 -
510 (0[1-9]|1[012])
511 -
512 (?!00|3[2-9])[0-3][0-9]
513 (
514 [Tt ]
515 (?!2[5-9])[0-2][0-9]
516 :
517 [0-5][0-9]
518 :
519 (?!6[1-9])[0-6][0-9]
520 (\.[0-9]+)?
521 (
522 Z
523 | [+-](?!2[5-9])[0-2][0-9]:[0-5][0-9]
524 )?
525 )?
526 </string>
527 <key>name</key>
528 <string>constant.other.date.toml</string>
529 </dict>
530 <dict>
531 <key>match</key>
532 <string>\G(?x)
533 (?!2[5-9])[0-2][0-9]
534 :
535 [0-5][0-9]
536 :
537 (?!6[1-9])[0-6][0-9]
538 (\.[0-9]+)?
539 </string>
540 <key>name</key>
541 <string>constant.other.time.toml</string>
542 </dict>
543 <dict>
544 <key>match</key>
545 <string>\G(true|false)</string>
546 <key>name</key>
547 <string>constant.language.boolean.toml</string>
548 </dict>
549 <dict>
550 <key>match</key>
551 <string>\G0x\h(\h|_\h)*</string>
552 <key>name</key>
553 <string>constant.numeric.hex.toml</string>
554 </dict>
555 <dict>
556 <key>match</key>
557 <string>\G0o[0-7]([0-7]|_[0-7])*</string>
558 <key>name</key>
559 <string>constant.numeric.octal.toml</string>
560 </dict>
561 <dict>
562 <key>match</key>
563 <string>\G0b[01]([01]|_[01])*</string>
564 <key>name</key>
565 <string>constant.numeric.binary.toml</string>
566 </dict>
567 <dict>
568 <key>match</key>
569 <string>\G[+-]?(inf|nan)</string>
570 <key>name</key>
571 <string>constant.numeric.toml</string>
572 </dict>
573 <dict>
574 <key>match</key>
575 <string>(?x)
576 \G
577 (
578 [+-]?
579 (
580 0
581 | ([1-9](([0-9]|_[0-9])+)?)
582 )
583 )
584 (?=[.eE])
585 (
586 \.
587 ([0-9](([0-9]|_[0-9])+)?)
588 )?
589 (
590 [eE]
591 ([+-]?[0-9](([0-9]|_[0-9])+)?)
592 )?
593 </string>
594 <key>name</key>
595 <string>constant.numeric.float.toml</string>
596 </dict>
597 <dict>
598 <key>match</key>
599 <string>(?x)
600 \G
601 (
602 [+-]?
603 (
604 0
605 | ([1-9](([0-9]|_[0-9])+)?)
606 )
607 )
608 </string>
609 <key>name</key>
610 <string>constant.numeric.integer.toml</string>
611 </dict>
612 <dict>
613 <key>begin</key>
614 <string>\G\[</string>
615 <key>beginCaptures</key>
616 <dict>
617 <key>0</key>
618 <dict>
619 <key>name</key>
620 <string>punctuation.definition.array.begin.toml</string>
621 </dict>
622 </dict>
623 <key>end</key>
624 <string>\]</string>
625 <key>endCaptures</key>
626 <dict>
627 <key>0</key>
628 <dict>
629 <key>name</key>
630 <string>punctuation.definition.array.end.toml</string>
631 </dict>
632 </dict>
633 <key>name</key>
634 <string>meta.array.toml</string>
635 <key>patterns</key>
636 <array>
637 <dict>
638 <key>begin</key>
639 <string>(?=["'']|[+-]?[0-9]|[+-]?(inf|nan)|true|false|\[|\{)</string>
640 <key>end</key>
641 <string>,|(?=])</string>
642 <key>endCaptures</key>
643 <dict>
644 <key>0</key>
645 <dict>
646 <key>name</key>
647 <string>punctuation.separator.array.toml</string>
648 </dict>
649 </dict>
650 <key>patterns</key>
651 <array>
652 <dict>
653 <key>include</key>
654 <string>#primatives</string>
655 </dict>
656 <dict>
657 <key>include</key>
658 <string>#comments</string>
659 </dict>
660 <dict>
661 <key>include</key>
662 <string>#invalid</string>
663 </dict>
664 </array>
665 </dict>
666 <dict>
667 <key>include</key>
668 <string>#comments</string>
669 </dict>
670 <dict>
671 <key>include</key>
672 <string>#invalid</string>
673 </dict>
674 </array>
675 </dict>
676 <dict>
677 <key>begin</key>
678 <string>\G\{</string>
679 <key>beginCaptures</key>
680 <dict>
681 <key>0</key>
682 <dict>
683 <key>name</key>
684 <string>punctuation.definition.inline-table.begin.toml</string>
685 </dict>
686 </dict>
687 <key>end</key>
688 <string>\}</string>
689 <key>endCaptures</key>
690 <dict>
691 <key>0</key>
692 <dict>
693 <key>name</key>
694 <string>punctuation.definition.inline-table.end.toml</string>
695 </dict>
696 </dict>
697 <key>name</key>
698 <string>meta.inline-table.toml</string>
699 <key>patterns</key>
700 <array>
701 <dict>
702 <key>begin</key>
703 <string>(?=\S)</string>
704 <key>end</key>
705 <string>,|(?=})</string>
706 <key>endCaptures</key>
707 <dict>
708 <key>0</key>
709 <dict>
710 <key>name</key>
711 <string>punctuation.separator.inline-table.toml</string>
712 </dict>
713 </dict>
714 <key>patterns</key>
715 <array>
716 <dict>
717 <key>include</key>
718 <string>#key_pair</string>
719 </dict>
720 </array>
721 </dict>
722 <dict>
723 <key>include</key>
724 <string>#comments</string>
725 </dict>
726 </array>
727 </dict>
728 </array>
729 </dict>
730 </dict>
731 <key>scopeName</key>
732 <string>source.toml</string>
733 <key>uuid</key>
734 <string>7DEF2EDB-5BB7-4DD2-9E78-3541A26B7923</string>
735</dict>
736</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/ts.plist created+9858
......@@ -0,0 +1,9858 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4 <dict>
5 <key>name</key>
6 <string>TypeScript</string>
7 <key>scopeName</key>
8 <string>source.ts</string>
9 <key>fileTypes</key>
10 <array>
11 <string>ts</string>
12 </array>
13 <key>uuid</key>
14 <string>ef98eb90-bf9b-11e4-bb52-0800200c9a66</string>
15 <key>patterns</key>
16 <array>
17 <dict>
18 <key>include</key>
19 <string>#directives</string>
20 </dict>
21 <dict>
22 <key>include</key>
23 <string>#statements</string>
24 </dict>
25 <dict>
26 <key>include</key>
27 <string>#shebang</string>
28 </dict>
29 </array>
30 <key>repository</key>
31 <dict>
32 <key>shebang</key>
33 <dict>
34 <key>name</key>
35 <string>comment.line.shebang.ts</string>
36 <key>match</key>
37 <string>\A(#!).*(?=$)</string>
38 <key>captures</key>
39 <dict>
40 <key>1</key>
41 <dict>
42 <key>name</key>
43 <string>punctuation.definition.comment.ts</string>
44 </dict>
45 </dict>
46 </dict>
47 <key>statements</key>
48 <dict>
49 <key>patterns</key>
50 <array>
51 <dict>
52 <key>include</key>
53 <string>#declaration</string>
54 </dict>
55 <dict>
56 <key>include</key>
57 <string>#control-statement</string>
58 </dict>
59 <dict>
60 <key>include</key>
61 <string>#after-operator-block-as-object-literal</string>
62 </dict>
63 <dict>
64 <key>include</key>
65 <string>#decl-block</string>
66 </dict>
67 <dict>
68 <key>include</key>
69 <string>#label</string>
70 </dict>
71 <dict>
72 <key>include</key>
73 <string>#expression</string>
74 </dict>
75 <dict>
76 <key>include</key>
77 <string>#punctuation-semicolon</string>
78 </dict>
79 <dict>
80 <key>include</key>
81 <string>#string</string>
82 </dict>
83 <dict>
84 <key>include</key>
85 <string>#comment</string>
86 </dict>
87 </array>
88 </dict>
89 <key>declaration</key>
90 <dict>
91 <key>patterns</key>
92 <array>
93 <dict>
94 <key>include</key>
95 <string>#decorator</string>
96 </dict>
97 <dict>
98 <key>include</key>
99 <string>#var-expr</string>
100 </dict>
101 <dict>
102 <key>include</key>
103 <string>#function-declaration</string>
104 </dict>
105 <dict>
106 <key>include</key>
107 <string>#class-declaration</string>
108 </dict>
109 <dict>
110 <key>include</key>
111 <string>#interface-declaration</string>
112 </dict>
113 <dict>
114 <key>include</key>
115 <string>#enum-declaration</string>
116 </dict>
117 <dict>
118 <key>include</key>
119 <string>#namespace-declaration</string>
120 </dict>
121 <dict>
122 <key>include</key>
123 <string>#type-alias-declaration</string>
124 </dict>
125 <dict>
126 <key>include</key>
127 <string>#import-equals-declaration</string>
128 </dict>
129 <dict>
130 <key>include</key>
131 <string>#import-declaration</string>
132 </dict>
133 <dict>
134 <key>include</key>
135 <string>#export-declaration</string>
136 </dict>
137 <dict>
138 <key>name</key>
139 <string>storage.modifier.ts</string>
140 <key>match</key>
141 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(declare|export)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
142 </dict>
143 </array>
144 </dict>
145 <key>control-statement</key>
146 <dict>
147 <key>patterns</key>
148 <array>
149 <dict>
150 <key>include</key>
151 <string>#switch-statement</string>
152 </dict>
153 <dict>
154 <key>include</key>
155 <string>#for-loop</string>
156 </dict>
157 <dict>
158 <key>name</key>
159 <string>keyword.control.trycatch.ts</string>
160 <key>match</key>
161 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
162 </dict>
163 <dict>
164 <key>match</key>
165 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(break|continue|goto)\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
166 <key>captures</key>
167 <dict>
168 <key>1</key>
169 <dict>
170 <key>name</key>
171 <string>keyword.control.loop.ts</string>
172 </dict>
173 <key>2</key>
174 <dict>
175 <key>name</key>
176 <string>entity.name.label.ts</string>
177 </dict>
178 </dict>
179 </dict>
180 <dict>
181 <key>name</key>
182 <string>keyword.control.loop.ts</string>
183 <key>match</key>
184 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
185 </dict>
186 <dict>
187 <key>begin</key>
188 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(return)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
189 <key>beginCaptures</key>
190 <dict>
191 <key>0</key>
192 <dict>
193 <key>name</key>
194 <string>keyword.control.flow.ts</string>
195 </dict>
196 </dict>
197 <key>end</key>
198 <string>(?=[;}]|$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
199 <key>patterns</key>
200 <array>
201 <dict>
202 <key>include</key>
203 <string>#expression</string>
204 </dict>
205 </array>
206 </dict>
207 <dict>
208 <key>name</key>
209 <string>keyword.control.switch.ts</string>
210 <key>match</key>
211 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
212 </dict>
213 <dict>
214 <key>include</key>
215 <string>#if-statement</string>
216 </dict>
217 <dict>
218 <key>name</key>
219 <string>keyword.control.conditional.ts</string>
220 <key>match</key>
221 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(else|if)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
222 </dict>
223 <dict>
224 <key>name</key>
225 <string>keyword.control.with.ts</string>
226 <key>match</key>
227 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(with)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
228 </dict>
229 <dict>
230 <key>name</key>
231 <string>keyword.control.ts</string>
232 <key>match</key>
233 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(package)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
234 </dict>
235 <dict>
236 <key>name</key>
237 <string>keyword.other.debugger.ts</string>
238 <key>match</key>
239 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(debugger)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
240 </dict>
241 </array>
242 </dict>
243 <key>label</key>
244 <dict>
245 <key>patterns</key>
246 <array>
247 <dict>
248 <key>begin</key>
249 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*\{)</string>
250 <key>beginCaptures</key>
251 <dict>
252 <key>1</key>
253 <dict>
254 <key>name</key>
255 <string>entity.name.label.ts</string>
256 </dict>
257 <key>2</key>
258 <dict>
259 <key>name</key>
260 <string>punctuation.separator.label.ts</string>
261 </dict>
262 </dict>
263 <key>end</key>
264 <string>(?&lt;=\})</string>
265 <key>patterns</key>
266 <array>
267 <dict>
268 <key>include</key>
269 <string>#decl-block</string>
270 </dict>
271 </array>
272 </dict>
273 <dict>
274 <key>match</key>
275 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(:)</string>
276 <key>captures</key>
277 <dict>
278 <key>1</key>
279 <dict>
280 <key>name</key>
281 <string>entity.name.label.ts</string>
282 </dict>
283 <key>2</key>
284 <dict>
285 <key>name</key>
286 <string>punctuation.separator.label.ts</string>
287 </dict>
288 </dict>
289 </dict>
290 </array>
291 </dict>
292 <key>expression</key>
293 <dict>
294 <key>patterns</key>
295 <array>
296 <dict>
297 <key>include</key>
298 <string>#expressionWithoutIdentifiers</string>
299 </dict>
300 <dict>
301 <key>include</key>
302 <string>#identifiers</string>
303 </dict>
304 <dict>
305 <key>include</key>
306 <string>#expressionPunctuations</string>
307 </dict>
308 </array>
309 </dict>
310 <key>expressionWithoutIdentifiers</key>
311 <dict>
312 <key>patterns</key>
313 <array>
314 <dict>
315 <key>include</key>
316 <string>#string</string>
317 </dict>
318 <dict>
319 <key>include</key>
320 <string>#regex</string>
321 </dict>
322 <dict>
323 <key>include</key>
324 <string>#comment</string>
325 </dict>
326 <dict>
327 <key>include</key>
328 <string>#function-expression</string>
329 </dict>
330 <dict>
331 <key>include</key>
332 <string>#class-expression</string>
333 </dict>
334 <dict>
335 <key>include</key>
336 <string>#arrow-function</string>
337 </dict>
338 <dict>
339 <key>include</key>
340 <string>#paren-expression-possibly-arrow</string>
341 </dict>
342 <dict>
343 <key>include</key>
344 <string>#cast</string>
345 </dict>
346 <dict>
347 <key>include</key>
348 <string>#ternary-expression</string>
349 </dict>
350 <dict>
351 <key>include</key>
352 <string>#new-expr</string>
353 </dict>
354 <dict>
355 <key>include</key>
356 <string>#instanceof-expr</string>
357 </dict>
358 <dict>
359 <key>include</key>
360 <string>#object-literal</string>
361 </dict>
362 <dict>
363 <key>include</key>
364 <string>#expression-operators</string>
365 </dict>
366 <dict>
367 <key>include</key>
368 <string>#function-call</string>
369 </dict>
370 <dict>
371 <key>include</key>
372 <string>#literal</string>
373 </dict>
374 <dict>
375 <key>include</key>
376 <string>#support-objects</string>
377 </dict>
378 <dict>
379 <key>include</key>
380 <string>#paren-expression</string>
381 </dict>
382 </array>
383 </dict>
384 <key>expressionPunctuations</key>
385 <dict>
386 <key>patterns</key>
387 <array>
388 <dict>
389 <key>include</key>
390 <string>#punctuation-comma</string>
391 </dict>
392 <dict>
393 <key>include</key>
394 <string>#punctuation-accessor</string>
395 </dict>
396 </array>
397 </dict>
398 <key>decorator</key>
399 <dict>
400 <key>name</key>
401 <string>meta.decorator.ts</string>
402 <key>begin</key>
403 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))\@</string>
404 <key>beginCaptures</key>
405 <dict>
406 <key>0</key>
407 <dict>
408 <key>name</key>
409 <string>punctuation.decorator.ts</string>
410 </dict>
411 </dict>
412 <key>end</key>
413 <string>(?=\s)</string>
414 <key>patterns</key>
415 <array>
416 <dict>
417 <key>include</key>
418 <string>#expression</string>
419 </dict>
420 </array>
421 </dict>
422 <key>var-expr</key>
423 <dict>
424 <key>patterns</key>
425 <array>
426 <dict>
427 <key>name</key>
428 <string>meta.var.expr.ts</string>
429 <key>begin</key>
430 <string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))</string>
431 <key>end</key>
432 <string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=^|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|((?&lt;!^let|[^\._$[:alnum:]]let|^var|[^\._$[:alnum:]]var)(?=\s*$)))</string>
433 <key>patterns</key>
434 <array>
435 <dict>
436 <key>begin</key>
437 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
438 <key>beginCaptures</key>
439 <dict>
440 <key>1</key>
441 <dict>
442 <key>name</key>
443 <string>keyword.control.export.ts</string>
444 </dict>
445 <key>2</key>
446 <dict>
447 <key>name</key>
448 <string>storage.modifier.ts</string>
449 </dict>
450 <key>3</key>
451 <dict>
452 <key>name</key>
453 <string>storage.type.ts</string>
454 </dict>
455 </dict>
456 <key>end</key>
457 <string>(?=\S)</string>
458 </dict>
459 <dict>
460 <key>include</key>
461 <string>#destructuring-variable</string>
462 </dict>
463 <dict>
464 <key>include</key>
465 <string>#var-single-variable</string>
466 </dict>
467 <dict>
468 <key>include</key>
469 <string>#variable-initializer</string>
470 </dict>
471 <dict>
472 <key>include</key>
473 <string>#comment</string>
474 </dict>
475 <dict>
476 <key>begin</key>
477 <string>(,)\s*(?=$|\/\/)</string>
478 <key>beginCaptures</key>
479 <dict>
480 <key>1</key>
481 <dict>
482 <key>name</key>
483 <string>punctuation.separator.comma.ts</string>
484 </dict>
485 </dict>
486 <key>end</key>
487 <string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|^\s*$))|((?&lt;=\S)(?=\s*$)))</string>
488 <key>patterns</key>
489 <array>
490 <dict>
491 <key>include</key>
492 <string>#single-line-comment-consuming-line-ending</string>
493 </dict>
494 <dict>
495 <key>include</key>
496 <string>#comment</string>
497 </dict>
498 <dict>
499 <key>include</key>
500 <string>#destructuring-variable</string>
501 </dict>
502 <dict>
503 <key>include</key>
504 <string>#var-single-variable</string>
505 </dict>
506 <dict>
507 <key>include</key>
508 <string>#punctuation-comma</string>
509 </dict>
510 </array>
511 </dict>
512 <dict>
513 <key>include</key>
514 <string>#punctuation-comma</string>
515 </dict>
516 </array>
517 </dict>
518 <dict>
519 <key>name</key>
520 <string>meta.var.expr.ts</string>
521 <key>begin</key>
522 <string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))</string>
523 <key>beginCaptures</key>
524 <dict>
525 <key>1</key>
526 <dict>
527 <key>name</key>
528 <string>keyword.control.export.ts</string>
529 </dict>
530 <key>2</key>
531 <dict>
532 <key>name</key>
533 <string>storage.modifier.ts</string>
534 </dict>
535 <key>3</key>
536 <dict>
537 <key>name</key>
538 <string>storage.type.ts</string>
539 </dict>
540 </dict>
541 <key>end</key>
542 <string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=^|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|((?&lt;!^const|[^\._$[:alnum:]]const)(?=\s*$)))</string>
543 <key>patterns</key>
544 <array>
545 <dict>
546 <key>begin</key>
547 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
548 <key>beginCaptures</key>
549 <dict>
550 <key>1</key>
551 <dict>
552 <key>name</key>
553 <string>keyword.control.export.ts</string>
554 </dict>
555 <key>2</key>
556 <dict>
557 <key>name</key>
558 <string>storage.modifier.ts</string>
559 </dict>
560 <key>3</key>
561 <dict>
562 <key>name</key>
563 <string>storage.type.ts</string>
564 </dict>
565 </dict>
566 <key>end</key>
567 <string>(?=\S)</string>
568 </dict>
569 <dict>
570 <key>include</key>
571 <string>#destructuring-const</string>
572 </dict>
573 <dict>
574 <key>include</key>
575 <string>#var-single-const</string>
576 </dict>
577 <dict>
578 <key>include</key>
579 <string>#variable-initializer</string>
580 </dict>
581 <dict>
582 <key>include</key>
583 <string>#comment</string>
584 </dict>
585 <dict>
586 <key>begin</key>
587 <string>(,)\s*(?=$|\/\/)</string>
588 <key>beginCaptures</key>
589 <dict>
590 <key>1</key>
591 <dict>
592 <key>name</key>
593 <string>punctuation.separator.comma.ts</string>
594 </dict>
595 </dict>
596 <key>end</key>
597 <string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|^\s*$))|((?&lt;=\S)(?=\s*$)))</string>
598 <key>patterns</key>
599 <array>
600 <dict>
601 <key>include</key>
602 <string>#single-line-comment-consuming-line-ending</string>
603 </dict>
604 <dict>
605 <key>include</key>
606 <string>#comment</string>
607 </dict>
608 <dict>
609 <key>include</key>
610 <string>#destructuring-const</string>
611 </dict>
612 <dict>
613 <key>include</key>
614 <string>#var-single-const</string>
615 </dict>
616 <dict>
617 <key>include</key>
618 <string>#punctuation-comma</string>
619 </dict>
620 </array>
621 </dict>
622 <dict>
623 <key>include</key>
624 <string>#punctuation-comma</string>
625 </dict>
626 </array>
627 </dict>
628 <dict>
629 <key>name</key>
630 <string>meta.var.expr.ts</string>
631 <key>begin</key>
632 <string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b((?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))</string>
633 <key>beginCaptures</key>
634 <dict>
635 <key>1</key>
636 <dict>
637 <key>name</key>
638 <string>keyword.control.export.ts</string>
639 </dict>
640 <key>2</key>
641 <dict>
642 <key>name</key>
643 <string>storage.modifier.ts</string>
644 </dict>
645 <key>3</key>
646 <dict>
647 <key>name</key>
648 <string>storage.type.ts</string>
649 </dict>
650 </dict>
651 <key>end</key>
652 <string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b((?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|((?&lt;!^using|[^\._$[:alnum:]]using|^await\s+using|[^\._$[:alnum:]]await\s+using)(?=\s*$)))</string>
653 <key>patterns</key>
654 <array>
655 <dict>
656 <key>begin</key>
657 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b((?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
658 <key>beginCaptures</key>
659 <dict>
660 <key>1</key>
661 <dict>
662 <key>name</key>
663 <string>keyword.control.export.ts</string>
664 </dict>
665 <key>2</key>
666 <dict>
667 <key>name</key>
668 <string>storage.modifier.ts</string>
669 </dict>
670 <key>3</key>
671 <dict>
672 <key>name</key>
673 <string>storage.type.ts</string>
674 </dict>
675 </dict>
676 <key>end</key>
677 <string>(?=\S)</string>
678 </dict>
679 <dict>
680 <key>include</key>
681 <string>#var-single-const</string>
682 </dict>
683 <dict>
684 <key>include</key>
685 <string>#variable-initializer</string>
686 </dict>
687 <dict>
688 <key>include</key>
689 <string>#comment</string>
690 </dict>
691 <dict>
692 <key>begin</key>
693 <string>(,)\s*((?!\S)|(?=\/\/))</string>
694 <key>beginCaptures</key>
695 <dict>
696 <key>1</key>
697 <dict>
698 <key>name</key>
699 <string>punctuation.separator.comma.ts</string>
700 </dict>
701 </dict>
702 <key>end</key>
703 <string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|^\s*$))|((?&lt;=\S)(?=\s*$)))</string>
704 <key>patterns</key>
705 <array>
706 <dict>
707 <key>include</key>
708 <string>#single-line-comment-consuming-line-ending</string>
709 </dict>
710 <dict>
711 <key>include</key>
712 <string>#comment</string>
713 </dict>
714 <dict>
715 <key>include</key>
716 <string>#var-single-const</string>
717 </dict>
718 <dict>
719 <key>include</key>
720 <string>#punctuation-comma</string>
721 </dict>
722 </array>
723 </dict>
724 <dict>
725 <key>include</key>
726 <string>#punctuation-comma</string>
727 </dict>
728 </array>
729 </dict>
730 </array>
731 </dict>
732 <key>var-single-variable</key>
733 <dict>
734 <key>patterns</key>
735 <array>
736 <dict>
737 <key>name</key>
738 <string>meta.var-single-variable.expr.ts</string>
739 <key>begin</key>
740 <string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(\!)?(?=\s*
741# function assignment |
742(=\s*(
743 ((async\s+)?(
744 (function\s*[(&lt;*]) |
745 (function\s+) |
746 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
747 )) |
748 ((async\s*)?(
749 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
750 # sure shot arrow functions even if =&gt; is on new line
751(
752 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
753 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
754 (
755 ([)]\s*:) | # ():
756 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
757 )
758) |
759
760# arrow function possible to detect only with =&gt; on same line
761(
762 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
763 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
764 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
765 \s*=&gt; # arrow operator
766)
767 ))
768)) |
769# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
770(:\s*(
771 (&lt;) |
772 ([(]\s*(
773 ([)]) |
774 (\.\.\.) |
775 ([_$[:alnum:]]+\s*(
776 ([:,?=])|
777 ([)]\s*=&gt;)
778 ))
779 ))
780)) |
781(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
782(:\s*((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
783(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
784 ((async\s+)?(
785 (function\s*[(&lt;*]) |
786 (function\s+) |
787 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
788 )) |
789 ((async\s*)?(
790 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
791 # sure shot arrow functions even if =&gt; is on new line
792(
793 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
794 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
795 (
796 ([)]\s*:) | # ():
797 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
798 )
799) |
800
801# arrow function possible to detect only with =&gt; on same line
802(
803 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
804 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
805 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
806 \s*=&gt; # arrow operator
807)
808 ))
809)))</string>
810 <key>beginCaptures</key>
811 <dict>
812 <key>1</key>
813 <dict>
814 <key>name</key>
815 <string>meta.definition.variable.ts entity.name.function.ts</string>
816 </dict>
817 <key>2</key>
818 <dict>
819 <key>name</key>
820 <string>keyword.operator.definiteassignment.ts</string>
821 </dict>
822 </dict>
823 <key>end</key>
824 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
825 <key>patterns</key>
826 <array>
827 <dict>
828 <key>include</key>
829 <string>#var-single-variable-type-annotation</string>
830 </dict>
831 </array>
832 </dict>
833 <dict>
834 <key>name</key>
835 <string>meta.var-single-variable.expr.ts</string>
836 <key>begin</key>
837 <string>([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\!)?</string>
838 <key>beginCaptures</key>
839 <dict>
840 <key>1</key>
841 <dict>
842 <key>name</key>
843 <string>meta.definition.variable.ts variable.other.constant.ts</string>
844 </dict>
845 <key>2</key>
846 <dict>
847 <key>name</key>
848 <string>keyword.operator.definiteassignment.ts</string>
849 </dict>
850 </dict>
851 <key>end</key>
852 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
853 <key>patterns</key>
854 <array>
855 <dict>
856 <key>include</key>
857 <string>#var-single-variable-type-annotation</string>
858 </dict>
859 </array>
860 </dict>
861 <dict>
862 <key>name</key>
863 <string>meta.var-single-variable.expr.ts</string>
864 <key>begin</key>
865 <string>([_$[:alpha:]][_$[:alnum:]]*)(\!)?</string>
866 <key>beginCaptures</key>
867 <dict>
868 <key>1</key>
869 <dict>
870 <key>name</key>
871 <string>meta.definition.variable.ts variable.other.readwrite.ts</string>
872 </dict>
873 <key>2</key>
874 <dict>
875 <key>name</key>
876 <string>keyword.operator.definiteassignment.ts</string>
877 </dict>
878 </dict>
879 <key>end</key>
880 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
881 <key>patterns</key>
882 <array>
883 <dict>
884 <key>include</key>
885 <string>#var-single-variable-type-annotation</string>
886 </dict>
887 </array>
888 </dict>
889 </array>
890 </dict>
891 <key>var-single-const</key>
892 <dict>
893 <key>patterns</key>
894 <array>
895 <dict>
896 <key>name</key>
897 <string>meta.var-single-variable.expr.ts</string>
898 <key>begin</key>
899 <string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\s*
900# function assignment |
901(=\s*(
902 ((async\s+)?(
903 (function\s*[(&lt;*]) |
904 (function\s+) |
905 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
906 )) |
907 ((async\s*)?(
908 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
909 # sure shot arrow functions even if =&gt; is on new line
910(
911 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
912 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
913 (
914 ([)]\s*:) | # ():
915 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
916 )
917) |
918
919# arrow function possible to detect only with =&gt; on same line
920(
921 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
922 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
923 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
924 \s*=&gt; # arrow operator
925)
926 ))
927)) |
928# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
929(:\s*(
930 (&lt;) |
931 ([(]\s*(
932 ([)]) |
933 (\.\.\.) |
934 ([_$[:alnum:]]+\s*(
935 ([:,?=])|
936 ([)]\s*=&gt;)
937 ))
938 ))
939)) |
940(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
941(:\s*((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
942(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
943 ((async\s+)?(
944 (function\s*[(&lt;*]) |
945 (function\s+) |
946 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
947 )) |
948 ((async\s*)?(
949 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
950 # sure shot arrow functions even if =&gt; is on new line
951(
952 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
953 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
954 (
955 ([)]\s*:) | # ():
956 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
957 )
958) |
959
960# arrow function possible to detect only with =&gt; on same line
961(
962 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
963 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
964 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
965 \s*=&gt; # arrow operator
966)
967 ))
968)))</string>
969 <key>beginCaptures</key>
970 <dict>
971 <key>1</key>
972 <dict>
973 <key>name</key>
974 <string>meta.definition.variable.ts variable.other.constant.ts entity.name.function.ts</string>
975 </dict>
976 </dict>
977 <key>end</key>
978 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
979 <key>patterns</key>
980 <array>
981 <dict>
982 <key>include</key>
983 <string>#var-single-variable-type-annotation</string>
984 </dict>
985 </array>
986 </dict>
987 <dict>
988 <key>name</key>
989 <string>meta.var-single-variable.expr.ts</string>
990 <key>begin</key>
991 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
992 <key>beginCaptures</key>
993 <dict>
994 <key>1</key>
995 <dict>
996 <key>name</key>
997 <string>meta.definition.variable.ts variable.other.constant.ts</string>
998 </dict>
999 </dict>
1000 <key>end</key>
1001 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
1002 <key>patterns</key>
1003 <array>
1004 <dict>
1005 <key>include</key>
1006 <string>#var-single-variable-type-annotation</string>
1007 </dict>
1008 </array>
1009 </dict>
1010 </array>
1011 </dict>
1012 <key>var-single-variable-type-annotation</key>
1013 <dict>
1014 <key>patterns</key>
1015 <array>
1016 <dict>
1017 <key>include</key>
1018 <string>#type-annotation</string>
1019 </dict>
1020 <dict>
1021 <key>include</key>
1022 <string>#string</string>
1023 </dict>
1024 <dict>
1025 <key>include</key>
1026 <string>#comment</string>
1027 </dict>
1028 </array>
1029 </dict>
1030 <key>destructuring-variable</key>
1031 <dict>
1032 <key>patterns</key>
1033 <array>
1034 <dict>
1035 <key>name</key>
1036 <string>meta.object-binding-pattern-variable.ts</string>
1037 <key>begin</key>
1038 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{)</string>
1039 <key>end</key>
1040 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1041 <key>patterns</key>
1042 <array>
1043 <dict>
1044 <key>include</key>
1045 <string>#object-binding-pattern</string>
1046 </dict>
1047 <dict>
1048 <key>include</key>
1049 <string>#type-annotation</string>
1050 </dict>
1051 <dict>
1052 <key>include</key>
1053 <string>#comment</string>
1054 </dict>
1055 </array>
1056 </dict>
1057 <dict>
1058 <key>name</key>
1059 <string>meta.array-binding-pattern-variable.ts</string>
1060 <key>begin</key>
1061 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[)</string>
1062 <key>end</key>
1063 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1064 <key>patterns</key>
1065 <array>
1066 <dict>
1067 <key>include</key>
1068 <string>#array-binding-pattern</string>
1069 </dict>
1070 <dict>
1071 <key>include</key>
1072 <string>#type-annotation</string>
1073 </dict>
1074 <dict>
1075 <key>include</key>
1076 <string>#comment</string>
1077 </dict>
1078 </array>
1079 </dict>
1080 </array>
1081 </dict>
1082 <key>destructuring-const</key>
1083 <dict>
1084 <key>patterns</key>
1085 <array>
1086 <dict>
1087 <key>name</key>
1088 <string>meta.object-binding-pattern-variable.ts</string>
1089 <key>begin</key>
1090 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{)</string>
1091 <key>end</key>
1092 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1093 <key>patterns</key>
1094 <array>
1095 <dict>
1096 <key>include</key>
1097 <string>#object-binding-pattern-const</string>
1098 </dict>
1099 <dict>
1100 <key>include</key>
1101 <string>#type-annotation</string>
1102 </dict>
1103 <dict>
1104 <key>include</key>
1105 <string>#comment</string>
1106 </dict>
1107 </array>
1108 </dict>
1109 <dict>
1110 <key>name</key>
1111 <string>meta.array-binding-pattern-variable.ts</string>
1112 <key>begin</key>
1113 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[)</string>
1114 <key>end</key>
1115 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1116 <key>patterns</key>
1117 <array>
1118 <dict>
1119 <key>include</key>
1120 <string>#array-binding-pattern-const</string>
1121 </dict>
1122 <dict>
1123 <key>include</key>
1124 <string>#type-annotation</string>
1125 </dict>
1126 <dict>
1127 <key>include</key>
1128 <string>#comment</string>
1129 </dict>
1130 </array>
1131 </dict>
1132 </array>
1133 </dict>
1134 <key>object-binding-element</key>
1135 <dict>
1136 <key>patterns</key>
1137 <array>
1138 <dict>
1139 <key>include</key>
1140 <string>#comment</string>
1141 </dict>
1142 <dict>
1143 <key>begin</key>
1144 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1145 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1146 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1147 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1148 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1149 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1150 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1151 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1152 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1153)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1154 <key>end</key>
1155 <string>(?=,|\})</string>
1156 <key>patterns</key>
1157 <array>
1158 <dict>
1159 <key>include</key>
1160 <string>#object-binding-element-propertyName</string>
1161 </dict>
1162 <dict>
1163 <key>include</key>
1164 <string>#binding-element</string>
1165 </dict>
1166 </array>
1167 </dict>
1168 <dict>
1169 <key>include</key>
1170 <string>#object-binding-pattern</string>
1171 </dict>
1172 <dict>
1173 <key>include</key>
1174 <string>#destructuring-variable-rest</string>
1175 </dict>
1176 <dict>
1177 <key>include</key>
1178 <string>#variable-initializer</string>
1179 </dict>
1180 <dict>
1181 <key>include</key>
1182 <string>#punctuation-comma</string>
1183 </dict>
1184 </array>
1185 </dict>
1186 <key>object-binding-element-const</key>
1187 <dict>
1188 <key>patterns</key>
1189 <array>
1190 <dict>
1191 <key>include</key>
1192 <string>#comment</string>
1193 </dict>
1194 <dict>
1195 <key>begin</key>
1196 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1197 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1198 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1199 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1200 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1201 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1202 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1203 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1204 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1205)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1206 <key>end</key>
1207 <string>(?=,|\})</string>
1208 <key>patterns</key>
1209 <array>
1210 <dict>
1211 <key>include</key>
1212 <string>#object-binding-element-propertyName</string>
1213 </dict>
1214 <dict>
1215 <key>include</key>
1216 <string>#binding-element-const</string>
1217 </dict>
1218 </array>
1219 </dict>
1220 <dict>
1221 <key>include</key>
1222 <string>#object-binding-pattern-const</string>
1223 </dict>
1224 <dict>
1225 <key>include</key>
1226 <string>#destructuring-variable-rest-const</string>
1227 </dict>
1228 <dict>
1229 <key>include</key>
1230 <string>#variable-initializer</string>
1231 </dict>
1232 <dict>
1233 <key>include</key>
1234 <string>#punctuation-comma</string>
1235 </dict>
1236 </array>
1237 </dict>
1238 <key>object-binding-element-propertyName</key>
1239 <dict>
1240 <key>begin</key>
1241 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1242 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1243 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1244 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1245 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1246 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1247 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1248 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1249 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1250)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1251 <key>end</key>
1252 <string>(:)</string>
1253 <key>endCaptures</key>
1254 <dict>
1255 <key>0</key>
1256 <dict>
1257 <key>name</key>
1258 <string>punctuation.destructuring.ts</string>
1259 </dict>
1260 </dict>
1261 <key>patterns</key>
1262 <array>
1263 <dict>
1264 <key>include</key>
1265 <string>#string</string>
1266 </dict>
1267 <dict>
1268 <key>include</key>
1269 <string>#array-literal</string>
1270 </dict>
1271 <dict>
1272 <key>include</key>
1273 <string>#numeric-literal</string>
1274 </dict>
1275 <dict>
1276 <key>name</key>
1277 <string>variable.object.property.ts</string>
1278 <key>match</key>
1279 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
1280 </dict>
1281 </array>
1282 </dict>
1283 <key>binding-element</key>
1284 <dict>
1285 <key>patterns</key>
1286 <array>
1287 <dict>
1288 <key>include</key>
1289 <string>#comment</string>
1290 </dict>
1291 <dict>
1292 <key>include</key>
1293 <string>#string</string>
1294 </dict>
1295 <dict>
1296 <key>include</key>
1297 <string>#numeric-literal</string>
1298 </dict>
1299 <dict>
1300 <key>include</key>
1301 <string>#regex</string>
1302 </dict>
1303 <dict>
1304 <key>include</key>
1305 <string>#object-binding-pattern</string>
1306 </dict>
1307 <dict>
1308 <key>include</key>
1309 <string>#array-binding-pattern</string>
1310 </dict>
1311 <dict>
1312 <key>include</key>
1313 <string>#destructuring-variable-rest</string>
1314 </dict>
1315 <dict>
1316 <key>include</key>
1317 <string>#variable-initializer</string>
1318 </dict>
1319 </array>
1320 </dict>
1321 <key>binding-element-const</key>
1322 <dict>
1323 <key>patterns</key>
1324 <array>
1325 <dict>
1326 <key>include</key>
1327 <string>#comment</string>
1328 </dict>
1329 <dict>
1330 <key>include</key>
1331 <string>#string</string>
1332 </dict>
1333 <dict>
1334 <key>include</key>
1335 <string>#numeric-literal</string>
1336 </dict>
1337 <dict>
1338 <key>include</key>
1339 <string>#regex</string>
1340 </dict>
1341 <dict>
1342 <key>include</key>
1343 <string>#object-binding-pattern-const</string>
1344 </dict>
1345 <dict>
1346 <key>include</key>
1347 <string>#array-binding-pattern-const</string>
1348 </dict>
1349 <dict>
1350 <key>include</key>
1351 <string>#destructuring-variable-rest-const</string>
1352 </dict>
1353 <dict>
1354 <key>include</key>
1355 <string>#variable-initializer</string>
1356 </dict>
1357 </array>
1358 </dict>
1359 <key>destructuring-variable-rest</key>
1360 <dict>
1361 <key>match</key>
1362 <string>(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>
1363 <key>captures</key>
1364 <dict>
1365 <key>1</key>
1366 <dict>
1367 <key>name</key>
1368 <string>keyword.operator.rest.ts</string>
1369 </dict>
1370 <key>2</key>
1371 <dict>
1372 <key>name</key>
1373 <string>meta.definition.variable.ts variable.other.readwrite.ts</string>
1374 </dict>
1375 </dict>
1376 </dict>
1377 <key>destructuring-variable-rest-const</key>
1378 <dict>
1379 <key>match</key>
1380 <string>(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>
1381 <key>captures</key>
1382 <dict>
1383 <key>1</key>
1384 <dict>
1385 <key>name</key>
1386 <string>keyword.operator.rest.ts</string>
1387 </dict>
1388 <key>2</key>
1389 <dict>
1390 <key>name</key>
1391 <string>meta.definition.variable.ts variable.other.constant.ts</string>
1392 </dict>
1393 </dict>
1394 </dict>
1395 <key>object-binding-pattern</key>
1396 <dict>
1397 <key>begin</key>
1398 <string>(?:(\.\.\.)\s*)?(\{)</string>
1399 <key>beginCaptures</key>
1400 <dict>
1401 <key>1</key>
1402 <dict>
1403 <key>name</key>
1404 <string>keyword.operator.rest.ts</string>
1405 </dict>
1406 <key>2</key>
1407 <dict>
1408 <key>name</key>
1409 <string>punctuation.definition.binding-pattern.object.ts</string>
1410 </dict>
1411 </dict>
1412 <key>end</key>
1413 <string>\}</string>
1414 <key>endCaptures</key>
1415 <dict>
1416 <key>0</key>
1417 <dict>
1418 <key>name</key>
1419 <string>punctuation.definition.binding-pattern.object.ts</string>
1420 </dict>
1421 </dict>
1422 <key>patterns</key>
1423 <array>
1424 <dict>
1425 <key>include</key>
1426 <string>#object-binding-element</string>
1427 </dict>
1428 </array>
1429 </dict>
1430 <key>object-binding-pattern-const</key>
1431 <dict>
1432 <key>begin</key>
1433 <string>(?:(\.\.\.)\s*)?(\{)</string>
1434 <key>beginCaptures</key>
1435 <dict>
1436 <key>1</key>
1437 <dict>
1438 <key>name</key>
1439 <string>keyword.operator.rest.ts</string>
1440 </dict>
1441 <key>2</key>
1442 <dict>
1443 <key>name</key>
1444 <string>punctuation.definition.binding-pattern.object.ts</string>
1445 </dict>
1446 </dict>
1447 <key>end</key>
1448 <string>\}</string>
1449 <key>endCaptures</key>
1450 <dict>
1451 <key>0</key>
1452 <dict>
1453 <key>name</key>
1454 <string>punctuation.definition.binding-pattern.object.ts</string>
1455 </dict>
1456 </dict>
1457 <key>patterns</key>
1458 <array>
1459 <dict>
1460 <key>include</key>
1461 <string>#object-binding-element-const</string>
1462 </dict>
1463 </array>
1464 </dict>
1465 <key>array-binding-pattern</key>
1466 <dict>
1467 <key>begin</key>
1468 <string>(?:(\.\.\.)\s*)?(\[)</string>
1469 <key>beginCaptures</key>
1470 <dict>
1471 <key>1</key>
1472 <dict>
1473 <key>name</key>
1474 <string>keyword.operator.rest.ts</string>
1475 </dict>
1476 <key>2</key>
1477 <dict>
1478 <key>name</key>
1479 <string>punctuation.definition.binding-pattern.array.ts</string>
1480 </dict>
1481 </dict>
1482 <key>end</key>
1483 <string>\]</string>
1484 <key>endCaptures</key>
1485 <dict>
1486 <key>0</key>
1487 <dict>
1488 <key>name</key>
1489 <string>punctuation.definition.binding-pattern.array.ts</string>
1490 </dict>
1491 </dict>
1492 <key>patterns</key>
1493 <array>
1494 <dict>
1495 <key>include</key>
1496 <string>#binding-element</string>
1497 </dict>
1498 <dict>
1499 <key>include</key>
1500 <string>#punctuation-comma</string>
1501 </dict>
1502 </array>
1503 </dict>
1504 <key>array-binding-pattern-const</key>
1505 <dict>
1506 <key>begin</key>
1507 <string>(?:(\.\.\.)\s*)?(\[)</string>
1508 <key>beginCaptures</key>
1509 <dict>
1510 <key>1</key>
1511 <dict>
1512 <key>name</key>
1513 <string>keyword.operator.rest.ts</string>
1514 </dict>
1515 <key>2</key>
1516 <dict>
1517 <key>name</key>
1518 <string>punctuation.definition.binding-pattern.array.ts</string>
1519 </dict>
1520 </dict>
1521 <key>end</key>
1522 <string>\]</string>
1523 <key>endCaptures</key>
1524 <dict>
1525 <key>0</key>
1526 <dict>
1527 <key>name</key>
1528 <string>punctuation.definition.binding-pattern.array.ts</string>
1529 </dict>
1530 </dict>
1531 <key>patterns</key>
1532 <array>
1533 <dict>
1534 <key>include</key>
1535 <string>#binding-element-const</string>
1536 </dict>
1537 <dict>
1538 <key>include</key>
1539 <string>#punctuation-comma</string>
1540 </dict>
1541 </array>
1542 </dict>
1543 <key>parameter-name</key>
1544 <dict>
1545 <key>patterns</key>
1546 <array>
1547 <dict>
1548 <key>match</key>
1549 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+)</string>
1550 <key>captures</key>
1551 <dict>
1552 <key>1</key>
1553 <dict>
1554 <key>name</key>
1555 <string>storage.modifier.ts</string>
1556 </dict>
1557 </dict>
1558 </dict>
1559 <dict>
1560 <key>match</key>
1561 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
1562# function assignment |
1563(=\s*(
1564 ((async\s+)?(
1565 (function\s*[(&lt;*]) |
1566 (function\s+) |
1567 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
1568 )) |
1569 ((async\s*)?(
1570 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1571 # sure shot arrow functions even if =&gt; is on new line
1572(
1573 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
1574 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
1575 (
1576 ([)]\s*:) | # ():
1577 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1578 )
1579) |
1580
1581# arrow function possible to detect only with =&gt; on same line
1582(
1583 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
1584 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1585 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1586 \s*=&gt; # arrow operator
1587)
1588 ))
1589)) |
1590# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
1591(:\s*(
1592 (&lt;) |
1593 ([(]\s*(
1594 ([)]) |
1595 (\.\.\.) |
1596 ([_$[:alnum:]]+\s*(
1597 ([:,?=])|
1598 ([)]\s*=&gt;)
1599 ))
1600 ))
1601)) |
1602(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
1603(:\s*((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
1604(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
1605 ((async\s+)?(
1606 (function\s*[(&lt;*]) |
1607 (function\s+) |
1608 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
1609 )) |
1610 ((async\s*)?(
1611 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1612 # sure shot arrow functions even if =&gt; is on new line
1613(
1614 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
1615 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
1616 (
1617 ([)]\s*:) | # ():
1618 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1619 )
1620) |
1621
1622# arrow function possible to detect only with =&gt; on same line
1623(
1624 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
1625 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1626 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1627 \s*=&gt; # arrow operator
1628)
1629 ))
1630)))</string>
1631 <key>captures</key>
1632 <dict>
1633 <key>1</key>
1634 <dict>
1635 <key>name</key>
1636 <string>storage.modifier.ts</string>
1637 </dict>
1638 <key>2</key>
1639 <dict>
1640 <key>name</key>
1641 <string>keyword.operator.rest.ts</string>
1642 </dict>
1643 <key>3</key>
1644 <dict>
1645 <key>name</key>
1646 <string>entity.name.function.ts variable.language.this.ts</string>
1647 </dict>
1648 <key>4</key>
1649 <dict>
1650 <key>name</key>
1651 <string>entity.name.function.ts</string>
1652 </dict>
1653 <key>5</key>
1654 <dict>
1655 <key>name</key>
1656 <string>keyword.operator.optional.ts</string>
1657 </dict>
1658 </dict>
1659 </dict>
1660 <dict>
1661 <key>match</key>
1662 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)</string>
1663 <key>captures</key>
1664 <dict>
1665 <key>1</key>
1666 <dict>
1667 <key>name</key>
1668 <string>storage.modifier.ts</string>
1669 </dict>
1670 <key>2</key>
1671 <dict>
1672 <key>name</key>
1673 <string>keyword.operator.rest.ts</string>
1674 </dict>
1675 <key>3</key>
1676 <dict>
1677 <key>name</key>
1678 <string>variable.parameter.ts variable.language.this.ts</string>
1679 </dict>
1680 <key>4</key>
1681 <dict>
1682 <key>name</key>
1683 <string>variable.parameter.ts</string>
1684 </dict>
1685 <key>5</key>
1686 <dict>
1687 <key>name</key>
1688 <string>keyword.operator.optional.ts</string>
1689 </dict>
1690 </dict>
1691 </dict>
1692 </array>
1693 </dict>
1694 <key>destructuring-parameter</key>
1695 <dict>
1696 <key>patterns</key>
1697 <array>
1698 <dict>
1699 <key>name</key>
1700 <string>meta.parameter.object-binding-pattern.ts</string>
1701 <key>begin</key>
1702 <string>(?&lt;!=|:)\s*(?:(\.\.\.)\s*)?(\{)</string>
1703 <key>beginCaptures</key>
1704 <dict>
1705 <key>1</key>
1706 <dict>
1707 <key>name</key>
1708 <string>keyword.operator.rest.ts</string>
1709 </dict>
1710 <key>2</key>
1711 <dict>
1712 <key>name</key>
1713 <string>punctuation.definition.binding-pattern.object.ts</string>
1714 </dict>
1715 </dict>
1716 <key>end</key>
1717 <string>\}</string>
1718 <key>endCaptures</key>
1719 <dict>
1720 <key>0</key>
1721 <dict>
1722 <key>name</key>
1723 <string>punctuation.definition.binding-pattern.object.ts</string>
1724 </dict>
1725 </dict>
1726 <key>patterns</key>
1727 <array>
1728 <dict>
1729 <key>include</key>
1730 <string>#parameter-object-binding-element</string>
1731 </dict>
1732 </array>
1733 </dict>
1734 <dict>
1735 <key>name</key>
1736 <string>meta.paramter.array-binding-pattern.ts</string>
1737 <key>begin</key>
1738 <string>(?&lt;!=|:)\s*(?:(\.\.\.)\s*)?(\[)</string>
1739 <key>beginCaptures</key>
1740 <dict>
1741 <key>1</key>
1742 <dict>
1743 <key>name</key>
1744 <string>keyword.operator.rest.ts</string>
1745 </dict>
1746 <key>2</key>
1747 <dict>
1748 <key>name</key>
1749 <string>punctuation.definition.binding-pattern.array.ts</string>
1750 </dict>
1751 </dict>
1752 <key>end</key>
1753 <string>\]</string>
1754 <key>endCaptures</key>
1755 <dict>
1756 <key>0</key>
1757 <dict>
1758 <key>name</key>
1759 <string>punctuation.definition.binding-pattern.array.ts</string>
1760 </dict>
1761 </dict>
1762 <key>patterns</key>
1763 <array>
1764 <dict>
1765 <key>include</key>
1766 <string>#parameter-binding-element</string>
1767 </dict>
1768 <dict>
1769 <key>include</key>
1770 <string>#punctuation-comma</string>
1771 </dict>
1772 </array>
1773 </dict>
1774 </array>
1775 </dict>
1776 <key>parameter-object-binding-element</key>
1777 <dict>
1778 <key>patterns</key>
1779 <array>
1780 <dict>
1781 <key>include</key>
1782 <string>#comment</string>
1783 </dict>
1784 <dict>
1785 <key>begin</key>
1786 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1787 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1788 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1789 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1790 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1791 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1792 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1793 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1794 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1795)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1796 <key>end</key>
1797 <string>(?=,|\})</string>
1798 <key>patterns</key>
1799 <array>
1800 <dict>
1801 <key>include</key>
1802 <string>#object-binding-element-propertyName</string>
1803 </dict>
1804 <dict>
1805 <key>include</key>
1806 <string>#parameter-binding-element</string>
1807 </dict>
1808 <dict>
1809 <key>include</key>
1810 <string>#paren-expression</string>
1811 </dict>
1812 </array>
1813 </dict>
1814 <dict>
1815 <key>include</key>
1816 <string>#parameter-object-binding-pattern</string>
1817 </dict>
1818 <dict>
1819 <key>include</key>
1820 <string>#destructuring-parameter-rest</string>
1821 </dict>
1822 <dict>
1823 <key>include</key>
1824 <string>#variable-initializer</string>
1825 </dict>
1826 <dict>
1827 <key>include</key>
1828 <string>#punctuation-comma</string>
1829 </dict>
1830 </array>
1831 </dict>
1832 <key>parameter-binding-element</key>
1833 <dict>
1834 <key>patterns</key>
1835 <array>
1836 <dict>
1837 <key>include</key>
1838 <string>#comment</string>
1839 </dict>
1840 <dict>
1841 <key>include</key>
1842 <string>#string</string>
1843 </dict>
1844 <dict>
1845 <key>include</key>
1846 <string>#numeric-literal</string>
1847 </dict>
1848 <dict>
1849 <key>include</key>
1850 <string>#regex</string>
1851 </dict>
1852 <dict>
1853 <key>include</key>
1854 <string>#parameter-object-binding-pattern</string>
1855 </dict>
1856 <dict>
1857 <key>include</key>
1858 <string>#parameter-array-binding-pattern</string>
1859 </dict>
1860 <dict>
1861 <key>include</key>
1862 <string>#destructuring-parameter-rest</string>
1863 </dict>
1864 <dict>
1865 <key>include</key>
1866 <string>#variable-initializer</string>
1867 </dict>
1868 </array>
1869 </dict>
1870 <key>destructuring-parameter-rest</key>
1871 <dict>
1872 <key>match</key>
1873 <string>(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>
1874 <key>captures</key>
1875 <dict>
1876 <key>1</key>
1877 <dict>
1878 <key>name</key>
1879 <string>keyword.operator.rest.ts</string>
1880 </dict>
1881 <key>2</key>
1882 <dict>
1883 <key>name</key>
1884 <string>variable.parameter.ts</string>
1885 </dict>
1886 </dict>
1887 </dict>
1888 <key>parameter-object-binding-pattern</key>
1889 <dict>
1890 <key>begin</key>
1891 <string>(?:(\.\.\.)\s*)?(\{)</string>
1892 <key>beginCaptures</key>
1893 <dict>
1894 <key>1</key>
1895 <dict>
1896 <key>name</key>
1897 <string>keyword.operator.rest.ts</string>
1898 </dict>
1899 <key>2</key>
1900 <dict>
1901 <key>name</key>
1902 <string>punctuation.definition.binding-pattern.object.ts</string>
1903 </dict>
1904 </dict>
1905 <key>end</key>
1906 <string>\}</string>
1907 <key>endCaptures</key>
1908 <dict>
1909 <key>0</key>
1910 <dict>
1911 <key>name</key>
1912 <string>punctuation.definition.binding-pattern.object.ts</string>
1913 </dict>
1914 </dict>
1915 <key>patterns</key>
1916 <array>
1917 <dict>
1918 <key>include</key>
1919 <string>#parameter-object-binding-element</string>
1920 </dict>
1921 </array>
1922 </dict>
1923 <key>parameter-array-binding-pattern</key>
1924 <dict>
1925 <key>begin</key>
1926 <string>(?:(\.\.\.)\s*)?(\[)</string>
1927 <key>beginCaptures</key>
1928 <dict>
1929 <key>1</key>
1930 <dict>
1931 <key>name</key>
1932 <string>keyword.operator.rest.ts</string>
1933 </dict>
1934 <key>2</key>
1935 <dict>
1936 <key>name</key>
1937 <string>punctuation.definition.binding-pattern.array.ts</string>
1938 </dict>
1939 </dict>
1940 <key>end</key>
1941 <string>\]</string>
1942 <key>endCaptures</key>
1943 <dict>
1944 <key>0</key>
1945 <dict>
1946 <key>name</key>
1947 <string>punctuation.definition.binding-pattern.array.ts</string>
1948 </dict>
1949 </dict>
1950 <key>patterns</key>
1951 <array>
1952 <dict>
1953 <key>include</key>
1954 <string>#parameter-binding-element</string>
1955 </dict>
1956 <dict>
1957 <key>include</key>
1958 <string>#punctuation-comma</string>
1959 </dict>
1960 </array>
1961 </dict>
1962 <key>field-declaration</key>
1963 <dict>
1964 <key>name</key>
1965 <string>meta.field.declaration.ts</string>
1966 <key>begin</key>
1967 <string>(?x)(?&lt;!\()(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)\s+)?(?=\s*((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1968 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1969 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1970 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1971 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1972 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1973 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1974 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1975 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1976)(?!\$))|(\#?[_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(?:(?:(\?)|(\!))\s*)?(=|:|;|,|\}|$))</string>
1977 <key>beginCaptures</key>
1978 <dict>
1979 <key>1</key>
1980 <dict>
1981 <key>name</key>
1982 <string>storage.modifier.ts</string>
1983 </dict>
1984 </dict>
1985 <key>end</key>
1986 <string>(?x)(?=\}|;|,|$|(^(?!\s*((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1987 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1988 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1989 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1990 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1991 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1992 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1993 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1994 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1995)(?!\$))|(\#?[_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(?:(?:(\?)|(\!))\s*)?(=|:|;|,|$))))|(?&lt;=\})</string>
1996 <key>patterns</key>
1997 <array>
1998 <dict>
1999 <key>include</key>
2000 <string>#variable-initializer</string>
2001 </dict>
2002 <dict>
2003 <key>include</key>
2004 <string>#type-annotation</string>
2005 </dict>
2006 <dict>
2007 <key>include</key>
2008 <string>#string</string>
2009 </dict>
2010 <dict>
2011 <key>include</key>
2012 <string>#array-literal</string>
2013 </dict>
2014 <dict>
2015 <key>include</key>
2016 <string>#numeric-literal</string>
2017 </dict>
2018 <dict>
2019 <key>include</key>
2020 <string>#comment</string>
2021 </dict>
2022 <dict>
2023 <key>match</key>
2024 <string>(?x)(\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\?)|(\!))?(?=\s*\s*
2025# function assignment |
2026(=\s*(
2027 ((async\s+)?(
2028 (function\s*[(&lt;*]) |
2029 (function\s+) |
2030 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
2031 )) |
2032 ((async\s*)?(
2033 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
2034 # sure shot arrow functions even if =&gt; is on new line
2035(
2036 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
2037 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
2038 (
2039 ([)]\s*:) | # ():
2040 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
2041 )
2042) |
2043
2044# arrow function possible to detect only with =&gt; on same line
2045(
2046 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
2047 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2048 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2049 \s*=&gt; # arrow operator
2050)
2051 ))
2052)) |
2053# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
2054(:\s*(
2055 (&lt;) |
2056 ([(]\s*(
2057 ([)]) |
2058 (\.\.\.) |
2059 ([_$[:alnum:]]+\s*(
2060 ([:,?=])|
2061 ([)]\s*=&gt;)
2062 ))
2063 ))
2064)) |
2065(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
2066(:\s*((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
2067(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
2068 ((async\s+)?(
2069 (function\s*[(&lt;*]) |
2070 (function\s+) |
2071 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
2072 )) |
2073 ((async\s*)?(
2074 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
2075 # sure shot arrow functions even if =&gt; is on new line
2076(
2077 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
2078 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
2079 (
2080 ([)]\s*:) | # ():
2081 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
2082 )
2083) |
2084
2085# arrow function possible to detect only with =&gt; on same line
2086(
2087 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
2088 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2089 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2090 \s*=&gt; # arrow operator
2091)
2092 ))
2093)))</string>
2094 <key>captures</key>
2095 <dict>
2096 <key>1</key>
2097 <dict>
2098 <key>name</key>
2099 <string>meta.definition.property.ts entity.name.function.ts</string>
2100 </dict>
2101 <key>2</key>
2102 <dict>
2103 <key>name</key>
2104 <string>keyword.operator.optional.ts</string>
2105 </dict>
2106 <key>3</key>
2107 <dict>
2108 <key>name</key>
2109 <string>keyword.operator.definiteassignment.ts</string>
2110 </dict>
2111 </dict>
2112 </dict>
2113 <dict>
2114 <key>name</key>
2115 <string>meta.definition.property.ts variable.object.property.ts</string>
2116 <key>match</key>
2117 <string>\#?[_$[:alpha:]][_$[:alnum:]]*</string>
2118 </dict>
2119 <dict>
2120 <key>name</key>
2121 <string>keyword.operator.optional.ts</string>
2122 <key>match</key>
2123 <string>\?</string>
2124 </dict>
2125 <dict>
2126 <key>name</key>
2127 <string>keyword.operator.definiteassignment.ts</string>
2128 <key>match</key>
2129 <string>\!</string>
2130 </dict>
2131 </array>
2132 </dict>
2133 <key>variable-initializer</key>
2134 <dict>
2135 <key>patterns</key>
2136 <array>
2137 <dict>
2138 <key>begin</key>
2139 <string>(?&lt;!=|!)(=)(?!=)(?=\s*\S)(?!\s*.*=&gt;\s*$)</string>
2140 <key>beginCaptures</key>
2141 <dict>
2142 <key>1</key>
2143 <dict>
2144 <key>name</key>
2145 <string>keyword.operator.assignment.ts</string>
2146 </dict>
2147 </dict>
2148 <key>end</key>
2149 <string>(?=$|^|[,);}\]]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
2150 <key>patterns</key>
2151 <array>
2152 <dict>
2153 <key>include</key>
2154 <string>#expression</string>
2155 </dict>
2156 </array>
2157 </dict>
2158 <dict>
2159 <key>begin</key>
2160 <string>(?&lt;!=|!)(=)(?!=)</string>
2161 <key>beginCaptures</key>
2162 <dict>
2163 <key>1</key>
2164 <dict>
2165 <key>name</key>
2166 <string>keyword.operator.assignment.ts</string>
2167 </dict>
2168 </dict>
2169 <key>end</key>
2170 <string>(?=[,);}\]]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))|(?=^\s*$)|(?&lt;![\|\&amp;\+\-\*\/])(?&lt;=\S)(?&lt;!=)(?=\s*$)</string>
2171 <key>patterns</key>
2172 <array>
2173 <dict>
2174 <key>include</key>
2175 <string>#expression</string>
2176 </dict>
2177 </array>
2178 </dict>
2179 </array>
2180 </dict>
2181 <key>function-declaration</key>
2182 <dict>
2183 <key>name</key>
2184 <string>meta.function.ts</string>
2185 <key>begin</key>
2186 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?&lt;=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*</string>
2187 <key>beginCaptures</key>
2188 <dict>
2189 <key>1</key>
2190 <dict>
2191 <key>name</key>
2192 <string>keyword.control.export.ts</string>
2193 </dict>
2194 <key>2</key>
2195 <dict>
2196 <key>name</key>
2197 <string>storage.modifier.ts</string>
2198 </dict>
2199 <key>3</key>
2200 <dict>
2201 <key>name</key>
2202 <string>storage.modifier.async.ts</string>
2203 </dict>
2204 <key>4</key>
2205 <dict>
2206 <key>name</key>
2207 <string>storage.type.function.ts</string>
2208 </dict>
2209 <key>5</key>
2210 <dict>
2211 <key>name</key>
2212 <string>keyword.generator.asterisk.ts</string>
2213 </dict>
2214 <key>6</key>
2215 <dict>
2216 <key>name</key>
2217 <string>meta.definition.function.ts entity.name.function.ts</string>
2218 </dict>
2219 </dict>
2220 <key>end</key>
2221 <string>(?=;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|(?&lt;=\})</string>
2222 <key>patterns</key>
2223 <array>
2224 <dict>
2225 <key>include</key>
2226 <string>#function-name</string>
2227 </dict>
2228 <dict>
2229 <key>include</key>
2230 <string>#function-body</string>
2231 </dict>
2232 </array>
2233 </dict>
2234 <key>function-expression</key>
2235 <dict>
2236 <key>name</key>
2237 <string>meta.function.expression.ts</string>
2238 <key>begin</key>
2239 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?&lt;=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*</string>
2240 <key>beginCaptures</key>
2241 <dict>
2242 <key>1</key>
2243 <dict>
2244 <key>name</key>
2245 <string>storage.modifier.async.ts</string>
2246 </dict>
2247 <key>2</key>
2248 <dict>
2249 <key>name</key>
2250 <string>storage.type.function.ts</string>
2251 </dict>
2252 <key>3</key>
2253 <dict>
2254 <key>name</key>
2255 <string>keyword.generator.asterisk.ts</string>
2256 </dict>
2257 <key>4</key>
2258 <dict>
2259 <key>name</key>
2260 <string>meta.definition.function.ts entity.name.function.ts</string>
2261 </dict>
2262 </dict>
2263 <key>end</key>
2264 <string>(?=;)|(?&lt;=\})</string>
2265 <key>patterns</key>
2266 <array>
2267 <dict>
2268 <key>include</key>
2269 <string>#function-name</string>
2270 </dict>
2271 <dict>
2272 <key>include</key>
2273 <string>#single-line-comment-consuming-line-ending</string>
2274 </dict>
2275 <dict>
2276 <key>include</key>
2277 <string>#function-body</string>
2278 </dict>
2279 </array>
2280 </dict>
2281 <key>function-name</key>
2282 <dict>
2283 <key>name</key>
2284 <string>meta.definition.function.ts entity.name.function.ts</string>
2285 <key>match</key>
2286 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
2287 </dict>
2288 <key>function-body</key>
2289 <dict>
2290 <key>patterns</key>
2291 <array>
2292 <dict>
2293 <key>include</key>
2294 <string>#comment</string>
2295 </dict>
2296 <dict>
2297 <key>include</key>
2298 <string>#type-parameters</string>
2299 </dict>
2300 <dict>
2301 <key>include</key>
2302 <string>#function-parameters</string>
2303 </dict>
2304 <dict>
2305 <key>include</key>
2306 <string>#return-type</string>
2307 </dict>
2308 <dict>
2309 <key>include</key>
2310 <string>#type-function-return-type</string>
2311 </dict>
2312 <dict>
2313 <key>include</key>
2314 <string>#decl-block</string>
2315 </dict>
2316 <dict>
2317 <key>name</key>
2318 <string>keyword.generator.asterisk.ts</string>
2319 <key>match</key>
2320 <string>\*</string>
2321 </dict>
2322 </array>
2323 </dict>
2324 <key>method-declaration</key>
2325 <dict>
2326 <key>patterns</key>
2327 <array>
2328 <dict>
2329 <key>name</key>
2330 <string>meta.method.declaration.ts</string>
2331 <key>begin</key>
2332 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\s*\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
2333 <key>beginCaptures</key>
2334 <dict>
2335 <key>1</key>
2336 <dict>
2337 <key>name</key>
2338 <string>storage.modifier.ts</string>
2339 </dict>
2340 <key>2</key>
2341 <dict>
2342 <key>name</key>
2343 <string>storage.modifier.ts</string>
2344 </dict>
2345 <key>3</key>
2346 <dict>
2347 <key>name</key>
2348 <string>storage.modifier.ts</string>
2349 </dict>
2350 <key>4</key>
2351 <dict>
2352 <key>name</key>
2353 <string>storage.modifier.async.ts</string>
2354 </dict>
2355 <key>5</key>
2356 <dict>
2357 <key>name</key>
2358 <string>storage.type.ts</string>
2359 </dict>
2360 </dict>
2361 <key>end</key>
2362 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
2363 <key>patterns</key>
2364 <array>
2365 <dict>
2366 <key>include</key>
2367 <string>#method-declaration-name</string>
2368 </dict>
2369 <dict>
2370 <key>include</key>
2371 <string>#function-body</string>
2372 </dict>
2373 </array>
2374 </dict>
2375 <dict>
2376 <key>name</key>
2377 <string>meta.method.declaration.ts</string>
2378 <key>begin</key>
2379 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\s*\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2380 <key>beginCaptures</key>
2381 <dict>
2382 <key>1</key>
2383 <dict>
2384 <key>name</key>
2385 <string>storage.modifier.ts</string>
2386 </dict>
2387 <key>2</key>
2388 <dict>
2389 <key>name</key>
2390 <string>storage.modifier.ts</string>
2391 </dict>
2392 <key>3</key>
2393 <dict>
2394 <key>name</key>
2395 <string>storage.modifier.ts</string>
2396 </dict>
2397 <key>4</key>
2398 <dict>
2399 <key>name</key>
2400 <string>storage.modifier.async.ts</string>
2401 </dict>
2402 <key>5</key>
2403 <dict>
2404 <key>name</key>
2405 <string>keyword.operator.new.ts</string>
2406 </dict>
2407 <key>6</key>
2408 <dict>
2409 <key>name</key>
2410 <string>keyword.generator.asterisk.ts</string>
2411 </dict>
2412 </dict>
2413 <key>end</key>
2414 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
2415 <key>patterns</key>
2416 <array>
2417 <dict>
2418 <key>include</key>
2419 <string>#method-declaration-name</string>
2420 </dict>
2421 <dict>
2422 <key>include</key>
2423 <string>#function-body</string>
2424 </dict>
2425 </array>
2426 </dict>
2427 <dict>
2428 <key>name</key>
2429 <string>meta.method.declaration.ts</string>
2430 <key>begin</key>
2431 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2432 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2433 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2434 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2435 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2436 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2437 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2438 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2439 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2440)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2441 <key>beginCaptures</key>
2442 <dict>
2443 <key>1</key>
2444 <dict>
2445 <key>name</key>
2446 <string>storage.modifier.ts</string>
2447 </dict>
2448 <key>2</key>
2449 <dict>
2450 <key>name</key>
2451 <string>storage.modifier.ts</string>
2452 </dict>
2453 <key>3</key>
2454 <dict>
2455 <key>name</key>
2456 <string>storage.modifier.ts</string>
2457 </dict>
2458 <key>4</key>
2459 <dict>
2460 <key>name</key>
2461 <string>storage.modifier.async.ts</string>
2462 </dict>
2463 <key>5</key>
2464 <dict>
2465 <key>name</key>
2466 <string>storage.type.property.ts</string>
2467 </dict>
2468 <key>6</key>
2469 <dict>
2470 <key>name</key>
2471 <string>keyword.generator.asterisk.ts</string>
2472 </dict>
2473 </dict>
2474 <key>end</key>
2475 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
2476 <key>patterns</key>
2477 <array>
2478 <dict>
2479 <key>include</key>
2480 <string>#method-declaration-name</string>
2481 </dict>
2482 <dict>
2483 <key>include</key>
2484 <string>#function-body</string>
2485 </dict>
2486 </array>
2487 </dict>
2488 </array>
2489 </dict>
2490 <key>object-literal-method-declaration</key>
2491 <dict>
2492 <key>name</key>
2493 <string>meta.method.declaration.ts</string>
2494 <key>begin</key>
2495 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2496 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2497 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2498 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2499 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2500 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2501 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2502 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2503 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2504)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2505 <key>beginCaptures</key>
2506 <dict>
2507 <key>1</key>
2508 <dict>
2509 <key>name</key>
2510 <string>storage.modifier.async.ts</string>
2511 </dict>
2512 <key>2</key>
2513 <dict>
2514 <key>name</key>
2515 <string>storage.type.property.ts</string>
2516 </dict>
2517 <key>3</key>
2518 <dict>
2519 <key>name</key>
2520 <string>keyword.generator.asterisk.ts</string>
2521 </dict>
2522 </dict>
2523 <key>end</key>
2524 <string>(?=\}|;|,)|(?&lt;=\})</string>
2525 <key>patterns</key>
2526 <array>
2527 <dict>
2528 <key>include</key>
2529 <string>#method-declaration-name</string>
2530 </dict>
2531 <dict>
2532 <key>include</key>
2533 <string>#function-body</string>
2534 </dict>
2535 <dict>
2536 <key>begin</key>
2537 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2538 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2539 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2540 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2541 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2542 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2543 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2544 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2545 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2546)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2547 <key>beginCaptures</key>
2548 <dict>
2549 <key>1</key>
2550 <dict>
2551 <key>name</key>
2552 <string>storage.modifier.async.ts</string>
2553 </dict>
2554 <key>2</key>
2555 <dict>
2556 <key>name</key>
2557 <string>storage.type.property.ts</string>
2558 </dict>
2559 <key>3</key>
2560 <dict>
2561 <key>name</key>
2562 <string>keyword.generator.asterisk.ts</string>
2563 </dict>
2564 </dict>
2565 <key>end</key>
2566 <string>(?=\(|\&lt;)</string>
2567 <key>patterns</key>
2568 <array>
2569 <dict>
2570 <key>include</key>
2571 <string>#method-declaration-name</string>
2572 </dict>
2573 </array>
2574 </dict>
2575 </array>
2576 </dict>
2577 <key>method-declaration-name</key>
2578 <dict>
2579 <key>begin</key>
2580 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2581 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2582 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2583 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2584 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2585 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2586 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2587 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2588 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2589)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??)\s*[\(\&lt;])</string>
2590 <key>end</key>
2591 <string>(?=\(|\&lt;)</string>
2592 <key>patterns</key>
2593 <array>
2594 <dict>
2595 <key>include</key>
2596 <string>#string</string>
2597 </dict>
2598 <dict>
2599 <key>include</key>
2600 <string>#array-literal</string>
2601 </dict>
2602 <dict>
2603 <key>include</key>
2604 <string>#numeric-literal</string>
2605 </dict>
2606 <dict>
2607 <key>name</key>
2608 <string>meta.definition.method.ts entity.name.function.ts</string>
2609 <key>match</key>
2610 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
2611 </dict>
2612 <dict>
2613 <key>name</key>
2614 <string>keyword.operator.optional.ts</string>
2615 <key>match</key>
2616 <string>\?</string>
2617 </dict>
2618 </array>
2619 </dict>
2620 <key>arrow-function</key>
2621 <dict>
2622 <key>patterns</key>
2623 <array>
2624 <dict>
2625 <key>name</key>
2626 <string>meta.arrow.ts</string>
2627 <key>match</key>
2628 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(\basync)\s+)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?==&gt;)</string>
2629 <key>captures</key>
2630 <dict>
2631 <key>1</key>
2632 <dict>
2633 <key>name</key>
2634 <string>storage.modifier.async.ts</string>
2635 </dict>
2636 <key>2</key>
2637 <dict>
2638 <key>name</key>
2639 <string>variable.parameter.ts</string>
2640 </dict>
2641 </dict>
2642 </dict>
2643 <dict>
2644 <key>name</key>
2645 <string>meta.arrow.ts</string>
2646 <key>begin</key>
2647 <string>(?x) (?:
2648 (?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(\basync)
2649)? ((?&lt;![})!\]])\s*
2650 (?=
2651 # sure shot arrow functions even if =&gt; is on new line
2652(
2653 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
2654 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
2655 (
2656 ([)]\s*:) | # ():
2657 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
2658 )
2659) |
2660
2661# arrow function possible to detect only with =&gt; on same line
2662(
2663 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
2664 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2665 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2666 \s*=&gt; # arrow operator
2667)
2668 )
2669)</string>
2670 <key>beginCaptures</key>
2671 <dict>
2672 <key>1</key>
2673 <dict>
2674 <key>name</key>
2675 <string>storage.modifier.async.ts</string>
2676 </dict>
2677 </dict>
2678 <key>end</key>
2679 <string>(?==&gt;|\{|(^\s*(export|function|class|interface|let|var|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|const|import|enum|namespace|module|type|abstract|declare)\s+))</string>
2680 <key>patterns</key>
2681 <array>
2682 <dict>
2683 <key>include</key>
2684 <string>#comment</string>
2685 </dict>
2686 <dict>
2687 <key>include</key>
2688 <string>#type-parameters</string>
2689 </dict>
2690 <dict>
2691 <key>include</key>
2692 <string>#function-parameters</string>
2693 </dict>
2694 <dict>
2695 <key>include</key>
2696 <string>#arrow-return-type</string>
2697 </dict>
2698 <dict>
2699 <key>include</key>
2700 <string>#possibly-arrow-return-type</string>
2701 </dict>
2702 </array>
2703 </dict>
2704 <dict>
2705 <key>name</key>
2706 <string>meta.arrow.ts</string>
2707 <key>begin</key>
2708 <string>=&gt;</string>
2709 <key>beginCaptures</key>
2710 <dict>
2711 <key>0</key>
2712 <dict>
2713 <key>name</key>
2714 <string>storage.type.function.arrow.ts</string>
2715 </dict>
2716 </dict>
2717 <key>end</key>
2718 <string>((?&lt;=\}|\S)(?&lt;!=&gt;)|((?!\{)(?=\S)))(?!\/[\/\*])</string>
2719 <key>patterns</key>
2720 <array>
2721 <dict>
2722 <key>include</key>
2723 <string>#single-line-comment-consuming-line-ending</string>
2724 </dict>
2725 <dict>
2726 <key>include</key>
2727 <string>#decl-block</string>
2728 </dict>
2729 <dict>
2730 <key>include</key>
2731 <string>#expression</string>
2732 </dict>
2733 </array>
2734 </dict>
2735 </array>
2736 </dict>
2737 <key>indexer-declaration</key>
2738 <dict>
2739 <key>name</key>
2740 <string>meta.indexer.declaration.ts</string>
2741 <key>begin</key>
2742 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)\s*)?\s*(\[)\s*([_$[:alpha:]][_$[:alnum:]]*)\s*(?=:)</string>
2743 <key>beginCaptures</key>
2744 <dict>
2745 <key>1</key>
2746 <dict>
2747 <key>name</key>
2748 <string>storage.modifier.ts</string>
2749 </dict>
2750 <key>2</key>
2751 <dict>
2752 <key>name</key>
2753 <string>meta.brace.square.ts</string>
2754 </dict>
2755 <key>3</key>
2756 <dict>
2757 <key>name</key>
2758 <string>variable.parameter.ts</string>
2759 </dict>
2760 </dict>
2761 <key>end</key>
2762 <string>(\])\s*(\?\s*)?|$</string>
2763 <key>endCaptures</key>
2764 <dict>
2765 <key>1</key>
2766 <dict>
2767 <key>name</key>
2768 <string>meta.brace.square.ts</string>
2769 </dict>
2770 <key>2</key>
2771 <dict>
2772 <key>name</key>
2773 <string>keyword.operator.optional.ts</string>
2774 </dict>
2775 </dict>
2776 <key>patterns</key>
2777 <array>
2778 <dict>
2779 <key>include</key>
2780 <string>#type-annotation</string>
2781 </dict>
2782 </array>
2783 </dict>
2784 <key>indexer-mapped-type-declaration</key>
2785 <dict>
2786 <key>name</key>
2787 <string>meta.indexer.mappedtype.declaration.ts</string>
2788 <key>begin</key>
2789 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))([+-])?(readonly)\s*)?\s*(\[)\s*([_$[:alpha:]][_$[:alnum:]]*)\s+(in)\s+</string>
2790 <key>beginCaptures</key>
2791 <dict>
2792 <key>1</key>
2793 <dict>
2794 <key>name</key>
2795 <string>keyword.operator.type.modifier.ts</string>
2796 </dict>
2797 <key>2</key>
2798 <dict>
2799 <key>name</key>
2800 <string>storage.modifier.ts</string>
2801 </dict>
2802 <key>3</key>
2803 <dict>
2804 <key>name</key>
2805 <string>meta.brace.square.ts</string>
2806 </dict>
2807 <key>4</key>
2808 <dict>
2809 <key>name</key>
2810 <string>entity.name.type.ts</string>
2811 </dict>
2812 <key>5</key>
2813 <dict>
2814 <key>name</key>
2815 <string>keyword.operator.expression.in.ts</string>
2816 </dict>
2817 </dict>
2818 <key>end</key>
2819 <string>(\])([+-])?\s*(\?\s*)?|$</string>
2820 <key>endCaptures</key>
2821 <dict>
2822 <key>1</key>
2823 <dict>
2824 <key>name</key>
2825 <string>meta.brace.square.ts</string>
2826 </dict>
2827 <key>2</key>
2828 <dict>
2829 <key>name</key>
2830 <string>keyword.operator.type.modifier.ts</string>
2831 </dict>
2832 <key>3</key>
2833 <dict>
2834 <key>name</key>
2835 <string>keyword.operator.optional.ts</string>
2836 </dict>
2837 </dict>
2838 <key>patterns</key>
2839 <array>
2840 <dict>
2841 <key>match</key>
2842 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as)\s+</string>
2843 <key>captures</key>
2844 <dict>
2845 <key>1</key>
2846 <dict>
2847 <key>name</key>
2848 <string>keyword.control.as.ts</string>
2849 </dict>
2850 </dict>
2851 </dict>
2852 <dict>
2853 <key>include</key>
2854 <string>#type</string>
2855 </dict>
2856 </array>
2857 </dict>
2858 <key>function-parameters</key>
2859 <dict>
2860 <key>name</key>
2861 <string>meta.parameters.ts</string>
2862 <key>begin</key>
2863 <string>\(</string>
2864 <key>beginCaptures</key>
2865 <dict>
2866 <key>0</key>
2867 <dict>
2868 <key>name</key>
2869 <string>punctuation.definition.parameters.begin.ts</string>
2870 </dict>
2871 </dict>
2872 <key>end</key>
2873 <string>\)</string>
2874 <key>endCaptures</key>
2875 <dict>
2876 <key>0</key>
2877 <dict>
2878 <key>name</key>
2879 <string>punctuation.definition.parameters.end.ts</string>
2880 </dict>
2881 </dict>
2882 <key>patterns</key>
2883 <array>
2884 <dict>
2885 <key>include</key>
2886 <string>#function-parameters-body</string>
2887 </dict>
2888 </array>
2889 </dict>
2890 <key>function-parameters-body</key>
2891 <dict>
2892 <key>patterns</key>
2893 <array>
2894 <dict>
2895 <key>include</key>
2896 <string>#comment</string>
2897 </dict>
2898 <dict>
2899 <key>include</key>
2900 <string>#string</string>
2901 </dict>
2902 <dict>
2903 <key>include</key>
2904 <string>#decorator</string>
2905 </dict>
2906 <dict>
2907 <key>include</key>
2908 <string>#destructuring-parameter</string>
2909 </dict>
2910 <dict>
2911 <key>include</key>
2912 <string>#parameter-name</string>
2913 </dict>
2914 <dict>
2915 <key>include</key>
2916 <string>#parameter-type-annotation</string>
2917 </dict>
2918 <dict>
2919 <key>include</key>
2920 <string>#variable-initializer</string>
2921 </dict>
2922 <dict>
2923 <key>name</key>
2924 <string>punctuation.separator.parameter.ts</string>
2925 <key>match</key>
2926 <string>,</string>
2927 </dict>
2928 </array>
2929 </dict>
2930 <key>class-declaration</key>
2931 <dict>
2932 <key>name</key>
2933 <string>meta.class.ts</string>
2934 <key>begin</key>
2935 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(?:(abstract)\s+)?\b(class)\b(?=\s+|/[/*])</string>
2936 <key>beginCaptures</key>
2937 <dict>
2938 <key>1</key>
2939 <dict>
2940 <key>name</key>
2941 <string>keyword.control.export.ts</string>
2942 </dict>
2943 <key>2</key>
2944 <dict>
2945 <key>name</key>
2946 <string>storage.modifier.ts</string>
2947 </dict>
2948 <key>3</key>
2949 <dict>
2950 <key>name</key>
2951 <string>storage.modifier.ts</string>
2952 </dict>
2953 <key>4</key>
2954 <dict>
2955 <key>name</key>
2956 <string>storage.type.class.ts</string>
2957 </dict>
2958 </dict>
2959 <key>end</key>
2960 <string>(?&lt;=\})</string>
2961 <key>patterns</key>
2962 <array>
2963 <dict>
2964 <key>include</key>
2965 <string>#class-declaration-or-expression-patterns</string>
2966 </dict>
2967 </array>
2968 </dict>
2969 <key>class-expression</key>
2970 <dict>
2971 <key>name</key>
2972 <string>meta.class.ts</string>
2973 <key>begin</key>
2974 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(class)\b(?=\s+|[&lt;{]|\/[\/*])</string>
2975 <key>beginCaptures</key>
2976 <dict>
2977 <key>1</key>
2978 <dict>
2979 <key>name</key>
2980 <string>storage.modifier.ts</string>
2981 </dict>
2982 <key>2</key>
2983 <dict>
2984 <key>name</key>
2985 <string>storage.type.class.ts</string>
2986 </dict>
2987 </dict>
2988 <key>end</key>
2989 <string>(?&lt;=\})</string>
2990 <key>patterns</key>
2991 <array>
2992 <dict>
2993 <key>include</key>
2994 <string>#class-declaration-or-expression-patterns</string>
2995 </dict>
2996 </array>
2997 </dict>
2998 <key>class-declaration-or-expression-patterns</key>
2999 <dict>
3000 <key>patterns</key>
3001 <array>
3002 <dict>
3003 <key>include</key>
3004 <string>#comment</string>
3005 </dict>
3006 <dict>
3007 <key>include</key>
3008 <string>#class-or-interface-heritage</string>
3009 </dict>
3010 <dict>
3011 <key>match</key>
3012 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
3013 <key>captures</key>
3014 <dict>
3015 <key>0</key>
3016 <dict>
3017 <key>name</key>
3018 <string>entity.name.type.class.ts</string>
3019 </dict>
3020 </dict>
3021 </dict>
3022 <dict>
3023 <key>include</key>
3024 <string>#type-parameters</string>
3025 </dict>
3026 <dict>
3027 <key>include</key>
3028 <string>#class-or-interface-body</string>
3029 </dict>
3030 </array>
3031 </dict>
3032 <key>interface-declaration</key>
3033 <dict>
3034 <key>name</key>
3035 <string>meta.interface.ts</string>
3036 <key>begin</key>
3037 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(?:(abstract)\s+)?\b(interface)\b(?=\s+|/[/*])</string>
3038 <key>beginCaptures</key>
3039 <dict>
3040 <key>1</key>
3041 <dict>
3042 <key>name</key>
3043 <string>keyword.control.export.ts</string>
3044 </dict>
3045 <key>2</key>
3046 <dict>
3047 <key>name</key>
3048 <string>storage.modifier.ts</string>
3049 </dict>
3050 <key>3</key>
3051 <dict>
3052 <key>name</key>
3053 <string>storage.modifier.ts</string>
3054 </dict>
3055 <key>4</key>
3056 <dict>
3057 <key>name</key>
3058 <string>storage.type.interface.ts</string>
3059 </dict>
3060 </dict>
3061 <key>end</key>
3062 <string>(?&lt;=\})</string>
3063 <key>patterns</key>
3064 <array>
3065 <dict>
3066 <key>include</key>
3067 <string>#comment</string>
3068 </dict>
3069 <dict>
3070 <key>include</key>
3071 <string>#class-or-interface-heritage</string>
3072 </dict>
3073 <dict>
3074 <key>match</key>
3075 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
3076 <key>captures</key>
3077 <dict>
3078 <key>0</key>
3079 <dict>
3080 <key>name</key>
3081 <string>entity.name.type.interface.ts</string>
3082 </dict>
3083 </dict>
3084 </dict>
3085 <dict>
3086 <key>include</key>
3087 <string>#type-parameters</string>
3088 </dict>
3089 <dict>
3090 <key>include</key>
3091 <string>#class-or-interface-body</string>
3092 </dict>
3093 </array>
3094 </dict>
3095 <key>class-or-interface-heritage</key>
3096 <dict>
3097 <key>begin</key>
3098 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(extends|implements)\b)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3099 <key>beginCaptures</key>
3100 <dict>
3101 <key>1</key>
3102 <dict>
3103 <key>name</key>
3104 <string>storage.modifier.ts</string>
3105 </dict>
3106 </dict>
3107 <key>end</key>
3108 <string>(?=\{)</string>
3109 <key>patterns</key>
3110 <array>
3111 <dict>
3112 <key>include</key>
3113 <string>#comment</string>
3114 </dict>
3115 <dict>
3116 <key>include</key>
3117 <string>#class-or-interface-heritage</string>
3118 </dict>
3119 <dict>
3120 <key>include</key>
3121 <string>#type-parameters</string>
3122 </dict>
3123 <dict>
3124 <key>include</key>
3125 <string>#expressionWithoutIdentifiers</string>
3126 </dict>
3127 <dict>
3128 <key>match</key>
3129 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))(?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s*\??\.\s*[_$[:alpha:]][_$[:alnum:]]*)*\s*)</string>
3130 <key>captures</key>
3131 <dict>
3132 <key>1</key>
3133 <dict>
3134 <key>name</key>
3135 <string>entity.name.type.module.ts</string>
3136 </dict>
3137 <key>2</key>
3138 <dict>
3139 <key>name</key>
3140 <string>punctuation.accessor.ts</string>
3141 </dict>
3142 <key>3</key>
3143 <dict>
3144 <key>name</key>
3145 <string>punctuation.accessor.optional.ts</string>
3146 </dict>
3147 </dict>
3148 </dict>
3149 <dict>
3150 <key>match</key>
3151 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3152 <key>captures</key>
3153 <dict>
3154 <key>1</key>
3155 <dict>
3156 <key>name</key>
3157 <string>entity.other.inherited-class.ts</string>
3158 </dict>
3159 </dict>
3160 </dict>
3161 <dict>
3162 <key>include</key>
3163 <string>#expressionPunctuations</string>
3164 </dict>
3165 </array>
3166 </dict>
3167 <key>class-or-interface-body</key>
3168 <dict>
3169 <key>begin</key>
3170 <string>\{</string>
3171 <key>beginCaptures</key>
3172 <dict>
3173 <key>0</key>
3174 <dict>
3175 <key>name</key>
3176 <string>punctuation.definition.block.ts</string>
3177 </dict>
3178 </dict>
3179 <key>end</key>
3180 <string>\}</string>
3181 <key>endCaptures</key>
3182 <dict>
3183 <key>0</key>
3184 <dict>
3185 <key>name</key>
3186 <string>punctuation.definition.block.ts</string>
3187 </dict>
3188 </dict>
3189 <key>patterns</key>
3190 <array>
3191 <dict>
3192 <key>include</key>
3193 <string>#comment</string>
3194 </dict>
3195 <dict>
3196 <key>include</key>
3197 <string>#decorator</string>
3198 </dict>
3199 <dict>
3200 <key>begin</key>
3201 <string>(?&lt;=:)\s*</string>
3202 <key>end</key>
3203 <string>(?=\s|[;),}\]:\-\+]|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3204 <key>patterns</key>
3205 <array>
3206 <dict>
3207 <key>include</key>
3208 <string>#expression</string>
3209 </dict>
3210 </array>
3211 </dict>
3212 <dict>
3213 <key>include</key>
3214 <string>#method-declaration</string>
3215 </dict>
3216 <dict>
3217 <key>include</key>
3218 <string>#indexer-declaration</string>
3219 </dict>
3220 <dict>
3221 <key>include</key>
3222 <string>#field-declaration</string>
3223 </dict>
3224 <dict>
3225 <key>include</key>
3226 <string>#string</string>
3227 </dict>
3228 <dict>
3229 <key>include</key>
3230 <string>#type-annotation</string>
3231 </dict>
3232 <dict>
3233 <key>include</key>
3234 <string>#variable-initializer</string>
3235 </dict>
3236 <dict>
3237 <key>include</key>
3238 <string>#access-modifier</string>
3239 </dict>
3240 <dict>
3241 <key>include</key>
3242 <string>#property-accessor</string>
3243 </dict>
3244 <dict>
3245 <key>include</key>
3246 <string>#async-modifier</string>
3247 </dict>
3248 <dict>
3249 <key>include</key>
3250 <string>#after-operator-block-as-object-literal</string>
3251 </dict>
3252 <dict>
3253 <key>include</key>
3254 <string>#decl-block</string>
3255 </dict>
3256 <dict>
3257 <key>include</key>
3258 <string>#expression</string>
3259 </dict>
3260 <dict>
3261 <key>include</key>
3262 <string>#punctuation-comma</string>
3263 </dict>
3264 <dict>
3265 <key>include</key>
3266 <string>#punctuation-semicolon</string>
3267 </dict>
3268 </array>
3269 </dict>
3270 <key>access-modifier</key>
3271 <dict>
3272 <key>name</key>
3273 <string>storage.modifier.ts</string>
3274 <key>match</key>
3275 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3276 </dict>
3277 <key>property-accessor</key>
3278 <dict>
3279 <key>name</key>
3280 <string>storage.type.property.ts</string>
3281 <key>match</key>
3282 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(accessor|get|set)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3283 </dict>
3284 <key>async-modifier</key>
3285 <dict>
3286 <key>name</key>
3287 <string>storage.modifier.async.ts</string>
3288 <key>match</key>
3289 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(async)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3290 </dict>
3291 <key>enum-declaration</key>
3292 <dict>
3293 <key>name</key>
3294 <string>meta.enum.declaration.ts</string>
3295 <key>begin</key>
3296 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?(?:\b(const)\s+)?\b(enum)\s+([_$[:alpha:]][_$[:alnum:]]*)</string>
3297 <key>beginCaptures</key>
3298 <dict>
3299 <key>1</key>
3300 <dict>
3301 <key>name</key>
3302 <string>keyword.control.export.ts</string>
3303 </dict>
3304 <key>2</key>
3305 <dict>
3306 <key>name</key>
3307 <string>storage.modifier.ts</string>
3308 </dict>
3309 <key>3</key>
3310 <dict>
3311 <key>name</key>
3312 <string>storage.modifier.ts</string>
3313 </dict>
3314 <key>4</key>
3315 <dict>
3316 <key>name</key>
3317 <string>storage.type.enum.ts</string>
3318 </dict>
3319 <key>5</key>
3320 <dict>
3321 <key>name</key>
3322 <string>entity.name.type.enum.ts</string>
3323 </dict>
3324 </dict>
3325 <key>end</key>
3326 <string>(?&lt;=\})</string>
3327 <key>patterns</key>
3328 <array>
3329 <dict>
3330 <key>include</key>
3331 <string>#comment</string>
3332 </dict>
3333 <dict>
3334 <key>begin</key>
3335 <string>\{</string>
3336 <key>beginCaptures</key>
3337 <dict>
3338 <key>0</key>
3339 <dict>
3340 <key>name</key>
3341 <string>punctuation.definition.block.ts</string>
3342 </dict>
3343 </dict>
3344 <key>end</key>
3345 <string>\}</string>
3346 <key>endCaptures</key>
3347 <dict>
3348 <key>0</key>
3349 <dict>
3350 <key>name</key>
3351 <string>punctuation.definition.block.ts</string>
3352 </dict>
3353 </dict>
3354 <key>patterns</key>
3355 <array>
3356 <dict>
3357 <key>include</key>
3358 <string>#comment</string>
3359 </dict>
3360 <dict>
3361 <key>begin</key>
3362 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3363 <key>beginCaptures</key>
3364 <dict>
3365 <key>0</key>
3366 <dict>
3367 <key>name</key>
3368 <string>variable.other.enummember.ts</string>
3369 </dict>
3370 </dict>
3371 <key>end</key>
3372 <string>(?=,|\}|$)</string>
3373 <key>patterns</key>
3374 <array>
3375 <dict>
3376 <key>include</key>
3377 <string>#comment</string>
3378 </dict>
3379 <dict>
3380 <key>include</key>
3381 <string>#variable-initializer</string>
3382 </dict>
3383 </array>
3384 </dict>
3385 <dict>
3386 <key>begin</key>
3387 <string>(?=((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\])))</string>
3388 <key>end</key>
3389 <string>(?=,|\}|$)</string>
3390 <key>patterns</key>
3391 <array>
3392 <dict>
3393 <key>include</key>
3394 <string>#string</string>
3395 </dict>
3396 <dict>
3397 <key>include</key>
3398 <string>#array-literal</string>
3399 </dict>
3400 <dict>
3401 <key>include</key>
3402 <string>#comment</string>
3403 </dict>
3404 <dict>
3405 <key>include</key>
3406 <string>#variable-initializer</string>
3407 </dict>
3408 </array>
3409 </dict>
3410 <dict>
3411 <key>include</key>
3412 <string>#punctuation-comma</string>
3413 </dict>
3414 </array>
3415 </dict>
3416 </array>
3417 </dict>
3418 <key>namespace-declaration</key>
3419 <dict>
3420 <key>name</key>
3421 <string>meta.namespace.declaration.ts</string>
3422 <key>begin</key>
3423 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(namespace|module)\s+(?=[_$[:alpha:]"'`]))</string>
3424 <key>beginCaptures</key>
3425 <dict>
3426 <key>1</key>
3427 <dict>
3428 <key>name</key>
3429 <string>keyword.control.export.ts</string>
3430 </dict>
3431 <key>2</key>
3432 <dict>
3433 <key>name</key>
3434 <string>storage.modifier.ts</string>
3435 </dict>
3436 <key>3</key>
3437 <dict>
3438 <key>name</key>
3439 <string>storage.type.namespace.ts</string>
3440 </dict>
3441 </dict>
3442 <key>end</key>
3443 <string>(?&lt;=\})|(?=;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3444 <key>patterns</key>
3445 <array>
3446 <dict>
3447 <key>include</key>
3448 <string>#comment</string>
3449 </dict>
3450 <dict>
3451 <key>include</key>
3452 <string>#string</string>
3453 </dict>
3454 <dict>
3455 <key>name</key>
3456 <string>entity.name.type.module.ts</string>
3457 <key>match</key>
3458 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3459 </dict>
3460 <dict>
3461 <key>include</key>
3462 <string>#punctuation-accessor</string>
3463 </dict>
3464 <dict>
3465 <key>include</key>
3466 <string>#decl-block</string>
3467 </dict>
3468 </array>
3469 </dict>
3470 <key>type-alias-declaration</key>
3471 <dict>
3472 <key>name</key>
3473 <string>meta.type.declaration.ts</string>
3474 <key>begin</key>
3475 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(type)\b\s+([_$[:alpha:]][_$[:alnum:]]*)\s*</string>
3476 <key>beginCaptures</key>
3477 <dict>
3478 <key>1</key>
3479 <dict>
3480 <key>name</key>
3481 <string>keyword.control.export.ts</string>
3482 </dict>
3483 <key>2</key>
3484 <dict>
3485 <key>name</key>
3486 <string>storage.modifier.ts</string>
3487 </dict>
3488 <key>3</key>
3489 <dict>
3490 <key>name</key>
3491 <string>storage.type.type.ts</string>
3492 </dict>
3493 <key>4</key>
3494 <dict>
3495 <key>name</key>
3496 <string>entity.name.type.alias.ts</string>
3497 </dict>
3498 </dict>
3499 <key>end</key>
3500 <string>(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3501 <key>patterns</key>
3502 <array>
3503 <dict>
3504 <key>include</key>
3505 <string>#comment</string>
3506 </dict>
3507 <dict>
3508 <key>include</key>
3509 <string>#type-parameters</string>
3510 </dict>
3511 <dict>
3512 <key>begin</key>
3513 <string>(=)\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3514 <key>beginCaptures</key>
3515 <dict>
3516 <key>1</key>
3517 <dict>
3518 <key>name</key>
3519 <string>keyword.operator.assignment.ts</string>
3520 </dict>
3521 <key>2</key>
3522 <dict>
3523 <key>name</key>
3524 <string>keyword.control.intrinsic.ts</string>
3525 </dict>
3526 </dict>
3527 <key>end</key>
3528 <string>(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3529 <key>patterns</key>
3530 <array>
3531 <dict>
3532 <key>include</key>
3533 <string>#type</string>
3534 </dict>
3535 </array>
3536 </dict>
3537 <dict>
3538 <key>begin</key>
3539 <string>(=)\s*</string>
3540 <key>beginCaptures</key>
3541 <dict>
3542 <key>1</key>
3543 <dict>
3544 <key>name</key>
3545 <string>keyword.operator.assignment.ts</string>
3546 </dict>
3547 </dict>
3548 <key>end</key>
3549 <string>(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3550 <key>patterns</key>
3551 <array>
3552 <dict>
3553 <key>include</key>
3554 <string>#type</string>
3555 </dict>
3556 </array>
3557 </dict>
3558 </array>
3559 </dict>
3560 <key>import-equals-declaration</key>
3561 <dict>
3562 <key>patterns</key>
3563 <array>
3564 <dict>
3565 <key>name</key>
3566 <string>meta.import-equals.external.ts</string>
3567 <key>begin</key>
3568 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type))?\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(require)\s*(\()</string>
3569 <key>beginCaptures</key>
3570 <dict>
3571 <key>1</key>
3572 <dict>
3573 <key>name</key>
3574 <string>keyword.control.export.ts</string>
3575 </dict>
3576 <key>2</key>
3577 <dict>
3578 <key>name</key>
3579 <string>storage.modifier.ts</string>
3580 </dict>
3581 <key>3</key>
3582 <dict>
3583 <key>name</key>
3584 <string>keyword.control.import.ts</string>
3585 </dict>
3586 <key>4</key>
3587 <dict>
3588 <key>name</key>
3589 <string>keyword.control.type.ts</string>
3590 </dict>
3591 <key>5</key>
3592 <dict>
3593 <key>name</key>
3594 <string>variable.other.readwrite.alias.ts</string>
3595 </dict>
3596 <key>6</key>
3597 <dict>
3598 <key>name</key>
3599 <string>keyword.operator.assignment.ts</string>
3600 </dict>
3601 <key>7</key>
3602 <dict>
3603 <key>name</key>
3604 <string>keyword.control.require.ts</string>
3605 </dict>
3606 <key>8</key>
3607 <dict>
3608 <key>name</key>
3609 <string>meta.brace.round.ts</string>
3610 </dict>
3611 </dict>
3612 <key>end</key>
3613 <string>\)</string>
3614 <key>endCaptures</key>
3615 <dict>
3616 <key>0</key>
3617 <dict>
3618 <key>name</key>
3619 <string>meta.brace.round.ts</string>
3620 </dict>
3621 </dict>
3622 <key>patterns</key>
3623 <array>
3624 <dict>
3625 <key>include</key>
3626 <string>#comment</string>
3627 </dict>
3628 <dict>
3629 <key>include</key>
3630 <string>#string</string>
3631 </dict>
3632 </array>
3633 </dict>
3634 <dict>
3635 <key>name</key>
3636 <string>meta.import-equals.internal.ts</string>
3637 <key>begin</key>
3638 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type))?\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(?!require\b)</string>
3639 <key>beginCaptures</key>
3640 <dict>
3641 <key>1</key>
3642 <dict>
3643 <key>name</key>
3644 <string>keyword.control.export.ts</string>
3645 </dict>
3646 <key>2</key>
3647 <dict>
3648 <key>name</key>
3649 <string>storage.modifier.ts</string>
3650 </dict>
3651 <key>3</key>
3652 <dict>
3653 <key>name</key>
3654 <string>keyword.control.import.ts</string>
3655 </dict>
3656 <key>4</key>
3657 <dict>
3658 <key>name</key>
3659 <string>keyword.control.type.ts</string>
3660 </dict>
3661 <key>5</key>
3662 <dict>
3663 <key>name</key>
3664 <string>variable.other.readwrite.alias.ts</string>
3665 </dict>
3666 <key>6</key>
3667 <dict>
3668 <key>name</key>
3669 <string>keyword.operator.assignment.ts</string>
3670 </dict>
3671 </dict>
3672 <key>end</key>
3673 <string>(?=;|$|^)</string>
3674 <key>patterns</key>
3675 <array>
3676 <dict>
3677 <key>include</key>
3678 <string>#single-line-comment-consuming-line-ending</string>
3679 </dict>
3680 <dict>
3681 <key>include</key>
3682 <string>#comment</string>
3683 </dict>
3684 <dict>
3685 <key>match</key>
3686 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))</string>
3687 <key>captures</key>
3688 <dict>
3689 <key>1</key>
3690 <dict>
3691 <key>name</key>
3692 <string>entity.name.type.module.ts</string>
3693 </dict>
3694 <key>2</key>
3695 <dict>
3696 <key>name</key>
3697 <string>punctuation.accessor.ts</string>
3698 </dict>
3699 <key>3</key>
3700 <dict>
3701 <key>name</key>
3702 <string>punctuation.accessor.optional.ts</string>
3703 </dict>
3704 </dict>
3705 </dict>
3706 <dict>
3707 <key>name</key>
3708 <string>variable.other.readwrite.ts</string>
3709 <key>match</key>
3710 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3711 </dict>
3712 </array>
3713 </dict>
3714 </array>
3715 </dict>
3716 <key>import-declaration</key>
3717 <dict>
3718 <key>name</key>
3719 <string>meta.import.ts</string>
3720 <key>begin</key>
3721 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type)(?!\s+from))?(?!\s*[:\(])(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3722 <key>beginCaptures</key>
3723 <dict>
3724 <key>1</key>
3725 <dict>
3726 <key>name</key>
3727 <string>keyword.control.export.ts</string>
3728 </dict>
3729 <key>2</key>
3730 <dict>
3731 <key>name</key>
3732 <string>storage.modifier.ts</string>
3733 </dict>
3734 <key>3</key>
3735 <dict>
3736 <key>name</key>
3737 <string>keyword.control.import.ts</string>
3738 </dict>
3739 <key>4</key>
3740 <dict>
3741 <key>name</key>
3742 <string>keyword.control.type.ts</string>
3743 </dict>
3744 </dict>
3745 <key>end</key>
3746 <string>(?&lt;!^import|[^\._$[:alnum:]]import)(?=;|$|^)</string>
3747 <key>patterns</key>
3748 <array>
3749 <dict>
3750 <key>include</key>
3751 <string>#single-line-comment-consuming-line-ending</string>
3752 </dict>
3753 <dict>
3754 <key>include</key>
3755 <string>#comment</string>
3756 </dict>
3757 <dict>
3758 <key>include</key>
3759 <string>#string</string>
3760 </dict>
3761 <dict>
3762 <key>begin</key>
3763 <string>(?&lt;=^import|[^\._$[:alnum:]]import)(?!\s*["'])</string>
3764 <key>end</key>
3765 <string>\bfrom\b</string>
3766 <key>endCaptures</key>
3767 <dict>
3768 <key>0</key>
3769 <dict>
3770 <key>name</key>
3771 <string>keyword.control.from.ts</string>
3772 </dict>
3773 </dict>
3774 <key>patterns</key>
3775 <array>
3776 <dict>
3777 <key>include</key>
3778 <string>#import-export-declaration</string>
3779 </dict>
3780 </array>
3781 </dict>
3782 <dict>
3783 <key>include</key>
3784 <string>#import-export-declaration</string>
3785 </dict>
3786 </array>
3787 </dict>
3788 <key>export-declaration</key>
3789 <dict>
3790 <key>patterns</key>
3791 <array>
3792 <dict>
3793 <key>match</key>
3794 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)\s+(as)\s+(namespace)\s+([_$[:alpha:]][_$[:alnum:]]*)</string>
3795 <key>captures</key>
3796 <dict>
3797 <key>1</key>
3798 <dict>
3799 <key>name</key>
3800 <string>keyword.control.export.ts</string>
3801 </dict>
3802 <key>2</key>
3803 <dict>
3804 <key>name</key>
3805 <string>keyword.control.as.ts</string>
3806 </dict>
3807 <key>3</key>
3808 <dict>
3809 <key>name</key>
3810 <string>storage.type.namespace.ts</string>
3811 </dict>
3812 <key>4</key>
3813 <dict>
3814 <key>name</key>
3815 <string>entity.name.type.module.ts</string>
3816 </dict>
3817 </dict>
3818 </dict>
3819 <dict>
3820 <key>name</key>
3821 <string>meta.export.default.ts</string>
3822 <key>begin</key>
3823 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)(?:\s+(type))?(?:(?:\s*(=))|(?:\s+(default)(?=\s+)))</string>
3824 <key>beginCaptures</key>
3825 <dict>
3826 <key>1</key>
3827 <dict>
3828 <key>name</key>
3829 <string>keyword.control.export.ts</string>
3830 </dict>
3831 <key>2</key>
3832 <dict>
3833 <key>name</key>
3834 <string>keyword.control.type.ts</string>
3835 </dict>
3836 <key>3</key>
3837 <dict>
3838 <key>name</key>
3839 <string>keyword.operator.assignment.ts</string>
3840 </dict>
3841 <key>4</key>
3842 <dict>
3843 <key>name</key>
3844 <string>keyword.control.default.ts</string>
3845 </dict>
3846 </dict>
3847 <key>end</key>
3848 <string>(?=$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3849 <key>patterns</key>
3850 <array>
3851 <dict>
3852 <key>include</key>
3853 <string>#interface-declaration</string>
3854 </dict>
3855 <dict>
3856 <key>include</key>
3857 <string>#expression</string>
3858 </dict>
3859 </array>
3860 </dict>
3861 <dict>
3862 <key>name</key>
3863 <string>meta.export.ts</string>
3864 <key>begin</key>
3865 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)(?:\s+(type))?\b(?!(\$)|(\s*:))((?=\s*[\{*])|((?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s|,))(?!\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
3866 <key>beginCaptures</key>
3867 <dict>
3868 <key>1</key>
3869 <dict>
3870 <key>name</key>
3871 <string>keyword.control.export.ts</string>
3872 </dict>
3873 <key>2</key>
3874 <dict>
3875 <key>name</key>
3876 <string>keyword.control.type.ts</string>
3877 </dict>
3878 </dict>
3879 <key>end</key>
3880 <string>(?=$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3881 <key>patterns</key>
3882 <array>
3883 <dict>
3884 <key>include</key>
3885 <string>#import-export-declaration</string>
3886 </dict>
3887 </array>
3888 </dict>
3889 </array>
3890 </dict>
3891 <key>import-export-declaration</key>
3892 <dict>
3893 <key>patterns</key>
3894 <array>
3895 <dict>
3896 <key>include</key>
3897 <string>#comment</string>
3898 </dict>
3899 <dict>
3900 <key>include</key>
3901 <string>#string</string>
3902 </dict>
3903 <dict>
3904 <key>include</key>
3905 <string>#import-export-block</string>
3906 </dict>
3907 <dict>
3908 <key>name</key>
3909 <string>keyword.control.from.ts</string>
3910 <key>match</key>
3911 <string>\bfrom\b</string>
3912 </dict>
3913 <dict>
3914 <key>include</key>
3915 <string>#import-export-assert-clause</string>
3916 </dict>
3917 <dict>
3918 <key>include</key>
3919 <string>#import-export-clause</string>
3920 </dict>
3921 </array>
3922 </dict>
3923 <key>import-export-assert-clause</key>
3924 <dict>
3925 <key>begin</key>
3926 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(with)|(assert))\s*(\{)</string>
3927 <key>beginCaptures</key>
3928 <dict>
3929 <key>1</key>
3930 <dict>
3931 <key>name</key>
3932 <string>keyword.control.with.ts</string>
3933 </dict>
3934 <key>2</key>
3935 <dict>
3936 <key>name</key>
3937 <string>keyword.control.assert.ts</string>
3938 </dict>
3939 <key>3</key>
3940 <dict>
3941 <key>name</key>
3942 <string>punctuation.definition.block.ts</string>
3943 </dict>
3944 </dict>
3945 <key>end</key>
3946 <string>\}</string>
3947 <key>endCaptures</key>
3948 <dict>
3949 <key>0</key>
3950 <dict>
3951 <key>name</key>
3952 <string>punctuation.definition.block.ts</string>
3953 </dict>
3954 </dict>
3955 <key>patterns</key>
3956 <array>
3957 <dict>
3958 <key>include</key>
3959 <string>#comment</string>
3960 </dict>
3961 <dict>
3962 <key>include</key>
3963 <string>#string</string>
3964 </dict>
3965 <dict>
3966 <key>name</key>
3967 <string>meta.object-literal.key.ts</string>
3968 <key>match</key>
3969 <string>(?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)</string>
3970 </dict>
3971 <dict>
3972 <key>name</key>
3973 <string>punctuation.separator.key-value.ts</string>
3974 <key>match</key>
3975 <string>:</string>
3976 </dict>
3977 </array>
3978 </dict>
3979 <key>import-export-block</key>
3980 <dict>
3981 <key>name</key>
3982 <string>meta.block.ts</string>
3983 <key>begin</key>
3984 <string>\{</string>
3985 <key>beginCaptures</key>
3986 <dict>
3987 <key>0</key>
3988 <dict>
3989 <key>name</key>
3990 <string>punctuation.definition.block.ts</string>
3991 </dict>
3992 </dict>
3993 <key>end</key>
3994 <string>\}</string>
3995 <key>endCaptures</key>
3996 <dict>
3997 <key>0</key>
3998 <dict>
3999 <key>name</key>
4000 <string>punctuation.definition.block.ts</string>
4001 </dict>
4002 </dict>
4003 <key>patterns</key>
4004 <array>
4005 <dict>
4006 <key>include</key>
4007 <string>#import-export-clause</string>
4008 </dict>
4009 </array>
4010 </dict>
4011 <key>import-export-clause</key>
4012 <dict>
4013 <key>patterns</key>
4014 <array>
4015 <dict>
4016 <key>include</key>
4017 <string>#comment</string>
4018 </dict>
4019 <dict>
4020 <key>match</key>
4021 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))</string>
4022 <key>captures</key>
4023 <dict>
4024 <key>1</key>
4025 <dict>
4026 <key>name</key>
4027 <string>keyword.control.type.ts</string>
4028 </dict>
4029 <key>2</key>
4030 <dict>
4031 <key>name</key>
4032 <string>keyword.control.default.ts</string>
4033 </dict>
4034 <key>3</key>
4035 <dict>
4036 <key>name</key>
4037 <string>constant.language.import-export-all.ts</string>
4038 </dict>
4039 <key>4</key>
4040 <dict>
4041 <key>name</key>
4042 <string>variable.other.readwrite.ts</string>
4043 </dict>
4044 <key>5</key>
4045 <dict>
4046 <key>name</key>
4047 <string>string.quoted.alias.ts</string>
4048 </dict>
4049 <key>12</key>
4050 <dict>
4051 <key>name</key>
4052 <string>keyword.control.as.ts</string>
4053 </dict>
4054 <key>13</key>
4055 <dict>
4056 <key>name</key>
4057 <string>keyword.control.default.ts</string>
4058 </dict>
4059 <key>14</key>
4060 <dict>
4061 <key>name</key>
4062 <string>variable.other.readwrite.alias.ts</string>
4063 </dict>
4064 <key>15</key>
4065 <dict>
4066 <key>name</key>
4067 <string>string.quoted.alias.ts</string>
4068 </dict>
4069 </dict>
4070 </dict>
4071 <dict>
4072 <key>include</key>
4073 <string>#punctuation-comma</string>
4074 </dict>
4075 <dict>
4076 <key>name</key>
4077 <string>constant.language.import-export-all.ts</string>
4078 <key>match</key>
4079 <string>\*</string>
4080 </dict>
4081 <dict>
4082 <key>name</key>
4083 <string>keyword.control.default.ts</string>
4084 <key>match</key>
4085 <string>\b(default)\b</string>
4086 </dict>
4087 <dict>
4088 <key>match</key>
4089 <string>(?:(\btype)\s+)?(?:([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))</string>
4090 <key>captures</key>
4091 <dict>
4092 <key>1</key>
4093 <dict>
4094 <key>name</key>
4095 <string>keyword.control.type.ts</string>
4096 </dict>
4097 <key>2</key>
4098 <dict>
4099 <key>name</key>
4100 <string>variable.other.readwrite.alias.ts</string>
4101 </dict>
4102 <key>3</key>
4103 <dict>
4104 <key>name</key>
4105 <string>string.quoted.alias.ts</string>
4106 </dict>
4107 </dict>
4108 </dict>
4109 </array>
4110 </dict>
4111 <key>switch-statement</key>
4112 <dict>
4113 <key>name</key>
4114 <string>switch-statement.expr.ts</string>
4115 <key>begin</key>
4116 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?=\bswitch\s*\()</string>
4117 <key>end</key>
4118 <string>\}</string>
4119 <key>endCaptures</key>
4120 <dict>
4121 <key>0</key>
4122 <dict>
4123 <key>name</key>
4124 <string>punctuation.definition.block.ts</string>
4125 </dict>
4126 </dict>
4127 <key>patterns</key>
4128 <array>
4129 <dict>
4130 <key>include</key>
4131 <string>#comment</string>
4132 </dict>
4133 <dict>
4134 <key>name</key>
4135 <string>switch-expression.expr.ts</string>
4136 <key>begin</key>
4137 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(switch)\s*(\()</string>
4138 <key>beginCaptures</key>
4139 <dict>
4140 <key>1</key>
4141 <dict>
4142 <key>name</key>
4143 <string>keyword.control.switch.ts</string>
4144 </dict>
4145 <key>2</key>
4146 <dict>
4147 <key>name</key>
4148 <string>meta.brace.round.ts</string>
4149 </dict>
4150 </dict>
4151 <key>end</key>
4152 <string>\)</string>
4153 <key>endCaptures</key>
4154 <dict>
4155 <key>0</key>
4156 <dict>
4157 <key>name</key>
4158 <string>meta.brace.round.ts</string>
4159 </dict>
4160 </dict>
4161 <key>patterns</key>
4162 <array>
4163 <dict>
4164 <key>include</key>
4165 <string>#expression</string>
4166 </dict>
4167 </array>
4168 </dict>
4169 <dict>
4170 <key>name</key>
4171 <string>switch-block.expr.ts</string>
4172 <key>begin</key>
4173 <string>\{</string>
4174 <key>beginCaptures</key>
4175 <dict>
4176 <key>0</key>
4177 <dict>
4178 <key>name</key>
4179 <string>punctuation.definition.block.ts</string>
4180 </dict>
4181 </dict>
4182 <key>end</key>
4183 <string>(?=\})</string>
4184 <key>patterns</key>
4185 <array>
4186 <dict>
4187 <key>name</key>
4188 <string>case-clause.expr.ts</string>
4189 <key>begin</key>
4190 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
4191 <key>beginCaptures</key>
4192 <dict>
4193 <key>1</key>
4194 <dict>
4195 <key>name</key>
4196 <string>keyword.control.switch.ts</string>
4197 </dict>
4198 </dict>
4199 <key>end</key>
4200 <string>(?=:)</string>
4201 <key>patterns</key>
4202 <array>
4203 <dict>
4204 <key>include</key>
4205 <string>#expression</string>
4206 </dict>
4207 </array>
4208 </dict>
4209 <dict>
4210 <key>begin</key>
4211 <string>(:)\s*(\{)</string>
4212 <key>beginCaptures</key>
4213 <dict>
4214 <key>1</key>
4215 <dict>
4216 <key>name</key>
4217 <string>case-clause.expr.ts punctuation.definition.section.case-statement.ts</string>
4218 </dict>
4219 <key>2</key>
4220 <dict>
4221 <key>name</key>
4222 <string>meta.block.ts punctuation.definition.block.ts</string>
4223 </dict>
4224 </dict>
4225 <key>end</key>
4226 <string>\}</string>
4227 <key>endCaptures</key>
4228 <dict>
4229 <key>0</key>
4230 <dict>
4231 <key>name</key>
4232 <string>meta.block.ts punctuation.definition.block.ts</string>
4233 </dict>
4234 </dict>
4235 <key>contentName</key>
4236 <string>meta.block.ts</string>
4237 <key>patterns</key>
4238 <array>
4239 <dict>
4240 <key>include</key>
4241 <string>#statements</string>
4242 </dict>
4243 </array>
4244 </dict>
4245 <dict>
4246 <key>match</key>
4247 <string>(:)</string>
4248 <key>captures</key>
4249 <dict>
4250 <key>0</key>
4251 <dict>
4252 <key>name</key>
4253 <string>case-clause.expr.ts punctuation.definition.section.case-statement.ts</string>
4254 </dict>
4255 </dict>
4256 </dict>
4257 <dict>
4258 <key>include</key>
4259 <string>#statements</string>
4260 </dict>
4261 </array>
4262 </dict>
4263 </array>
4264 </dict>
4265 <key>for-loop</key>
4266 <dict>
4267 <key>begin</key>
4268 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))for(?=((\s+|(\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*))await)?\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)?(\())</string>
4269 <key>beginCaptures</key>
4270 <dict>
4271 <key>0</key>
4272 <dict>
4273 <key>name</key>
4274 <string>keyword.control.loop.ts</string>
4275 </dict>
4276 </dict>
4277 <key>end</key>
4278 <string>(?&lt;=\))</string>
4279 <key>patterns</key>
4280 <array>
4281 <dict>
4282 <key>include</key>
4283 <string>#comment</string>
4284 </dict>
4285 <dict>
4286 <key>name</key>
4287 <string>keyword.control.loop.ts</string>
4288 <key>match</key>
4289 <string>await</string>
4290 </dict>
4291 <dict>
4292 <key>begin</key>
4293 <string>\(</string>
4294 <key>beginCaptures</key>
4295 <dict>
4296 <key>0</key>
4297 <dict>
4298 <key>name</key>
4299 <string>meta.brace.round.ts</string>
4300 </dict>
4301 </dict>
4302 <key>end</key>
4303 <string>\)</string>
4304 <key>endCaptures</key>
4305 <dict>
4306 <key>0</key>
4307 <dict>
4308 <key>name</key>
4309 <string>meta.brace.round.ts</string>
4310 </dict>
4311 </dict>
4312 <key>patterns</key>
4313 <array>
4314 <dict>
4315 <key>include</key>
4316 <string>#var-expr</string>
4317 </dict>
4318 <dict>
4319 <key>include</key>
4320 <string>#expression</string>
4321 </dict>
4322 <dict>
4323 <key>include</key>
4324 <string>#punctuation-semicolon</string>
4325 </dict>
4326 </array>
4327 </dict>
4328 </array>
4329 </dict>
4330 <key>if-statement</key>
4331 <dict>
4332 <key>patterns</key>
4333 <array>
4334 <dict>
4335 <key>begin</key>
4336 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?=\bif\s*(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))\s*(?!\{))</string>
4337 <key>end</key>
4338 <string>(?=;|$|\})</string>
4339 <key>patterns</key>
4340 <array>
4341 <dict>
4342 <key>include</key>
4343 <string>#comment</string>
4344 </dict>
4345 <dict>
4346 <key>begin</key>
4347 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(if)\s*(\()</string>
4348 <key>beginCaptures</key>
4349 <dict>
4350 <key>1</key>
4351 <dict>
4352 <key>name</key>
4353 <string>keyword.control.conditional.ts</string>
4354 </dict>
4355 <key>2</key>
4356 <dict>
4357 <key>name</key>
4358 <string>meta.brace.round.ts</string>
4359 </dict>
4360 </dict>
4361 <key>end</key>
4362 <string>\)</string>
4363 <key>endCaptures</key>
4364 <dict>
4365 <key>0</key>
4366 <dict>
4367 <key>name</key>
4368 <string>meta.brace.round.ts</string>
4369 </dict>
4370 </dict>
4371 <key>patterns</key>
4372 <array>
4373 <dict>
4374 <key>include</key>
4375 <string>#expression</string>
4376 </dict>
4377 </array>
4378 </dict>
4379 <dict>
4380 <key>name</key>
4381 <string>string.regexp.ts</string>
4382 <key>begin</key>
4383 <string>(?&lt;=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
4384 <key>beginCaptures</key>
4385 <dict>
4386 <key>0</key>
4387 <dict>
4388 <key>name</key>
4389 <string>punctuation.definition.string.begin.ts</string>
4390 </dict>
4391 </dict>
4392 <key>end</key>
4393 <string>(/)([dgimsuvy]*)</string>
4394 <key>endCaptures</key>
4395 <dict>
4396 <key>1</key>
4397 <dict>
4398 <key>name</key>
4399 <string>punctuation.definition.string.end.ts</string>
4400 </dict>
4401 <key>2</key>
4402 <dict>
4403 <key>name</key>
4404 <string>keyword.other.ts</string>
4405 </dict>
4406 </dict>
4407 <key>patterns</key>
4408 <array>
4409 <dict>
4410 <key>include</key>
4411 <string>#regexp</string>
4412 </dict>
4413 </array>
4414 </dict>
4415 <dict>
4416 <key>include</key>
4417 <string>#statements</string>
4418 </dict>
4419 </array>
4420 </dict>
4421 </array>
4422 </dict>
4423 <key>decl-block</key>
4424 <dict>
4425 <key>name</key>
4426 <string>meta.block.ts</string>
4427 <key>begin</key>
4428 <string>\{</string>
4429 <key>beginCaptures</key>
4430 <dict>
4431 <key>0</key>
4432 <dict>
4433 <key>name</key>
4434 <string>punctuation.definition.block.ts</string>
4435 </dict>
4436 </dict>
4437 <key>end</key>
4438 <string>\}</string>
4439 <key>endCaptures</key>
4440 <dict>
4441 <key>0</key>
4442 <dict>
4443 <key>name</key>
4444 <string>punctuation.definition.block.ts</string>
4445 </dict>
4446 </dict>
4447 <key>patterns</key>
4448 <array>
4449 <dict>
4450 <key>include</key>
4451 <string>#statements</string>
4452 </dict>
4453 </array>
4454 </dict>
4455 <key>after-operator-block-as-object-literal</key>
4456 <dict>
4457 <key>name</key>
4458 <string>meta.objectliteral.ts</string>
4459 <key>begin</key>
4460 <string>(?&lt;!\+\+|--)(?&lt;=[:=(,\[?+!&gt;]|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^yield|[^\._$[:alnum:]]yield|^throw|[^\._$[:alnum:]]throw|^in|[^\._$[:alnum:]]in|^of|[^\._$[:alnum:]]of|^typeof|[^\._$[:alnum:]]typeof|&amp;&amp;|\|\||\*)\s*(\{)</string>
4461 <key>beginCaptures</key>
4462 <dict>
4463 <key>1</key>
4464 <dict>
4465 <key>name</key>
4466 <string>punctuation.definition.block.ts</string>
4467 </dict>
4468 </dict>
4469 <key>end</key>
4470 <string>\}</string>
4471 <key>endCaptures</key>
4472 <dict>
4473 <key>0</key>
4474 <dict>
4475 <key>name</key>
4476 <string>punctuation.definition.block.ts</string>
4477 </dict>
4478 </dict>
4479 <key>patterns</key>
4480 <array>
4481 <dict>
4482 <key>include</key>
4483 <string>#object-member</string>
4484 </dict>
4485 </array>
4486 </dict>
4487 <key>object-literal</key>
4488 <dict>
4489 <key>name</key>
4490 <string>meta.objectliteral.ts</string>
4491 <key>begin</key>
4492 <string>\{</string>
4493 <key>beginCaptures</key>
4494 <dict>
4495 <key>0</key>
4496 <dict>
4497 <key>name</key>
4498 <string>punctuation.definition.block.ts</string>
4499 </dict>
4500 </dict>
4501 <key>end</key>
4502 <string>\}</string>
4503 <key>endCaptures</key>
4504 <dict>
4505 <key>0</key>
4506 <dict>
4507 <key>name</key>
4508 <string>punctuation.definition.block.ts</string>
4509 </dict>
4510 </dict>
4511 <key>patterns</key>
4512 <array>
4513 <dict>
4514 <key>include</key>
4515 <string>#object-member</string>
4516 </dict>
4517 </array>
4518 </dict>
4519 <key>object-member</key>
4520 <dict>
4521 <key>patterns</key>
4522 <array>
4523 <dict>
4524 <key>include</key>
4525 <string>#comment</string>
4526 </dict>
4527 <dict>
4528 <key>include</key>
4529 <string>#object-literal-method-declaration</string>
4530 </dict>
4531 <dict>
4532 <key>name</key>
4533 <string>meta.object.member.ts meta.object-literal.key.ts</string>
4534 <key>begin</key>
4535 <string>(?=\[)</string>
4536 <key>end</key>
4537 <string>(?=:)|((?&lt;=[\]])(?=\s*[\(\&lt;]))</string>
4538 <key>patterns</key>
4539 <array>
4540 <dict>
4541 <key>include</key>
4542 <string>#comment</string>
4543 </dict>
4544 <dict>
4545 <key>include</key>
4546 <string>#array-literal</string>
4547 </dict>
4548 </array>
4549 </dict>
4550 <dict>
4551 <key>name</key>
4552 <string>meta.object.member.ts meta.object-literal.key.ts</string>
4553 <key>begin</key>
4554 <string>(?=[\'\"\`])</string>
4555 <key>end</key>
4556 <string>(?=:)|((?&lt;=[\'\"\`])(?=((\s*[\(\&lt;,}])|(\s+(as|satisifies)\s+))))</string>
4557 <key>patterns</key>
4558 <array>
4559 <dict>
4560 <key>include</key>
4561 <string>#comment</string>
4562 </dict>
4563 <dict>
4564 <key>include</key>
4565 <string>#string</string>
4566 </dict>
4567 </array>
4568 </dict>
4569 <dict>
4570 <key>name</key>
4571 <string>meta.object.member.ts meta.object-literal.key.ts</string>
4572 <key>begin</key>
4573 <string>(?x)(?=(\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
4574 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
4575 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
4576 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
4577 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
4578 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
4579 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
4580 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
4581 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
4582)(?!\$)))</string>
4583 <key>end</key>
4584 <string>(?=:)|(?=\s*([\(\&lt;,}])|(\s+as|satisifies\s+))</string>
4585 <key>patterns</key>
4586 <array>
4587 <dict>
4588 <key>include</key>
4589 <string>#comment</string>
4590 </dict>
4591 <dict>
4592 <key>include</key>
4593 <string>#numeric-literal</string>
4594 </dict>
4595 </array>
4596 </dict>
4597 <dict>
4598 <key>name</key>
4599 <string>meta.method.declaration.ts</string>
4600 <key>begin</key>
4601 <string>(?&lt;=[\]\'\"\`])(?=\s*[\(\&lt;])</string>
4602 <key>end</key>
4603 <string>(?=\}|;|,)|(?&lt;=\})</string>
4604 <key>patterns</key>
4605 <array>
4606 <dict>
4607 <key>include</key>
4608 <string>#function-body</string>
4609 </dict>
4610 </array>
4611 </dict>
4612 <dict>
4613 <key>name</key>
4614 <string>meta.object.member.ts</string>
4615 <key>match</key>
4616 <string>(?![_$[:alpha:]])([[:digit:]]+)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)</string>
4617 <key>captures</key>
4618 <dict>
4619 <key>0</key>
4620 <dict>
4621 <key>name</key>
4622 <string>meta.object-literal.key.ts</string>
4623 </dict>
4624 <key>1</key>
4625 <dict>
4626 <key>name</key>
4627 <string>constant.numeric.decimal.ts</string>
4628 </dict>
4629 </dict>
4630 </dict>
4631 <dict>
4632 <key>name</key>
4633 <string>meta.object.member.ts</string>
4634 <key>match</key>
4635 <string>(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:(\s*\/\*([^\*]|(\*[^\/]))*\*\/)*\s*(
4636 ((async\s+)?(
4637 (function\s*[(&lt;*]) |
4638 (function\s+) |
4639 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
4640 )) |
4641 ((async\s*)?(
4642 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
4643 # sure shot arrow functions even if =&gt; is on new line
4644(
4645 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
4646 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
4647 (
4648 ([)]\s*:) | # ():
4649 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
4650 )
4651) |
4652
4653# arrow function possible to detect only with =&gt; on same line
4654(
4655 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
4656 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
4657 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
4658 \s*=&gt; # arrow operator
4659)
4660 ))
4661)))</string>
4662 <key>captures</key>
4663 <dict>
4664 <key>0</key>
4665 <dict>
4666 <key>name</key>
4667 <string>meta.object-literal.key.ts</string>
4668 </dict>
4669 <key>1</key>
4670 <dict>
4671 <key>name</key>
4672 <string>entity.name.function.ts</string>
4673 </dict>
4674 </dict>
4675 </dict>
4676 <dict>
4677 <key>name</key>
4678 <string>meta.object.member.ts</string>
4679 <key>match</key>
4680 <string>(?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)</string>
4681 <key>captures</key>
4682 <dict>
4683 <key>0</key>
4684 <dict>
4685 <key>name</key>
4686 <string>meta.object-literal.key.ts</string>
4687 </dict>
4688 </dict>
4689 </dict>
4690 <dict>
4691 <key>name</key>
4692 <string>meta.object.member.ts</string>
4693 <key>begin</key>
4694 <string>\.\.\.</string>
4695 <key>beginCaptures</key>
4696 <dict>
4697 <key>0</key>
4698 <dict>
4699 <key>name</key>
4700 <string>keyword.operator.spread.ts</string>
4701 </dict>
4702 </dict>
4703 <key>end</key>
4704 <string>(?=,|\})</string>
4705 <key>patterns</key>
4706 <array>
4707 <dict>
4708 <key>include</key>
4709 <string>#expression</string>
4710 </dict>
4711 </array>
4712 </dict>
4713 <dict>
4714 <key>name</key>
4715 <string>meta.object.member.ts</string>
4716 <key>match</key>
4717 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\}|$|\/\/|\/\*)</string>
4718 <key>captures</key>
4719 <dict>
4720 <key>1</key>
4721 <dict>
4722 <key>name</key>
4723 <string>variable.other.readwrite.ts</string>
4724 </dict>
4725 </dict>
4726 </dict>
4727 <dict>
4728 <key>name</key>
4729 <string>meta.object.member.ts</string>
4730 <key>match</key>
4731 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as)\s+(const)(?=\s*([,}]|$))</string>
4732 <key>captures</key>
4733 <dict>
4734 <key>1</key>
4735 <dict>
4736 <key>name</key>
4737 <string>keyword.control.as.ts</string>
4738 </dict>
4739 <key>2</key>
4740 <dict>
4741 <key>name</key>
4742 <string>storage.modifier.ts</string>
4743 </dict>
4744 </dict>
4745 </dict>
4746 <dict>
4747 <key>name</key>
4748 <string>meta.object.member.ts</string>
4749 <key>begin</key>
4750 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(as)|(satisfies))\s+</string>
4751 <key>beginCaptures</key>
4752 <dict>
4753 <key>1</key>
4754 <dict>
4755 <key>name</key>
4756 <string>keyword.control.as.ts</string>
4757 </dict>
4758 <key>2</key>
4759 <dict>
4760 <key>name</key>
4761 <string>keyword.control.satisfies.ts</string>
4762 </dict>
4763 </dict>
4764 <key>end</key>
4765 <string>(?=[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|^|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as|satisifies)\s+))</string>
4766 <key>patterns</key>
4767 <array>
4768 <dict>
4769 <key>include</key>
4770 <string>#type</string>
4771 </dict>
4772 </array>
4773 </dict>
4774 <dict>
4775 <key>name</key>
4776 <string>meta.object.member.ts</string>
4777 <key>begin</key>
4778 <string>(?=[_$[:alpha:]][_$[:alnum:]]*\s*=)</string>
4779 <key>end</key>
4780 <string>(?=,|\}|$|\/\/|\/\*)</string>
4781 <key>patterns</key>
4782 <array>
4783 <dict>
4784 <key>include</key>
4785 <string>#expression</string>
4786 </dict>
4787 </array>
4788 </dict>
4789 <dict>
4790 <key>name</key>
4791 <string>meta.object.member.ts</string>
4792 <key>begin</key>
4793 <string>:</string>
4794 <key>beginCaptures</key>
4795 <dict>
4796 <key>0</key>
4797 <dict>
4798 <key>name</key>
4799 <string>meta.object-literal.key.ts punctuation.separator.key-value.ts</string>
4800 </dict>
4801 </dict>
4802 <key>end</key>
4803 <string>(?=,|\})</string>
4804 <key>patterns</key>
4805 <array>
4806 <dict>
4807 <key>begin</key>
4808 <string>(?&lt;=:)\s*(async)?(?=\s*(&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
4809 <key>beginCaptures</key>
4810 <dict>
4811 <key>1</key>
4812 <dict>
4813 <key>name</key>
4814 <string>storage.modifier.async.ts</string>
4815 </dict>
4816 </dict>
4817 <key>end</key>
4818 <string>(?&lt;=\))</string>
4819 <key>patterns</key>
4820 <array>
4821 <dict>
4822 <key>include</key>
4823 <string>#type-parameters</string>
4824 </dict>
4825 <dict>
4826 <key>begin</key>
4827 <string>\(</string>
4828 <key>beginCaptures</key>
4829 <dict>
4830 <key>0</key>
4831 <dict>
4832 <key>name</key>
4833 <string>meta.brace.round.ts</string>
4834 </dict>
4835 </dict>
4836 <key>end</key>
4837 <string>\)</string>
4838 <key>endCaptures</key>
4839 <dict>
4840 <key>0</key>
4841 <dict>
4842 <key>name</key>
4843 <string>meta.brace.round.ts</string>
4844 </dict>
4845 </dict>
4846 <key>patterns</key>
4847 <array>
4848 <dict>
4849 <key>include</key>
4850 <string>#expression-inside-possibly-arrow-parens</string>
4851 </dict>
4852 </array>
4853 </dict>
4854 </array>
4855 </dict>
4856 <dict>
4857 <key>begin</key>
4858 <string>(?&lt;=:)\s*(async)?\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
4859 <key>beginCaptures</key>
4860 <dict>
4861 <key>1</key>
4862 <dict>
4863 <key>name</key>
4864 <string>storage.modifier.async.ts</string>
4865 </dict>
4866 <key>2</key>
4867 <dict>
4868 <key>name</key>
4869 <string>meta.brace.round.ts</string>
4870 </dict>
4871 </dict>
4872 <key>end</key>
4873 <string>\)</string>
4874 <key>endCaptures</key>
4875 <dict>
4876 <key>0</key>
4877 <dict>
4878 <key>name</key>
4879 <string>meta.brace.round.ts</string>
4880 </dict>
4881 </dict>
4882 <key>patterns</key>
4883 <array>
4884 <dict>
4885 <key>include</key>
4886 <string>#expression-inside-possibly-arrow-parens</string>
4887 </dict>
4888 </array>
4889 </dict>
4890 <dict>
4891 <key>begin</key>
4892 <string>(?&lt;=:)\s*(async)?\s*(?=\&lt;\s*$)</string>
4893 <key>beginCaptures</key>
4894 <dict>
4895 <key>1</key>
4896 <dict>
4897 <key>name</key>
4898 <string>storage.modifier.async.ts</string>
4899 </dict>
4900 </dict>
4901 <key>end</key>
4902 <string>(?&lt;=\&gt;)</string>
4903 <key>patterns</key>
4904 <array>
4905 <dict>
4906 <key>include</key>
4907 <string>#type-parameters</string>
4908 </dict>
4909 </array>
4910 </dict>
4911 <dict>
4912 <key>begin</key>
4913 <string>(?&lt;=\&gt;)\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
4914 <key>beginCaptures</key>
4915 <dict>
4916 <key>1</key>
4917 <dict>
4918 <key>name</key>
4919 <string>meta.brace.round.ts</string>
4920 </dict>
4921 </dict>
4922 <key>end</key>
4923 <string>\)</string>
4924 <key>endCaptures</key>
4925 <dict>
4926 <key>0</key>
4927 <dict>
4928 <key>name</key>
4929 <string>meta.brace.round.ts</string>
4930 </dict>
4931 </dict>
4932 <key>patterns</key>
4933 <array>
4934 <dict>
4935 <key>include</key>
4936 <string>#expression-inside-possibly-arrow-parens</string>
4937 </dict>
4938 </array>
4939 </dict>
4940 <dict>
4941 <key>include</key>
4942 <string>#possibly-arrow-return-type</string>
4943 </dict>
4944 <dict>
4945 <key>include</key>
4946 <string>#expression</string>
4947 </dict>
4948 </array>
4949 </dict>
4950 <dict>
4951 <key>include</key>
4952 <string>#punctuation-comma</string>
4953 </dict>
4954 <dict>
4955 <key>include</key>
4956 <string>#decl-block</string>
4957 </dict>
4958 </array>
4959 </dict>
4960 <key>ternary-expression</key>
4961 <dict>
4962 <key>begin</key>
4963 <string>(?!\?\.\s*[^[:digit:]])(\?)(?!\?)</string>
4964 <key>beginCaptures</key>
4965 <dict>
4966 <key>1</key>
4967 <dict>
4968 <key>name</key>
4969 <string>keyword.operator.ternary.ts</string>
4970 </dict>
4971 </dict>
4972 <key>end</key>
4973 <string>\s*(:)</string>
4974 <key>endCaptures</key>
4975 <dict>
4976 <key>1</key>
4977 <dict>
4978 <key>name</key>
4979 <string>keyword.operator.ternary.ts</string>
4980 </dict>
4981 </dict>
4982 <key>patterns</key>
4983 <array>
4984 <dict>
4985 <key>include</key>
4986 <string>#expression</string>
4987 </dict>
4988 </array>
4989 </dict>
4990 <key>function-call</key>
4991 <dict>
4992 <key>patterns</key>
4993 <array>
4994 <dict>
4995 <key>begin</key>
4996 <string>(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))\s*(?:(\?\.\s*)|(\!))?((&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?\())</string>
4997 <key>end</key>
4998 <string>(?&lt;=\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))\s*(?:(\?\.\s*)|(\!))?((&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?\())</string>
4999 <key>patterns</key>
5000 <array>
5001 <dict>
5002 <key>name</key>
5003 <string>meta.function-call.ts</string>
5004 <key>begin</key>
5005 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))</string>
5006 <key>end</key>
5007 <string>(?=\s*(?:(\?\.\s*)|(\!))?((&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?\())</string>
5008 <key>patterns</key>
5009 <array>
5010 <dict>
5011 <key>include</key>
5012 <string>#function-call-target</string>
5013 </dict>
5014 </array>
5015 </dict>
5016 <dict>
5017 <key>include</key>
5018 <string>#comment</string>
5019 </dict>
5020 <dict>
5021 <key>include</key>
5022 <string>#function-call-optionals</string>
5023 </dict>
5024 <dict>
5025 <key>include</key>
5026 <string>#type-arguments</string>
5027 </dict>
5028 <dict>
5029 <key>include</key>
5030 <string>#paren-expression</string>
5031 </dict>
5032 </array>
5033 </dict>
5034 <dict>
5035 <key>begin</key>
5036 <string>(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))(&lt;\s*[\{\[\(]\s*$))</string>
5037 <key>end</key>
5038 <string>(?&lt;=\&gt;)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))(&lt;\s*[\{\[\(]\s*$))</string>
5039 <key>patterns</key>
5040 <array>
5041 <dict>
5042 <key>name</key>
5043 <string>meta.function-call.ts</string>
5044 <key>begin</key>
5045 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))</string>
5046 <key>end</key>
5047 <string>(?=(&lt;\s*[\{\[\(]\s*$))</string>
5048 <key>patterns</key>
5049 <array>
5050 <dict>
5051 <key>include</key>
5052 <string>#function-call-target</string>
5053 </dict>
5054 </array>
5055 </dict>
5056 <dict>
5057 <key>include</key>
5058 <string>#comment</string>
5059 </dict>
5060 <dict>
5061 <key>include</key>
5062 <string>#function-call-optionals</string>
5063 </dict>
5064 <dict>
5065 <key>include</key>
5066 <string>#type-arguments</string>
5067 </dict>
5068 </array>
5069 </dict>
5070 </array>
5071 </dict>
5072 <key>function-call-target</key>
5073 <dict>
5074 <key>patterns</key>
5075 <array>
5076 <dict>
5077 <key>include</key>
5078 <string>#support-function-call-identifiers</string>
5079 </dict>
5080 <dict>
5081 <key>name</key>
5082 <string>entity.name.function.ts</string>
5083 <key>match</key>
5084 <string>(\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
5085 </dict>
5086 </array>
5087 </dict>
5088 <key>function-call-optionals</key>
5089 <dict>
5090 <key>patterns</key>
5091 <array>
5092 <dict>
5093 <key>name</key>
5094 <string>meta.function-call.ts punctuation.accessor.optional.ts</string>
5095 <key>match</key>
5096 <string>\?\.</string>
5097 </dict>
5098 <dict>
5099 <key>name</key>
5100 <string>meta.function-call.ts keyword.operator.definiteassignment.ts</string>
5101 <key>match</key>
5102 <string>\!</string>
5103 </dict>
5104 </array>
5105 </dict>
5106 <key>support-function-call-identifiers</key>
5107 <dict>
5108 <key>patterns</key>
5109 <array>
5110 <dict>
5111 <key>include</key>
5112 <string>#literal</string>
5113 </dict>
5114 <dict>
5115 <key>include</key>
5116 <string>#support-objects</string>
5117 </dict>
5118 <dict>
5119 <key>include</key>
5120 <string>#object-identifiers</string>
5121 </dict>
5122 <dict>
5123 <key>include</key>
5124 <string>#punctuation-accessor</string>
5125 </dict>
5126 <dict>
5127 <key>name</key>
5128 <string>keyword.operator.expression.import.ts</string>
5129 <key>match</key>
5130 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))import(?=\s*[\(]\s*[\"\'\`]))</string>
5131 </dict>
5132 </array>
5133 </dict>
5134 <key>new-expr</key>
5135 <dict>
5136 <key>name</key>
5137 <string>new.expr.ts</string>
5138 <key>begin</key>
5139 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(new)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5140 <key>beginCaptures</key>
5141 <dict>
5142 <key>1</key>
5143 <dict>
5144 <key>name</key>
5145 <string>keyword.operator.new.ts</string>
5146 </dict>
5147 </dict>
5148 <key>end</key>
5149 <string>(?&lt;=\))|(?=[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))</string>
5150 <key>patterns</key>
5151 <array>
5152 <dict>
5153 <key>include</key>
5154 <string>#expression</string>
5155 </dict>
5156 </array>
5157 </dict>
5158 <key>instanceof-expr</key>
5159 <dict>
5160 <key>begin</key>
5161 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(instanceof)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5162 <key>beginCaptures</key>
5163 <dict>
5164 <key>1</key>
5165 <dict>
5166 <key>name</key>
5167 <string>keyword.operator.expression.instanceof.ts</string>
5168 </dict>
5169 </dict>
5170 <key>end</key>
5171 <string>(?&lt;=\))|(?=[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|(===|!==|==|!=)|(([\&amp;\~\^\|]\s*)?[_$[:alpha:]][_$[:alnum:]]*\s+instanceof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))</string>
5172 <key>patterns</key>
5173 <array>
5174 <dict>
5175 <key>include</key>
5176 <string>#type</string>
5177 </dict>
5178 </array>
5179 </dict>
5180 <key>paren-expression-possibly-arrow</key>
5181 <dict>
5182 <key>patterns</key>
5183 <array>
5184 <dict>
5185 <key>begin</key>
5186 <string>(?&lt;=[(=,])\s*(async)?(?=\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
5187 <key>beginCaptures</key>
5188 <dict>
5189 <key>1</key>
5190 <dict>
5191 <key>name</key>
5192 <string>storage.modifier.async.ts</string>
5193 </dict>
5194 </dict>
5195 <key>end</key>
5196 <string>(?&lt;=\))</string>
5197 <key>patterns</key>
5198 <array>
5199 <dict>
5200 <key>include</key>
5201 <string>#paren-expression-possibly-arrow-with-typeparameters</string>
5202 </dict>
5203 </array>
5204 </dict>
5205 <dict>
5206 <key>begin</key>
5207 <string>(?&lt;=[(=,]|=&gt;|^return|[^\._$[:alnum:]]return)\s*(async)?(?=\s*((((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?\()|(&lt;)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)))\s*$)</string>
5208 <key>beginCaptures</key>
5209 <dict>
5210 <key>1</key>
5211 <dict>
5212 <key>name</key>
5213 <string>storage.modifier.async.ts</string>
5214 </dict>
5215 </dict>
5216 <key>end</key>
5217 <string>(?&lt;=\))</string>
5218 <key>patterns</key>
5219 <array>
5220 <dict>
5221 <key>include</key>
5222 <string>#paren-expression-possibly-arrow-with-typeparameters</string>
5223 </dict>
5224 </array>
5225 </dict>
5226 <dict>
5227 <key>include</key>
5228 <string>#possibly-arrow-return-type</string>
5229 </dict>
5230 </array>
5231 </dict>
5232 <key>paren-expression-possibly-arrow-with-typeparameters</key>
5233 <dict>
5234 <key>patterns</key>
5235 <array>
5236 <dict>
5237 <key>include</key>
5238 <string>#type-parameters</string>
5239 </dict>
5240 <dict>
5241 <key>begin</key>
5242 <string>\(</string>
5243 <key>beginCaptures</key>
5244 <dict>
5245 <key>0</key>
5246 <dict>
5247 <key>name</key>
5248 <string>meta.brace.round.ts</string>
5249 </dict>
5250 </dict>
5251 <key>end</key>
5252 <string>\)</string>
5253 <key>endCaptures</key>
5254 <dict>
5255 <key>0</key>
5256 <dict>
5257 <key>name</key>
5258 <string>meta.brace.round.ts</string>
5259 </dict>
5260 </dict>
5261 <key>patterns</key>
5262 <array>
5263 <dict>
5264 <key>include</key>
5265 <string>#expression-inside-possibly-arrow-parens</string>
5266 </dict>
5267 </array>
5268 </dict>
5269 </array>
5270 </dict>
5271 <key>expression-inside-possibly-arrow-parens</key>
5272 <dict>
5273 <key>patterns</key>
5274 <array>
5275 <dict>
5276 <key>include</key>
5277 <string>#expressionWithoutIdentifiers</string>
5278 </dict>
5279 <dict>
5280 <key>include</key>
5281 <string>#comment</string>
5282 </dict>
5283 <dict>
5284 <key>include</key>
5285 <string>#string</string>
5286 </dict>
5287 <dict>
5288 <key>include</key>
5289 <string>#decorator</string>
5290 </dict>
5291 <dict>
5292 <key>include</key>
5293 <string>#destructuring-parameter</string>
5294 </dict>
5295 <dict>
5296 <key>match</key>
5297 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+)</string>
5298 <key>captures</key>
5299 <dict>
5300 <key>1</key>
5301 <dict>
5302 <key>name</key>
5303 <string>storage.modifier.ts</string>
5304 </dict>
5305 </dict>
5306 </dict>
5307 <dict>
5308 <key>match</key>
5309 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
5310# function assignment |
5311(=\s*(
5312 ((async\s+)?(
5313 (function\s*[(&lt;*]) |
5314 (function\s+) |
5315 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
5316 )) |
5317 ((async\s*)?(
5318 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
5319 # sure shot arrow functions even if =&gt; is on new line
5320(
5321 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
5322 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
5323 (
5324 ([)]\s*:) | # ():
5325 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
5326 )
5327) |
5328
5329# arrow function possible to detect only with =&gt; on same line
5330(
5331 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
5332 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
5333 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
5334 \s*=&gt; # arrow operator
5335)
5336 ))
5337)) |
5338# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
5339(:\s*(
5340 (&lt;) |
5341 ([(]\s*(
5342 ([)]) |
5343 (\.\.\.) |
5344 ([_$[:alnum:]]+\s*(
5345 ([:,?=])|
5346 ([)]\s*=&gt;)
5347 ))
5348 ))
5349)) |
5350(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
5351(:\s*((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
5352(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
5353 ((async\s+)?(
5354 (function\s*[(&lt;*]) |
5355 (function\s+) |
5356 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
5357 )) |
5358 ((async\s*)?(
5359 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
5360 # sure shot arrow functions even if =&gt; is on new line
5361(
5362 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
5363 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
5364 (
5365 ([)]\s*:) | # ():
5366 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
5367 )
5368) |
5369
5370# arrow function possible to detect only with =&gt; on same line
5371(
5372 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
5373 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
5374 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
5375 \s*=&gt; # arrow operator
5376)
5377 ))
5378)))</string>
5379 <key>captures</key>
5380 <dict>
5381 <key>1</key>
5382 <dict>
5383 <key>name</key>
5384 <string>storage.modifier.ts</string>
5385 </dict>
5386 <key>2</key>
5387 <dict>
5388 <key>name</key>
5389 <string>keyword.operator.rest.ts</string>
5390 </dict>
5391 <key>3</key>
5392 <dict>
5393 <key>name</key>
5394 <string>entity.name.function.ts variable.language.this.ts</string>
5395 </dict>
5396 <key>4</key>
5397 <dict>
5398 <key>name</key>
5399 <string>entity.name.function.ts</string>
5400 </dict>
5401 <key>5</key>
5402 <dict>
5403 <key>name</key>
5404 <string>keyword.operator.optional.ts</string>
5405 </dict>
5406 </dict>
5407 </dict>
5408 <dict>
5409 <key>match</key>
5410 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*[:,]|$)</string>
5411 <key>captures</key>
5412 <dict>
5413 <key>1</key>
5414 <dict>
5415 <key>name</key>
5416 <string>storage.modifier.ts</string>
5417 </dict>
5418 <key>2</key>
5419 <dict>
5420 <key>name</key>
5421 <string>keyword.operator.rest.ts</string>
5422 </dict>
5423 <key>3</key>
5424 <dict>
5425 <key>name</key>
5426 <string>variable.parameter.ts variable.language.this.ts</string>
5427 </dict>
5428 <key>4</key>
5429 <dict>
5430 <key>name</key>
5431 <string>variable.parameter.ts</string>
5432 </dict>
5433 <key>5</key>
5434 <dict>
5435 <key>name</key>
5436 <string>keyword.operator.optional.ts</string>
5437 </dict>
5438 </dict>
5439 </dict>
5440 <dict>
5441 <key>include</key>
5442 <string>#type-annotation</string>
5443 </dict>
5444 <dict>
5445 <key>include</key>
5446 <string>#variable-initializer</string>
5447 </dict>
5448 <dict>
5449 <key>name</key>
5450 <string>punctuation.separator.parameter.ts</string>
5451 <key>match</key>
5452 <string>,</string>
5453 </dict>
5454 <dict>
5455 <key>include</key>
5456 <string>#identifiers</string>
5457 </dict>
5458 <dict>
5459 <key>include</key>
5460 <string>#expressionPunctuations</string>
5461 </dict>
5462 </array>
5463 </dict>
5464 <key>paren-expression</key>
5465 <dict>
5466 <key>begin</key>
5467 <string>\(</string>
5468 <key>beginCaptures</key>
5469 <dict>
5470 <key>0</key>
5471 <dict>
5472 <key>name</key>
5473 <string>meta.brace.round.ts</string>
5474 </dict>
5475 </dict>
5476 <key>end</key>
5477 <string>\)</string>
5478 <key>endCaptures</key>
5479 <dict>
5480 <key>0</key>
5481 <dict>
5482 <key>name</key>
5483 <string>meta.brace.round.ts</string>
5484 </dict>
5485 </dict>
5486 <key>patterns</key>
5487 <array>
5488 <dict>
5489 <key>include</key>
5490 <string>#expression</string>
5491 </dict>
5492 </array>
5493 </dict>
5494 <key>cast</key>
5495 <dict>
5496 <key>patterns</key>
5497 <array>
5498 <dict>
5499 <key>name</key>
5500 <string>cast.expr.ts</string>
5501 <key>match</key>
5502 <string>\s*(&lt;)\s*(const)\s*(&gt;)</string>
5503 <key>captures</key>
5504 <dict>
5505 <key>1</key>
5506 <dict>
5507 <key>name</key>
5508 <string>meta.brace.angle.ts</string>
5509 </dict>
5510 <key>2</key>
5511 <dict>
5512 <key>name</key>
5513 <string>storage.modifier.ts</string>
5514 </dict>
5515 <key>3</key>
5516 <dict>
5517 <key>name</key>
5518 <string>meta.brace.angle.ts</string>
5519 </dict>
5520 </dict>
5521 </dict>
5522 <dict>
5523 <key>name</key>
5524 <string>cast.expr.ts</string>
5525 <key>begin</key>
5526 <string>(?:(?&lt;!\+\+|--)(?&lt;=^return|[^\._$[:alnum:]]return|^throw|[^\._$[:alnum:]]throw|^yield|[^\._$[:alnum:]]yield|^await|[^\._$[:alnum:]]await|^default|[^\._$[:alnum:]]default|[=(,:&gt;*?\&amp;\|\^]|[^_$[:alnum:]](?:\+\+|\-\-)|[^\+]\+|[^\-]\-))\s*(&lt;)(?!&lt;?\=)(?!\s*$)</string>
5527 <key>beginCaptures</key>
5528 <dict>
5529 <key>1</key>
5530 <dict>
5531 <key>name</key>
5532 <string>meta.brace.angle.ts</string>
5533 </dict>
5534 </dict>
5535 <key>end</key>
5536 <string>(\&gt;)</string>
5537 <key>endCaptures</key>
5538 <dict>
5539 <key>1</key>
5540 <dict>
5541 <key>name</key>
5542 <string>meta.brace.angle.ts</string>
5543 </dict>
5544 </dict>
5545 <key>patterns</key>
5546 <array>
5547 <dict>
5548 <key>include</key>
5549 <string>#type</string>
5550 </dict>
5551 </array>
5552 </dict>
5553 <dict>
5554 <key>name</key>
5555 <string>cast.expr.ts</string>
5556 <key>begin</key>
5557 <string>(?:(?&lt;=^))\s*(&lt;)(?=[_$[:alpha:]][_$[:alnum:]]*\s*&gt;)</string>
5558 <key>beginCaptures</key>
5559 <dict>
5560 <key>1</key>
5561 <dict>
5562 <key>name</key>
5563 <string>meta.brace.angle.ts</string>
5564 </dict>
5565 </dict>
5566 <key>end</key>
5567 <string>(\&gt;)</string>
5568 <key>endCaptures</key>
5569 <dict>
5570 <key>1</key>
5571 <dict>
5572 <key>name</key>
5573 <string>meta.brace.angle.ts</string>
5574 </dict>
5575 </dict>
5576 <key>patterns</key>
5577 <array>
5578 <dict>
5579 <key>include</key>
5580 <string>#type</string>
5581 </dict>
5582 </array>
5583 </dict>
5584 </array>
5585 </dict>
5586 <key>expression-operators</key>
5587 <dict>
5588 <key>patterns</key>
5589 <array>
5590 <dict>
5591 <key>name</key>
5592 <string>keyword.control.flow.ts</string>
5593 <key>match</key>
5594 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(await)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5595 </dict>
5596 <dict>
5597 <key>begin</key>
5598 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(yield)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?=\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*\*)</string>
5599 <key>beginCaptures</key>
5600 <dict>
5601 <key>1</key>
5602 <dict>
5603 <key>name</key>
5604 <string>keyword.control.flow.ts</string>
5605 </dict>
5606 </dict>
5607 <key>end</key>
5608 <string>\*</string>
5609 <key>endCaptures</key>
5610 <dict>
5611 <key>0</key>
5612 <dict>
5613 <key>name</key>
5614 <string>keyword.generator.asterisk.ts</string>
5615 </dict>
5616 </dict>
5617 <key>patterns</key>
5618 <array>
5619 <dict>
5620 <key>include</key>
5621 <string>#comment</string>
5622 </dict>
5623 </array>
5624 </dict>
5625 <dict>
5626 <key>match</key>
5627 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(yield)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?:\s*(\*))?</string>
5628 <key>captures</key>
5629 <dict>
5630 <key>1</key>
5631 <dict>
5632 <key>name</key>
5633 <string>keyword.control.flow.ts</string>
5634 </dict>
5635 <key>2</key>
5636 <dict>
5637 <key>name</key>
5638 <string>keyword.generator.asterisk.ts</string>
5639 </dict>
5640 </dict>
5641 </dict>
5642 <dict>
5643 <key>name</key>
5644 <string>keyword.operator.expression.delete.ts</string>
5645 <key>match</key>
5646 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))delete(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5647 </dict>
5648 <dict>
5649 <key>name</key>
5650 <string>keyword.operator.expression.in.ts</string>
5651 <key>match</key>
5652 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))in(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?!\()</string>
5653 </dict>
5654 <dict>
5655 <key>name</key>
5656 <string>keyword.operator.expression.of.ts</string>
5657 <key>match</key>
5658 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))of(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?!\()</string>
5659 </dict>
5660 <dict>
5661 <key>name</key>
5662 <string>keyword.operator.expression.instanceof.ts</string>
5663 <key>match</key>
5664 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))instanceof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5665 </dict>
5666 <dict>
5667 <key>name</key>
5668 <string>keyword.operator.new.ts</string>
5669 <key>match</key>
5670 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5671 </dict>
5672 <dict>
5673 <key>include</key>
5674 <string>#typeof-operator</string>
5675 </dict>
5676 <dict>
5677 <key>name</key>
5678 <string>keyword.operator.expression.void.ts</string>
5679 <key>match</key>
5680 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))void(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5681 </dict>
5682 <dict>
5683 <key>match</key>
5684 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as)\s+(const)(?=\s*($|[;,:})\]]))</string>
5685 <key>captures</key>
5686 <dict>
5687 <key>1</key>
5688 <dict>
5689 <key>name</key>
5690 <string>keyword.control.as.ts</string>
5691 </dict>
5692 <key>2</key>
5693 <dict>
5694 <key>name</key>
5695 <string>storage.modifier.ts</string>
5696 </dict>
5697 </dict>
5698 </dict>
5699 <dict>
5700 <key>begin</key>
5701 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(as)|(satisfies))\s+</string>
5702 <key>beginCaptures</key>
5703 <dict>
5704 <key>1</key>
5705 <dict>
5706 <key>name</key>
5707 <string>keyword.control.as.ts</string>
5708 </dict>
5709 <key>2</key>
5710 <dict>
5711 <key>name</key>
5712 <string>keyword.control.satisfies.ts</string>
5713 </dict>
5714 </dict>
5715 <key>end</key>
5716 <string>(?=^|[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as|satisfies)\s+)|(\s+\&lt;))</string>
5717 <key>patterns</key>
5718 <array>
5719 <dict>
5720 <key>include</key>
5721 <string>#type</string>
5722 </dict>
5723 </array>
5724 </dict>
5725 <dict>
5726 <key>name</key>
5727 <string>keyword.operator.spread.ts</string>
5728 <key>match</key>
5729 <string>\.\.\.</string>
5730 </dict>
5731 <dict>
5732 <key>name</key>
5733 <string>keyword.operator.assignment.compound.ts</string>
5734 <key>match</key>
5735 <string>\*=|(?&lt;!\()/=|%=|\+=|\-=</string>
5736 </dict>
5737 <dict>
5738 <key>name</key>
5739 <string>keyword.operator.assignment.compound.bitwise.ts</string>
5740 <key>match</key>
5741 <string>\&amp;=|\^=|&lt;&lt;=|&gt;&gt;=|&gt;&gt;&gt;=|\|=</string>
5742 </dict>
5743 <dict>
5744 <key>name</key>
5745 <string>keyword.operator.bitwise.shift.ts</string>
5746 <key>match</key>
5747 <string>&lt;&lt;|&gt;&gt;&gt;|&gt;&gt;</string>
5748 </dict>
5749 <dict>
5750 <key>name</key>
5751 <string>keyword.operator.comparison.ts</string>
5752 <key>match</key>
5753 <string>===|!==|==|!=</string>
5754 </dict>
5755 <dict>
5756 <key>name</key>
5757 <string>keyword.operator.relational.ts</string>
5758 <key>match</key>
5759 <string>&lt;=|&gt;=|&lt;&gt;|&lt;|&gt;</string>
5760 </dict>
5761 <dict>
5762 <key>match</key>
5763 <string>(?&lt;=[_$[:alnum:]])(\!)\s*(?:(/=)|(?:(/)(?![/*])))</string>
5764 <key>captures</key>
5765 <dict>
5766 <key>1</key>
5767 <dict>
5768 <key>name</key>
5769 <string>keyword.operator.logical.ts</string>
5770 </dict>
5771 <key>2</key>
5772 <dict>
5773 <key>name</key>
5774 <string>keyword.operator.assignment.compound.ts</string>
5775 </dict>
5776 <key>3</key>
5777 <dict>
5778 <key>name</key>
5779 <string>keyword.operator.arithmetic.ts</string>
5780 </dict>
5781 </dict>
5782 </dict>
5783 <dict>
5784 <key>name</key>
5785 <string>keyword.operator.logical.ts</string>
5786 <key>match</key>
5787 <string>\!|&amp;&amp;|\|\||\?\?</string>
5788 </dict>
5789 <dict>
5790 <key>name</key>
5791 <string>keyword.operator.bitwise.ts</string>
5792 <key>match</key>
5793 <string>\&amp;|~|\^|\|</string>
5794 </dict>
5795 <dict>
5796 <key>name</key>
5797 <string>keyword.operator.assignment.ts</string>
5798 <key>match</key>
5799 <string>\=</string>
5800 </dict>
5801 <dict>
5802 <key>name</key>
5803 <string>keyword.operator.decrement.ts</string>
5804 <key>match</key>
5805 <string>--</string>
5806 </dict>
5807 <dict>
5808 <key>name</key>
5809 <string>keyword.operator.increment.ts</string>
5810 <key>match</key>
5811 <string>\+\+</string>
5812 </dict>
5813 <dict>
5814 <key>name</key>
5815 <string>keyword.operator.arithmetic.ts</string>
5816 <key>match</key>
5817 <string>%|\*|/|-|\+</string>
5818 </dict>
5819 <dict>
5820 <key>begin</key>
5821 <string>(?&lt;=[_$[:alnum:])\]])\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)+(?:(/=)|(?:(/)(?![/*]))))</string>
5822 <key>end</key>
5823 <string>(?:(/=)|(?:(/)(?!\*([^\*]|(\*[^\/]))*\*\/)))</string>
5824 <key>endCaptures</key>
5825 <dict>
5826 <key>1</key>
5827 <dict>
5828 <key>name</key>
5829 <string>keyword.operator.assignment.compound.ts</string>
5830 </dict>
5831 <key>2</key>
5832 <dict>
5833 <key>name</key>
5834 <string>keyword.operator.arithmetic.ts</string>
5835 </dict>
5836 </dict>
5837 <key>patterns</key>
5838 <array>
5839 <dict>
5840 <key>include</key>
5841 <string>#comment</string>
5842 </dict>
5843 </array>
5844 </dict>
5845 <dict>
5846 <key>match</key>
5847 <string>(?&lt;=[_$[:alnum:])\]])\s*(?:(/=)|(?:(/)(?![/*])))</string>
5848 <key>captures</key>
5849 <dict>
5850 <key>1</key>
5851 <dict>
5852 <key>name</key>
5853 <string>keyword.operator.assignment.compound.ts</string>
5854 </dict>
5855 <key>2</key>
5856 <dict>
5857 <key>name</key>
5858 <string>keyword.operator.arithmetic.ts</string>
5859 </dict>
5860 </dict>
5861 </dict>
5862 </array>
5863 </dict>
5864 <key>typeof-operator</key>
5865 <dict>
5866 <key>begin</key>
5867 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))typeof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5868 <key>beginCaptures</key>
5869 <dict>
5870 <key>0</key>
5871 <dict>
5872 <key>name</key>
5873 <string>keyword.operator.expression.typeof.ts</string>
5874 </dict>
5875 </dict>
5876 <key>end</key>
5877 <string>(?=[,);}\]=&gt;:&amp;|{\?]|(extends\s+)|$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
5878 <key>patterns</key>
5879 <array>
5880 <dict>
5881 <key>include</key>
5882 <string>#type-arguments</string>
5883 </dict>
5884 <dict>
5885 <key>include</key>
5886 <string>#expression</string>
5887 </dict>
5888 </array>
5889 </dict>
5890 <key>literal</key>
5891 <dict>
5892 <key>patterns</key>
5893 <array>
5894 <dict>
5895 <key>include</key>
5896 <string>#numeric-literal</string>
5897 </dict>
5898 <dict>
5899 <key>include</key>
5900 <string>#boolean-literal</string>
5901 </dict>
5902 <dict>
5903 <key>include</key>
5904 <string>#null-literal</string>
5905 </dict>
5906 <dict>
5907 <key>include</key>
5908 <string>#undefined-literal</string>
5909 </dict>
5910 <dict>
5911 <key>include</key>
5912 <string>#numericConstant-literal</string>
5913 </dict>
5914 <dict>
5915 <key>include</key>
5916 <string>#array-literal</string>
5917 </dict>
5918 <dict>
5919 <key>include</key>
5920 <string>#this-literal</string>
5921 </dict>
5922 <dict>
5923 <key>include</key>
5924 <string>#super-literal</string>
5925 </dict>
5926 </array>
5927 </dict>
5928 <key>array-literal</key>
5929 <dict>
5930 <key>name</key>
5931 <string>meta.array.literal.ts</string>
5932 <key>begin</key>
5933 <string>\s*(\[)</string>
5934 <key>beginCaptures</key>
5935 <dict>
5936 <key>1</key>
5937 <dict>
5938 <key>name</key>
5939 <string>meta.brace.square.ts</string>
5940 </dict>
5941 </dict>
5942 <key>end</key>
5943 <string>\]</string>
5944 <key>endCaptures</key>
5945 <dict>
5946 <key>0</key>
5947 <dict>
5948 <key>name</key>
5949 <string>meta.brace.square.ts</string>
5950 </dict>
5951 </dict>
5952 <key>patterns</key>
5953 <array>
5954 <dict>
5955 <key>include</key>
5956 <string>#expression</string>
5957 </dict>
5958 <dict>
5959 <key>include</key>
5960 <string>#punctuation-comma</string>
5961 </dict>
5962 </array>
5963 </dict>
5964 <key>numeric-literal</key>
5965 <dict>
5966 <key>patterns</key>
5967 <array>
5968 <dict>
5969 <key>name</key>
5970 <string>constant.numeric.hex.ts</string>
5971 <key>match</key>
5972 <string>\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$)</string>
5973 <key>captures</key>
5974 <dict>
5975 <key>1</key>
5976 <dict>
5977 <key>name</key>
5978 <string>storage.type.numeric.bigint.ts</string>
5979 </dict>
5980 </dict>
5981 </dict>
5982 <dict>
5983 <key>name</key>
5984 <string>constant.numeric.binary.ts</string>
5985 <key>match</key>
5986 <string>\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$)</string>
5987 <key>captures</key>
5988 <dict>
5989 <key>1</key>
5990 <dict>
5991 <key>name</key>
5992 <string>storage.type.numeric.bigint.ts</string>
5993 </dict>
5994 </dict>
5995 </dict>
5996 <dict>
5997 <key>name</key>
5998 <string>constant.numeric.octal.ts</string>
5999 <key>match</key>
6000 <string>\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$)</string>
6001 <key>captures</key>
6002 <dict>
6003 <key>1</key>
6004 <dict>
6005 <key>name</key>
6006 <string>storage.type.numeric.bigint.ts</string>
6007 </dict>
6008 </dict>
6009 </dict>
6010 <dict>
6011 <key>match</key>
6012 <string>(?x)
6013(?&lt;!\$)(?:
6014 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
6015 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
6016 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
6017 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
6018 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
6019 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
6020 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
6021 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
6022)(?!\$)</string>
6023 <key>captures</key>
6024 <dict>
6025 <key>0</key>
6026 <dict>
6027 <key>name</key>
6028 <string>constant.numeric.decimal.ts</string>
6029 </dict>
6030 <key>1</key>
6031 <dict>
6032 <key>name</key>
6033 <string>meta.delimiter.decimal.period.ts</string>
6034 </dict>
6035 <key>2</key>
6036 <dict>
6037 <key>name</key>
6038 <string>storage.type.numeric.bigint.ts</string>
6039 </dict>
6040 <key>3</key>
6041 <dict>
6042 <key>name</key>
6043 <string>meta.delimiter.decimal.period.ts</string>
6044 </dict>
6045 <key>4</key>
6046 <dict>
6047 <key>name</key>
6048 <string>storage.type.numeric.bigint.ts</string>
6049 </dict>
6050 <key>5</key>
6051 <dict>
6052 <key>name</key>
6053 <string>meta.delimiter.decimal.period.ts</string>
6054 </dict>
6055 <key>6</key>
6056 <dict>
6057 <key>name</key>
6058 <string>storage.type.numeric.bigint.ts</string>
6059 </dict>
6060 <key>7</key>
6061 <dict>
6062 <key>name</key>
6063 <string>storage.type.numeric.bigint.ts</string>
6064 </dict>
6065 <key>8</key>
6066 <dict>
6067 <key>name</key>
6068 <string>meta.delimiter.decimal.period.ts</string>
6069 </dict>
6070 <key>9</key>
6071 <dict>
6072 <key>name</key>
6073 <string>storage.type.numeric.bigint.ts</string>
6074 </dict>
6075 <key>10</key>
6076 <dict>
6077 <key>name</key>
6078 <string>meta.delimiter.decimal.period.ts</string>
6079 </dict>
6080 <key>11</key>
6081 <dict>
6082 <key>name</key>
6083 <string>storage.type.numeric.bigint.ts</string>
6084 </dict>
6085 <key>12</key>
6086 <dict>
6087 <key>name</key>
6088 <string>meta.delimiter.decimal.period.ts</string>
6089 </dict>
6090 <key>13</key>
6091 <dict>
6092 <key>name</key>
6093 <string>storage.type.numeric.bigint.ts</string>
6094 </dict>
6095 <key>14</key>
6096 <dict>
6097 <key>name</key>
6098 <string>storage.type.numeric.bigint.ts</string>
6099 </dict>
6100 </dict>
6101 </dict>
6102 </array>
6103 </dict>
6104 <key>boolean-literal</key>
6105 <dict>
6106 <key>patterns</key>
6107 <array>
6108 <dict>
6109 <key>name</key>
6110 <string>constant.language.boolean.true.ts</string>
6111 <key>match</key>
6112 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))true(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6113 </dict>
6114 <dict>
6115 <key>name</key>
6116 <string>constant.language.boolean.false.ts</string>
6117 <key>match</key>
6118 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))false(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6119 </dict>
6120 </array>
6121 </dict>
6122 <key>null-literal</key>
6123 <dict>
6124 <key>name</key>
6125 <string>constant.language.null.ts</string>
6126 <key>match</key>
6127 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))null(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6128 </dict>
6129 <key>this-literal</key>
6130 <dict>
6131 <key>name</key>
6132 <string>variable.language.this.ts</string>
6133 <key>match</key>
6134 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))this\b(?!\$)</string>
6135 </dict>
6136 <key>super-literal</key>
6137 <dict>
6138 <key>name</key>
6139 <string>variable.language.super.ts</string>
6140 <key>match</key>
6141 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))super\b(?!\$)</string>
6142 </dict>
6143 <key>undefined-literal</key>
6144 <dict>
6145 <key>name</key>
6146 <string>constant.language.undefined.ts</string>
6147 <key>match</key>
6148 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))undefined(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6149 </dict>
6150 <key>numericConstant-literal</key>
6151 <dict>
6152 <key>patterns</key>
6153 <array>
6154 <dict>
6155 <key>name</key>
6156 <string>constant.language.nan.ts</string>
6157 <key>match</key>
6158 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))NaN(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6159 </dict>
6160 <dict>
6161 <key>name</key>
6162 <string>constant.language.infinity.ts</string>
6163 <key>match</key>
6164 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Infinity(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6165 </dict>
6166 </array>
6167 </dict>
6168 <key>support-objects</key>
6169 <dict>
6170 <key>patterns</key>
6171 <array>
6172 <dict>
6173 <key>name</key>
6174 <string>variable.language.arguments.ts</string>
6175 <key>match</key>
6176 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(arguments)\b(?!\$)</string>
6177 </dict>
6178 <dict>
6179 <key>name</key>
6180 <string>support.class.builtin.ts</string>
6181 <key>match</key>
6182 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Array|ArrayBuffer|Atomics|BigInt|BigInt64Array|BigUint64Array|Boolean|DataView|Date|Float32Array
6183 |Float64Array|Function|Generator|GeneratorFunction|Int8Array|Int16Array|Int32Array|Intl|Map|Number|Object|Proxy
6184 |Reflect|RegExp|Set|SharedArrayBuffer|SIMD|String|Symbol|TypedArray
6185 |Uint8Array|Uint16Array|Uint32Array|Uint8ClampedArray|WeakMap|WeakSet)\b(?!\$)</string>
6186 </dict>
6187 <dict>
6188 <key>name</key>
6189 <string>support.class.error.ts</string>
6190 <key>match</key>
6191 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))((Eval|Internal|Range|Reference|Syntax|Type|URI)?Error)\b(?!\$)</string>
6192 </dict>
6193 <dict>
6194 <key>name</key>
6195 <string>support.class.promise.ts</string>
6196 <key>match</key>
6197 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Promise)\b(?!\$)</string>
6198 </dict>
6199 <dict>
6200 <key>name</key>
6201 <string>support.function.ts</string>
6202 <key>match</key>
6203 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(clear(Interval|Timeout)|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|
6204 isFinite|isNaN|parseFloat|parseInt|require|set(Interval|Timeout)|super|unescape|uneval)(?=\s*\()</string>
6205 </dict>
6206 <dict>
6207 <key>match</key>
6208 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Math)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?:
6209 (abs|acos|acosh|asin|asinh|atan|atan2|atanh|cbrt|ceil|clz32|cos|cosh|exp|
6210 expm1|floor|fround|hypot|imul|log|log10|log1p|log2|max|min|pow|random|
6211 round|sign|sin|sinh|sqrt|tan|tanh|trunc)
6212 |
6213 (E|LN10|LN2|LOG10E|LOG2E|PI|SQRT1_2|SQRT2)))?\b(?!\$)</string>
6214 <key>captures</key>
6215 <dict>
6216 <key>1</key>
6217 <dict>
6218 <key>name</key>
6219 <string>support.constant.math.ts</string>
6220 </dict>
6221 <key>2</key>
6222 <dict>
6223 <key>name</key>
6224 <string>punctuation.accessor.ts</string>
6225 </dict>
6226 <key>3</key>
6227 <dict>
6228 <key>name</key>
6229 <string>punctuation.accessor.optional.ts</string>
6230 </dict>
6231 <key>4</key>
6232 <dict>
6233 <key>name</key>
6234 <string>support.function.math.ts</string>
6235 </dict>
6236 <key>5</key>
6237 <dict>
6238 <key>name</key>
6239 <string>support.constant.property.math.ts</string>
6240 </dict>
6241 </dict>
6242 </dict>
6243 <dict>
6244 <key>match</key>
6245 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(console)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(
6246 assert|clear|count|debug|dir|error|group|groupCollapsed|groupEnd|info|log
6247 |profile|profileEnd|table|time|timeEnd|timeStamp|trace|warn))?\b(?!\$)</string>
6248 <key>captures</key>
6249 <dict>
6250 <key>1</key>
6251 <dict>
6252 <key>name</key>
6253 <string>support.class.console.ts</string>
6254 </dict>
6255 <key>2</key>
6256 <dict>
6257 <key>name</key>
6258 <string>punctuation.accessor.ts</string>
6259 </dict>
6260 <key>3</key>
6261 <dict>
6262 <key>name</key>
6263 <string>punctuation.accessor.optional.ts</string>
6264 </dict>
6265 <key>4</key>
6266 <dict>
6267 <key>name</key>
6268 <string>support.function.console.ts</string>
6269 </dict>
6270 </dict>
6271 </dict>
6272 <dict>
6273 <key>match</key>
6274 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(JSON)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(parse|stringify))?\b(?!\$)</string>
6275 <key>captures</key>
6276 <dict>
6277 <key>1</key>
6278 <dict>
6279 <key>name</key>
6280 <string>support.constant.json.ts</string>
6281 </dict>
6282 <key>2</key>
6283 <dict>
6284 <key>name</key>
6285 <string>punctuation.accessor.ts</string>
6286 </dict>
6287 <key>3</key>
6288 <dict>
6289 <key>name</key>
6290 <string>punctuation.accessor.optional.ts</string>
6291 </dict>
6292 <key>4</key>
6293 <dict>
6294 <key>name</key>
6295 <string>support.function.json.ts</string>
6296 </dict>
6297 </dict>
6298 </dict>
6299 <dict>
6300 <key>match</key>
6301 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(import)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(meta)\b(?!\$)</string>
6302 <key>captures</key>
6303 <dict>
6304 <key>1</key>
6305 <dict>
6306 <key>name</key>
6307 <string>keyword.control.import.ts</string>
6308 </dict>
6309 <key>2</key>
6310 <dict>
6311 <key>name</key>
6312 <string>punctuation.accessor.ts</string>
6313 </dict>
6314 <key>3</key>
6315 <dict>
6316 <key>name</key>
6317 <string>punctuation.accessor.optional.ts</string>
6318 </dict>
6319 <key>4</key>
6320 <dict>
6321 <key>name</key>
6322 <string>support.variable.property.importmeta.ts</string>
6323 </dict>
6324 </dict>
6325 </dict>
6326 <dict>
6327 <key>match</key>
6328 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(new)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(target)\b(?!\$)</string>
6329 <key>captures</key>
6330 <dict>
6331 <key>1</key>
6332 <dict>
6333 <key>name</key>
6334 <string>keyword.operator.new.ts</string>
6335 </dict>
6336 <key>2</key>
6337 <dict>
6338 <key>name</key>
6339 <string>punctuation.accessor.ts</string>
6340 </dict>
6341 <key>3</key>
6342 <dict>
6343 <key>name</key>
6344 <string>punctuation.accessor.optional.ts</string>
6345 </dict>
6346 <key>4</key>
6347 <dict>
6348 <key>name</key>
6349 <string>support.variable.property.target.ts</string>
6350 </dict>
6351 </dict>
6352 </dict>
6353 <dict>
6354 <key>match</key>
6355 <string>(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:
6356 (?:(constructor|length|prototype|__proto__)\b(?!\$|\s*(&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?\())
6357 |
6358 (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\b(?!\$)))</string>
6359 <key>captures</key>
6360 <dict>
6361 <key>1</key>
6362 <dict>
6363 <key>name</key>
6364 <string>punctuation.accessor.ts</string>
6365 </dict>
6366 <key>2</key>
6367 <dict>
6368 <key>name</key>
6369 <string>punctuation.accessor.optional.ts</string>
6370 </dict>
6371 <key>3</key>
6372 <dict>
6373 <key>name</key>
6374 <string>support.variable.property.ts</string>
6375 </dict>
6376 <key>4</key>
6377 <dict>
6378 <key>name</key>
6379 <string>support.constant.ts</string>
6380 </dict>
6381 </dict>
6382 </dict>
6383 <dict>
6384 <key>match</key>
6385 <string>(?x) (?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.)) \b (?:
6386 (document|event|navigator|performance|screen|window)
6387 |
6388 (AnalyserNode|ArrayBufferView|Attr|AudioBuffer|AudioBufferSourceNode|AudioContext|AudioDestinationNode|AudioListener
6389 |AudioNode|AudioParam|BatteryManager|BeforeUnloadEvent|BiquadFilterNode|Blob|BufferSource|ByteString|CSS|CSSConditionRule
6390 |CSSCounterStyleRule|CSSGroupingRule|CSSMatrix|CSSMediaRule|CSSPageRule|CSSPrimitiveValue|CSSRule|CSSRuleList|CSSStyleDeclaration
6391 |CSSStyleRule|CSSStyleSheet|CSSSupportsRule|CSSValue|CSSValueList|CanvasGradient|CanvasImageSource|CanvasPattern
6392 |CanvasRenderingContext2D|ChannelMergerNode|ChannelSplitterNode|CharacterData|ChromeWorker|CloseEvent|Comment|CompositionEvent
6393 |Console|ConvolverNode|Coordinates|Credential|CredentialsContainer|Crypto|CryptoKey|CustomEvent|DOMError|DOMException
6394 |DOMHighResTimeStamp|DOMImplementation|DOMString|DOMStringList|DOMStringMap|DOMTimeStamp|DOMTokenList|DataTransfer
6395 |DataTransferItem|DataTransferItemList|DedicatedWorkerGlobalScope|DelayNode|DeviceProximityEvent|DirectoryEntry
6396 |DirectoryEntrySync|DirectoryReader|DirectoryReaderSync|Document|DocumentFragment|DocumentTouch|DocumentType|DragEvent
6397 |DynamicsCompressorNode|Element|Entry|EntrySync|ErrorEvent|Event|EventListener|EventSource|EventTarget|FederatedCredential
6398 |FetchEvent|File|FileEntry|FileEntrySync|FileException|FileList|FileReader|FileReaderSync|FileSystem|FileSystemSync
6399 |FontFace|FormData|GainNode|Gamepad|GamepadButton|GamepadEvent|Geolocation|GlobalEventHandlers|HTMLAnchorElement
6400 |HTMLAreaElement|HTMLAudioElement|HTMLBRElement|HTMLBaseElement|HTMLBodyElement|HTMLButtonElement|HTMLCanvasElement
6401 |HTMLCollection|HTMLContentElement|HTMLDListElement|HTMLDataElement|HTMLDataListElement|HTMLDialogElement|HTMLDivElement
6402 |HTMLDocument|HTMLElement|HTMLEmbedElement|HTMLFieldSetElement|HTMLFontElement|HTMLFormControlsCollection|HTMLFormElement
6403 |HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLIFrameElement|HTMLImageElement|HTMLInputElement
6404 |HTMLKeygenElement|HTMLLIElement|HTMLLabelElement|HTMLLegendElement|HTMLLinkElement|HTMLMapElement|HTMLMediaElement
6405 |HTMLMetaElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLObjectElement|HTMLOptGroupElement|HTMLOptionElement
6406 |HTMLOptionsCollection|HTMLOutputElement|HTMLParagraphElement|HTMLParamElement|HTMLPreElement|HTMLProgressElement
6407 |HTMLQuoteElement|HTMLScriptElement|HTMLSelectElement|HTMLShadowElement|HTMLSourceElement|HTMLSpanElement|HTMLStyleElement
6408 |HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement
6409 |HTMLTableRowElement|HTMLTableSectionElement|HTMLTextAreaElement|HTMLTimeElement|HTMLTitleElement|HTMLTrackElement
6410 |HTMLUListElement|HTMLUnknownElement|HTMLVideoElement|HashChangeEvent|History|IDBCursor|IDBCursorWithValue|IDBDatabase
6411 |IDBEnvironment|IDBFactory|IDBIndex|IDBKeyRange|IDBMutableFile|IDBObjectStore|IDBOpenDBRequest|IDBRequest|IDBTransaction
6412 |IDBVersionChangeEvent|IIRFilterNode|IdentityManager|ImageBitmap|ImageBitmapFactories|ImageData|Index|InputDeviceCapabilities
6413 |InputEvent|InstallEvent|InstallTrigger|KeyboardEvent|LinkStyle|LocalFileSystem|LocalFileSystemSync|Location|MIDIAccess
6414 |MIDIConnectionEvent|MIDIInput|MIDIInputMap|MIDIOutputMap|MediaElementAudioSourceNode|MediaError|MediaKeyMessageEvent
6415 |MediaKeySession|MediaKeyStatusMap|MediaKeySystemAccess|MediaKeySystemConfiguration|MediaKeys|MediaRecorder|MediaStream
6416 |MediaStreamAudioDestinationNode|MediaStreamAudioSourceNode|MessageChannel|MessageEvent|MessagePort|MouseEvent
6417 |MutationObserver|MutationRecord|NamedNodeMap|Navigator|NavigatorConcurrentHardware|NavigatorGeolocation|NavigatorID
6418 |NavigatorLanguage|NavigatorOnLine|Node|NodeFilter|NodeIterator|NodeList|NonDocumentTypeChildNode|Notification
6419 |OfflineAudioCompletionEvent|OfflineAudioContext|OscillatorNode|PageTransitionEvent|PannerNode|ParentNode|PasswordCredential
6420 |Path2D|PaymentAddress|PaymentRequest|PaymentResponse|Performance|PerformanceEntry|PerformanceFrameTiming|PerformanceMark
6421 |PerformanceMeasure|PerformanceNavigation|PerformanceNavigationTiming|PerformanceObserver|PerformanceObserverEntryList
6422 |PerformanceResourceTiming|PerformanceTiming|PeriodicSyncEvent|PeriodicWave|Plugin|Point|PointerEvent|PopStateEvent
6423 |PortCollection|Position|PositionError|PositionOptions|PresentationConnectionClosedEvent|PresentationConnectionList
6424 |PresentationReceiver|ProcessingInstruction|ProgressEvent|PromiseRejectionEvent|PushEvent|PushRegistrationManager
6425 |RTCCertificate|RTCConfiguration|RTCPeerConnection|RTCSessionDescriptionCallback|RTCStatsReport|RadioNodeList|RandomSource
6426 |Range|ReadableByteStream|RenderingContext|SVGAElement|SVGAngle|SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement
6427 |SVGAnimateTransformElement|SVGAnimatedAngle|SVGAnimatedBoolean|SVGAnimatedEnumeration|SVGAnimatedInteger|SVGAnimatedLength
6428 |SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedPoints|SVGAnimatedPreserveAspectRatio
6429 |SVGAnimatedRect|SVGAnimatedString|SVGAnimatedTransformList|SVGAnimationElement|SVGCircleElement|SVGClipPathElement
6430 |SVGCursorElement|SVGDefsElement|SVGDescElement|SVGElement|SVGEllipseElement|SVGEvent|SVGFilterElement|SVGFontElement
6431 |SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement
6432 |SVGForeignObjectElement|SVGGElement|SVGGlyphElement|SVGGradientElement|SVGHKernElement|SVGImageElement|SVGLength
6433 |SVGLengthList|SVGLineElement|SVGLinearGradientElement|SVGMPathElement|SVGMaskElement|SVGMatrix|SVGMissingGlyphElement
6434 |SVGNumber|SVGNumberList|SVGPathElement|SVGPatternElement|SVGPoint|SVGPolygonElement|SVGPolylineElement|SVGPreserveAspectRatio
6435 |SVGRadialGradientElement|SVGRect|SVGRectElement|SVGSVGElement|SVGScriptElement|SVGSetElement|SVGStopElement|SVGStringList
6436 |SVGStylable|SVGStyleElement|SVGSwitchElement|SVGSymbolElement|SVGTRefElement|SVGTSpanElement|SVGTests|SVGTextElement
6437 |SVGTextPositioningElement|SVGTitleElement|SVGTransform|SVGTransformList|SVGTransformable|SVGUseElement|SVGVKernElement
6438 |SVGViewElement|ServiceWorker|ServiceWorkerContainer|ServiceWorkerGlobalScope|ServiceWorkerRegistration|ServiceWorkerState
6439 |ShadowRoot|SharedWorker|SharedWorkerGlobalScope|SourceBufferList|StereoPannerNode|Storage|StorageEvent|StyleSheet
6440 |StyleSheetList|SubtleCrypto|SyncEvent|Text|TextMetrics|TimeEvent|TimeRanges|Touch|TouchEvent|TouchList|Transferable
6441 |TreeWalker|UIEvent|USVString|VRDisplayCapabilities|ValidityState|WaveShaperNode|WebGL|WebGLActiveInfo|WebGLBuffer
6442 |WebGLContextEvent|WebGLFramebuffer|WebGLProgram|WebGLRenderbuffer|WebGLRenderingContext|WebGLShader|WebGLShaderPrecisionFormat
6443 |WebGLTexture|WebGLTimerQueryEXT|WebGLTransformFeedback|WebGLUniformLocation|WebGLVertexArrayObject|WebGLVertexArrayObjectOES
6444 |WebSocket|WebSockets|WebVTT|WheelEvent|Window|WindowBase64|WindowEventHandlers|WindowTimers|Worker|WorkerGlobalScope
6445 |WorkerLocation|WorkerNavigator|XMLHttpRequest|XMLHttpRequestEventTarget|XMLSerializer|XPathExpression|XPathResult
6446 |XSLTProcessor))\b(?!\$)</string>
6447 <key>captures</key>
6448 <dict>
6449 <key>1</key>
6450 <dict>
6451 <key>name</key>
6452 <string>support.variable.dom.ts</string>
6453 </dict>
6454 <key>2</key>
6455 <dict>
6456 <key>name</key>
6457 <string>support.class.dom.ts</string>
6458 </dict>
6459 </dict>
6460 </dict>
6461 <dict>
6462 <key>match</key>
6463 <string>(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:
6464 (ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE
6465 |DOMSTRING_SIZE_ERR|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|HIERARCHY_REQUEST_ERR|INDEX_SIZE_ERR
6466 |INUSE_ATTRIBUTE_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR
6467 |NOT_SUPPORTED_ERR|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|WRONG_DOCUMENT_ERR)
6468 |
6469 (_content|[xyz]|abbr|above|accept|acceptCharset|accessKey|action|align|[av]Link(?:color)?|all|alt|anchors|appCodeName
6470 |appCore|applets|appMinorVersion|appName|appVersion|archive|areas|arguments|attributes|availHeight|availLeft|availTop
6471 |availWidth|axis|background|backgroundColor|backgroundImage|below|bgColor|body|border|borderBottomWidth|borderColor
6472 |borderLeftWidth|borderRightWidth|borderStyle|borderTopWidth|borderWidth|bottom|bufferDepth|callee|caller|caption
6473 |cellPadding|cells|cellSpacing|ch|characterSet|charset|checked|childNodes|chOff|cite|classes|className|clear
6474 |clientInformation|clip|clipBoardData|closed|code|codeBase|codeType|color|colorDepth|cols|colSpan|compact|complete
6475 |components|content|controllers|cookie|cookieEnabled|cords|cpuClass|crypto|current|data|dateTime|declare|defaultCharset
6476 |defaultChecked|defaultSelected|defaultStatus|defaultValue|defaultView|defer|description|dialogArguments|dialogHeight
6477 |dialogLeft|dialogTop|dialogWidth|dir|directories|disabled|display|docmain|doctype|documentElement|elements|embeds
6478 |enabledPlugin|encoding|enctype|entities|event|expando|external|face|fgColor|filename|firstChild|fontFamily|fontSize
6479 |fontWeight|form|formName|forms|frame|frameBorder|frameElement|frames|hasFocus|hash|headers|height|history|host
6480 |hostname|href|hreflang|hspace|htmlFor|httpEquiv|id|ids|ignoreCase|images|implementation|index|innerHeight|innerWidth
6481 |input|isMap|label|lang|language|lastChild|lastIndex|lastMatch|lastModified|lastParen|layer[sXY]|left|leftContext
6482 |lineHeight|link|linkColor|links|listStyleType|localName|location|locationbar|longDesc|lowsrc|lowSrc|marginBottom
6483 |marginHeight|marginLeft|marginRight|marginTop|marginWidth|maxLength|media|menubar|method|mimeTypes|multiline|multiple
6484 |name|nameProp|namespaces|namespaceURI|next|nextSibling|nodeName|nodeType|nodeValue|noHref|noResize|noShade|notationName
6485 |notations|noWrap|object|offscreenBuffering|onLine|onreadystatechange|opener|opsProfile|options|oscpu|outerHeight
6486 |outerWidth|ownerDocument|paddingBottom|paddingLeft|paddingRight|paddingTop|page[XY]|page[XY]Offset|parent|parentLayer
6487 |parentNode|parentWindow|pathname|personalbar|pixelDepth|pkcs11|platform|plugins|port|prefix|previous|previousDibling
6488 |product|productSub|profile|profileend|prompt|prompter|protocol|publicId|readOnly|readyState|referrer|rel|responseText
6489 |responseXML|rev|right|rightContext|rowIndex|rows|rowSpan|rules|scheme|scope|screen[XY]|screenLeft|screenTop|scripts
6490 |scrollbars|scrolling|sectionRowIndex|security|securityPolicy|selected|selectedIndex|selection|self|shape|siblingAbove
6491 |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary
6492 |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead
6493 |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile
6494 |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\b(?!\$|\s*(&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?\()</string>
6495 <key>captures</key>
6496 <dict>
6497 <key>1</key>
6498 <dict>
6499 <key>name</key>
6500 <string>punctuation.accessor.ts</string>
6501 </dict>
6502 <key>2</key>
6503 <dict>
6504 <key>name</key>
6505 <string>punctuation.accessor.optional.ts</string>
6506 </dict>
6507 <key>3</key>
6508 <dict>
6509 <key>name</key>
6510 <string>support.constant.dom.ts</string>
6511 </dict>
6512 <key>4</key>
6513 <dict>
6514 <key>name</key>
6515 <string>support.variable.property.dom.ts</string>
6516 </dict>
6517 </dict>
6518 </dict>
6519 <dict>
6520 <key>name</key>
6521 <string>support.class.node.ts</string>
6522 <key>match</key>
6523 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream
6524 |Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b(?!\$)</string>
6525 </dict>
6526 <dict>
6527 <key>match</key>
6528 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(process)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))(?:
6529 (arch|argv|config|connected|env|execArgv|execPath|exitCode|mainModule|pid|platform|release|stderr|stdin|stdout|title|version|versions)
6530 |
6531 (abort|chdir|cwd|disconnect|exit|[sg]ete?[gu]id|send|[sg]etgroups|initgroups|kill|memoryUsage|nextTick|umask|uptime|hrtime)
6532))?\b(?!\$)</string>
6533 <key>captures</key>
6534 <dict>
6535 <key>1</key>
6536 <dict>
6537 <key>name</key>
6538 <string>support.variable.object.process.ts</string>
6539 </dict>
6540 <key>2</key>
6541 <dict>
6542 <key>name</key>
6543 <string>punctuation.accessor.ts</string>
6544 </dict>
6545 <key>3</key>
6546 <dict>
6547 <key>name</key>
6548 <string>punctuation.accessor.optional.ts</string>
6549 </dict>
6550 <key>4</key>
6551 <dict>
6552 <key>name</key>
6553 <string>support.variable.property.process.ts</string>
6554 </dict>
6555 <key>5</key>
6556 <dict>
6557 <key>name</key>
6558 <string>support.function.process.ts</string>
6559 </dict>
6560 </dict>
6561 </dict>
6562 <dict>
6563 <key>match</key>
6564 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(exports)|(module)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\b(?!\$)</string>
6565 <key>captures</key>
6566 <dict>
6567 <key>1</key>
6568 <dict>
6569 <key>name</key>
6570 <string>support.type.object.module.ts</string>
6571 </dict>
6572 <key>2</key>
6573 <dict>
6574 <key>name</key>
6575 <string>support.type.object.module.ts</string>
6576 </dict>
6577 <key>3</key>
6578 <dict>
6579 <key>name</key>
6580 <string>punctuation.accessor.ts</string>
6581 </dict>
6582 <key>4</key>
6583 <dict>
6584 <key>name</key>
6585 <string>punctuation.accessor.optional.ts</string>
6586 </dict>
6587 <key>5</key>
6588 <dict>
6589 <key>name</key>
6590 <string>support.type.object.module.ts</string>
6591 </dict>
6592 </dict>
6593 </dict>
6594 <dict>
6595 <key>name</key>
6596 <string>support.variable.object.node.ts</string>
6597 <key>match</key>
6598 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(global|GLOBAL|root|__dirname|__filename)\b(?!\$)</string>
6599 </dict>
6600 <dict>
6601 <key>match</key>
6602 <string>(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s*
6603(?:
6604 (on(?:Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset|
6605 Readystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove|
6606 Before(?:cut|deactivate|unload|update|paste|print|editfocus|activate)|
6607 Blur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help|
6608 Change|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate|
6609 Datasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover|
6610 Dragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error|
6611 Errorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort)
6612 ) |
6613 (shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|
6614 scrollByLines|scrollY|scrollTo|stop|strike|sizeToContent|sidebar|signText|sort|
6615 sup|sub|substr|substring|splice|split|send|set(?:Milliseconds|Seconds|Minutes|Hours|
6616 Month|Year|FullYear|Date|UTC(?:Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|
6617 Time|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|slice|
6618 savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat|
6619 contextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup|
6620 createEventObject|to(?:GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|
6621 test|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|
6622 untaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse|
6623 print|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file|
6624 fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|
6625 forward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert|
6626 abort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|
6627 releaseCapture|releaseEvents|go|get(?:Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|
6628 Time|Date|TimezoneOffset|UTC(?:Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|
6629 Attention|Selection|ResponseHeader|AllResponseHeaders)|moveBy|moveBelow|moveTo|
6630 moveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back
6631 ) |
6632 (acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append|
6633 appendChild|appendData|before|blur|canPlayType|captureStream|
6634 caretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click|
6635 cloneContents|cloneNode|cloneRange|close|closest|collapse|
6636 compareBoundaryPoints|compareDocumentPosition|comparePoint|contains|
6637 convertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute|
6638 createAttributeNS|createCaption|createCDATASection|createComment|
6639 createContextualFragment|createDocument|createDocumentFragment|
6640 createDocumentType|createElement|createElementNS|createEntityReference|
6641 createEvent|createExpression|createHTMLDocument|createNodeIterator|
6642 createNSResolver|createProcessingInstruction|createRange|createShadowRoot|
6643 createTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete|
6644 deleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot|
6645 deleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint|
6646 enableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen|
6647 exitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get|
6648 getAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode|
6649 getAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads|
6650 getClientRects|getContext|getDestinationInsertionPoints|getElementById|
6651 getElementsByClassName|getElementsByName|getElementsByTagName|
6652 getElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate|
6653 getVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes|
6654 hasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement|
6655 insertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData|
6656 insertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode|
6657 isPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI|
6658 lookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild|
6659 moveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open|
6660 parentNode|pause|play|postMessage|prepend|preventDefault|previousNode|
6661 previousSibling|probablySupportsContext|queryCommandEnabled|
6662 queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue|
6663 querySelector|querySelectorAll|registerContentHandler|registerElement|
6664 registerProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute|
6665 removeAttributeNode|removeAttributeNS|removeChild|removeEventListener|
6666 removeItem|replace|replaceChild|replaceData|replaceWith|reportValidity|
6667 requestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView|
6668 scrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute|
6669 setAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture|
6670 setCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem|
6671 setRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore|
6672 slice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation|
6673 submit|substringData|supports|surroundContents|takeRecords|terminate|toBlob|
6674 toDataURL|toggle|toString|values|write|writeln
6675 ) |
6676 (all|catch|finally|race|reject|resolve|then
6677 )
6678)(?=\s*\()</string>
6679 <key>captures</key>
6680 <dict>
6681 <key>1</key>
6682 <dict>
6683 <key>name</key>
6684 <string>punctuation.accessor.ts</string>
6685 </dict>
6686 <key>2</key>
6687 <dict>
6688 <key>name</key>
6689 <string>punctuation.accessor.optional.ts</string>
6690 </dict>
6691 <key>3</key>
6692 <dict>
6693 <key>name</key>
6694 <string>support.function.event-handler.ts</string>
6695 </dict>
6696 <key>4</key>
6697 <dict>
6698 <key>name</key>
6699 <string>support.function.ts</string>
6700 </dict>
6701 <key>5</key>
6702 <dict>
6703 <key>name</key>
6704 <string>support.function.dom.ts</string>
6705 </dict>
6706 <key>6</key>
6707 <dict>
6708 <key>name</key>
6709 <string>support.function.promise.ts</string>
6710 </dict>
6711 </dict>
6712 </dict>
6713 </array>
6714 </dict>
6715 <key>identifiers</key>
6716 <dict>
6717 <key>patterns</key>
6718 <array>
6719 <dict>
6720 <key>include</key>
6721 <string>#object-identifiers</string>
6722 </dict>
6723 <dict>
6724 <key>match</key>
6725 <string>(?x)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\s*=\s*(
6726 ((async\s+)?(
6727 (function\s*[(&lt;*]) |
6728 (function\s+) |
6729 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
6730 )) |
6731 ((async\s*)?(
6732 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
6733 # sure shot arrow functions even if =&gt; is on new line
6734(
6735 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
6736 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
6737 (
6738 ([)]\s*:) | # ():
6739 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
6740 )
6741) |
6742
6743# arrow function possible to detect only with =&gt; on same line
6744(
6745 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
6746 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
6747 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
6748 \s*=&gt; # arrow operator
6749)
6750 ))
6751))</string>
6752 <key>captures</key>
6753 <dict>
6754 <key>1</key>
6755 <dict>
6756 <key>name</key>
6757 <string>punctuation.accessor.ts</string>
6758 </dict>
6759 <key>2</key>
6760 <dict>
6761 <key>name</key>
6762 <string>punctuation.accessor.optional.ts</string>
6763 </dict>
6764 <key>3</key>
6765 <dict>
6766 <key>name</key>
6767 <string>entity.name.function.ts</string>
6768 </dict>
6769 </dict>
6770 </dict>
6771 <dict>
6772 <key>match</key>
6773 <string>(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])</string>
6774 <key>captures</key>
6775 <dict>
6776 <key>1</key>
6777 <dict>
6778 <key>name</key>
6779 <string>punctuation.accessor.ts</string>
6780 </dict>
6781 <key>2</key>
6782 <dict>
6783 <key>name</key>
6784 <string>punctuation.accessor.optional.ts</string>
6785 </dict>
6786 <key>3</key>
6787 <dict>
6788 <key>name</key>
6789 <string>variable.other.constant.property.ts</string>
6790 </dict>
6791 </dict>
6792 </dict>
6793 <dict>
6794 <key>match</key>
6795 <string>(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
6796 <key>captures</key>
6797 <dict>
6798 <key>1</key>
6799 <dict>
6800 <key>name</key>
6801 <string>punctuation.accessor.ts</string>
6802 </dict>
6803 <key>2</key>
6804 <dict>
6805 <key>name</key>
6806 <string>punctuation.accessor.optional.ts</string>
6807 </dict>
6808 <key>3</key>
6809 <dict>
6810 <key>name</key>
6811 <string>variable.other.property.ts</string>
6812 </dict>
6813 </dict>
6814 </dict>
6815 <dict>
6816 <key>name</key>
6817 <string>variable.other.constant.ts</string>
6818 <key>match</key>
6819 <string>([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])</string>
6820 </dict>
6821 <dict>
6822 <key>name</key>
6823 <string>variable.other.readwrite.ts</string>
6824 <key>match</key>
6825 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
6826 </dict>
6827 </array>
6828 </dict>
6829 <key>object-identifiers</key>
6830 <dict>
6831 <key>patterns</key>
6832 <array>
6833 <dict>
6834 <key>name</key>
6835 <string>support.class.ts</string>
6836 <key>match</key>
6837 <string>([_$[:alpha:]][_$[:alnum:]]*)(?=\s*\??\.\s*prototype\b(?!\$))</string>
6838 </dict>
6839 <dict>
6840 <key>match</key>
6841 <string>(?x)(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?:
6842 (\#?[[:upper:]][_$[:digit:][:upper:]]*) |
6843 (\#?[_$[:alpha:]][_$[:alnum:]]*)
6844)(?=\s*\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
6845 <key>captures</key>
6846 <dict>
6847 <key>1</key>
6848 <dict>
6849 <key>name</key>
6850 <string>punctuation.accessor.ts</string>
6851 </dict>
6852 <key>2</key>
6853 <dict>
6854 <key>name</key>
6855 <string>punctuation.accessor.optional.ts</string>
6856 </dict>
6857 <key>3</key>
6858 <dict>
6859 <key>name</key>
6860 <string>variable.other.constant.object.property.ts</string>
6861 </dict>
6862 <key>4</key>
6863 <dict>
6864 <key>name</key>
6865 <string>variable.other.object.property.ts</string>
6866 </dict>
6867 </dict>
6868 </dict>
6869 <dict>
6870 <key>match</key>
6871 <string>(?x)(?:
6872 ([[:upper:]][_$[:digit:][:upper:]]*) |
6873 ([_$[:alpha:]][_$[:alnum:]]*)
6874)(?=\s*\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
6875 <key>captures</key>
6876 <dict>
6877 <key>1</key>
6878 <dict>
6879 <key>name</key>
6880 <string>variable.other.constant.object.ts</string>
6881 </dict>
6882 <key>2</key>
6883 <dict>
6884 <key>name</key>
6885 <string>variable.other.object.ts</string>
6886 </dict>
6887 </dict>
6888 </dict>
6889 </array>
6890 </dict>
6891 <key>type-annotation</key>
6892 <dict>
6893 <key>patterns</key>
6894 <array>
6895 <dict>
6896 <key>name</key>
6897 <string>meta.type.annotation.ts</string>
6898 <key>begin</key>
6899 <string>(:)(?=\s*\S)</string>
6900 <key>beginCaptures</key>
6901 <dict>
6902 <key>1</key>
6903 <dict>
6904 <key>name</key>
6905 <string>keyword.operator.type.annotation.ts</string>
6906 </dict>
6907 </dict>
6908 <key>end</key>
6909 <string>(?&lt;![:|&amp;])(?!\s*[|&amp;]\s+)((?=^|[,);\}\]]|//)|(?==[^&gt;])|((?&lt;=[\}&gt;\]\)]|[_$[:alpha:]])\s*(?=\{)))</string>
6910 <key>patterns</key>
6911 <array>
6912 <dict>
6913 <key>include</key>
6914 <string>#type</string>
6915 </dict>
6916 </array>
6917 </dict>
6918 <dict>
6919 <key>name</key>
6920 <string>meta.type.annotation.ts</string>
6921 <key>begin</key>
6922 <string>(:)</string>
6923 <key>beginCaptures</key>
6924 <dict>
6925 <key>1</key>
6926 <dict>
6927 <key>name</key>
6928 <string>keyword.operator.type.annotation.ts</string>
6929 </dict>
6930 </dict>
6931 <key>end</key>
6932 <string>(?&lt;![:|&amp;])((?=[,);\}\]]|\/\/)|(?==[^&gt;])|(?=^\s*$)|((?&lt;=[\}&gt;\]\)]|[_$[:alpha:]])\s*(?=\{)))</string>
6933 <key>patterns</key>
6934 <array>
6935 <dict>
6936 <key>include</key>
6937 <string>#type</string>
6938 </dict>
6939 </array>
6940 </dict>
6941 </array>
6942 </dict>
6943 <key>parameter-type-annotation</key>
6944 <dict>
6945 <key>patterns</key>
6946 <array>
6947 <dict>
6948 <key>name</key>
6949 <string>meta.type.annotation.ts</string>
6950 <key>begin</key>
6951 <string>(:)</string>
6952 <key>beginCaptures</key>
6953 <dict>
6954 <key>1</key>
6955 <dict>
6956 <key>name</key>
6957 <string>keyword.operator.type.annotation.ts</string>
6958 </dict>
6959 </dict>
6960 <key>end</key>
6961 <string>(?=[,)])|(?==[^&gt;])</string>
6962 <key>patterns</key>
6963 <array>
6964 <dict>
6965 <key>include</key>
6966 <string>#type</string>
6967 </dict>
6968 </array>
6969 </dict>
6970 </array>
6971 </dict>
6972 <key>return-type</key>
6973 <dict>
6974 <key>patterns</key>
6975 <array>
6976 <dict>
6977 <key>name</key>
6978 <string>meta.return.type.ts</string>
6979 <key>begin</key>
6980 <string>(?&lt;=\))\s*(:)(?=\s*\S)</string>
6981 <key>beginCaptures</key>
6982 <dict>
6983 <key>1</key>
6984 <dict>
6985 <key>name</key>
6986 <string>keyword.operator.type.annotation.ts</string>
6987 </dict>
6988 </dict>
6989 <key>end</key>
6990 <string>(?&lt;![:|&amp;])(?=$|^|[{};,]|//)</string>
6991 <key>patterns</key>
6992 <array>
6993 <dict>
6994 <key>include</key>
6995 <string>#return-type-core</string>
6996 </dict>
6997 </array>
6998 </dict>
6999 <dict>
7000 <key>name</key>
7001 <string>meta.return.type.ts</string>
7002 <key>begin</key>
7003 <string>(?&lt;=\))\s*(:)</string>
7004 <key>beginCaptures</key>
7005 <dict>
7006 <key>1</key>
7007 <dict>
7008 <key>name</key>
7009 <string>keyword.operator.type.annotation.ts</string>
7010 </dict>
7011 </dict>
7012 <key>end</key>
7013 <string>(?&lt;![:|&amp;])((?=[{};,]|//|^\s*$)|((?&lt;=\S)(?=\s*$)))</string>
7014 <key>patterns</key>
7015 <array>
7016 <dict>
7017 <key>include</key>
7018 <string>#return-type-core</string>
7019 </dict>
7020 </array>
7021 </dict>
7022 </array>
7023 </dict>
7024 <key>return-type-core</key>
7025 <dict>
7026 <key>patterns</key>
7027 <array>
7028 <dict>
7029 <key>include</key>
7030 <string>#comment</string>
7031 </dict>
7032 <dict>
7033 <key>begin</key>
7034 <string>(?&lt;=[:|&amp;])(?=\s*\{)</string>
7035 <key>end</key>
7036 <string>(?&lt;=\})</string>
7037 <key>patterns</key>
7038 <array>
7039 <dict>
7040 <key>include</key>
7041 <string>#type-object</string>
7042 </dict>
7043 </array>
7044 </dict>
7045 <dict>
7046 <key>include</key>
7047 <string>#type-predicate-operator</string>
7048 </dict>
7049 <dict>
7050 <key>include</key>
7051 <string>#type</string>
7052 </dict>
7053 </array>
7054 </dict>
7055 <key>arrow-return-type</key>
7056 <dict>
7057 <key>name</key>
7058 <string>meta.return.type.arrow.ts</string>
7059 <key>begin</key>
7060 <string>(?&lt;=\))\s*(:)</string>
7061 <key>beginCaptures</key>
7062 <dict>
7063 <key>1</key>
7064 <dict>
7065 <key>name</key>
7066 <string>keyword.operator.type.annotation.ts</string>
7067 </dict>
7068 </dict>
7069 <key>end</key>
7070 <string>(?==&gt;|\{|(^\s*(export|function|class|interface|let|var|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|const|import|enum|namespace|module|type|abstract|declare)\s+))</string>
7071 <key>patterns</key>
7072 <array>
7073 <dict>
7074 <key>include</key>
7075 <string>#arrow-return-type-body</string>
7076 </dict>
7077 </array>
7078 </dict>
7079 <key>possibly-arrow-return-type</key>
7080 <dict>
7081 <key>begin</key>
7082 <string>(?&lt;=\)|^)\s*(:)(?=\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=&gt;)</string>
7083 <key>beginCaptures</key>
7084 <dict>
7085 <key>1</key>
7086 <dict>
7087 <key>name</key>
7088 <string>meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts</string>
7089 </dict>
7090 </dict>
7091 <key>end</key>
7092 <string>(?==&gt;|\{|(^\s*(export|function|class|interface|let|var|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|const|import|enum|namespace|module|type|abstract|declare)\s+))</string>
7093 <key>contentName</key>
7094 <string>meta.arrow.ts meta.return.type.arrow.ts</string>
7095 <key>patterns</key>
7096 <array>
7097 <dict>
7098 <key>include</key>
7099 <string>#arrow-return-type-body</string>
7100 </dict>
7101 </array>
7102 </dict>
7103 <key>arrow-return-type-body</key>
7104 <dict>
7105 <key>patterns</key>
7106 <array>
7107 <dict>
7108 <key>begin</key>
7109 <string>(?&lt;=[:])(?=\s*\{)</string>
7110 <key>end</key>
7111 <string>(?&lt;=\})</string>
7112 <key>patterns</key>
7113 <array>
7114 <dict>
7115 <key>include</key>
7116 <string>#type-object</string>
7117 </dict>
7118 </array>
7119 </dict>
7120 <dict>
7121 <key>include</key>
7122 <string>#type-predicate-operator</string>
7123 </dict>
7124 <dict>
7125 <key>include</key>
7126 <string>#type</string>
7127 </dict>
7128 </array>
7129 </dict>
7130 <key>type-parameters</key>
7131 <dict>
7132 <key>name</key>
7133 <string>meta.type.parameters.ts</string>
7134 <key>begin</key>
7135 <string>(&lt;)</string>
7136 <key>beginCaptures</key>
7137 <dict>
7138 <key>1</key>
7139 <dict>
7140 <key>name</key>
7141 <string>punctuation.definition.typeparameters.begin.ts</string>
7142 </dict>
7143 </dict>
7144 <key>end</key>
7145 <string>(&gt;)</string>
7146 <key>endCaptures</key>
7147 <dict>
7148 <key>1</key>
7149 <dict>
7150 <key>name</key>
7151 <string>punctuation.definition.typeparameters.end.ts</string>
7152 </dict>
7153 </dict>
7154 <key>patterns</key>
7155 <array>
7156 <dict>
7157 <key>include</key>
7158 <string>#comment</string>
7159 </dict>
7160 <dict>
7161 <key>name</key>
7162 <string>storage.modifier.ts</string>
7163 <key>match</key>
7164 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(extends|in|out|const)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7165 </dict>
7166 <dict>
7167 <key>include</key>
7168 <string>#type</string>
7169 </dict>
7170 <dict>
7171 <key>include</key>
7172 <string>#punctuation-comma</string>
7173 </dict>
7174 <dict>
7175 <key>name</key>
7176 <string>keyword.operator.assignment.ts</string>
7177 <key>match</key>
7178 <string>(=)(?!&gt;)</string>
7179 </dict>
7180 </array>
7181 </dict>
7182 <key>type-arguments</key>
7183 <dict>
7184 <key>name</key>
7185 <string>meta.type.parameters.ts</string>
7186 <key>begin</key>
7187 <string>\&lt;</string>
7188 <key>beginCaptures</key>
7189 <dict>
7190 <key>0</key>
7191 <dict>
7192 <key>name</key>
7193 <string>punctuation.definition.typeparameters.begin.ts</string>
7194 </dict>
7195 </dict>
7196 <key>end</key>
7197 <string>\&gt;</string>
7198 <key>endCaptures</key>
7199 <dict>
7200 <key>0</key>
7201 <dict>
7202 <key>name</key>
7203 <string>punctuation.definition.typeparameters.end.ts</string>
7204 </dict>
7205 </dict>
7206 <key>patterns</key>
7207 <array>
7208 <dict>
7209 <key>include</key>
7210 <string>#type-arguments-body</string>
7211 </dict>
7212 </array>
7213 </dict>
7214 <key>type-arguments-body</key>
7215 <dict>
7216 <key>patterns</key>
7217 <array>
7218 <dict>
7219 <key>match</key>
7220 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(_)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7221 <key>captures</key>
7222 <dict>
7223 <key>0</key>
7224 <dict>
7225 <key>name</key>
7226 <string>keyword.operator.type.ts</string>
7227 </dict>
7228 </dict>
7229 </dict>
7230 <dict>
7231 <key>include</key>
7232 <string>#type</string>
7233 </dict>
7234 <dict>
7235 <key>include</key>
7236 <string>#punctuation-comma</string>
7237 </dict>
7238 </array>
7239 </dict>
7240 <key>type</key>
7241 <dict>
7242 <key>patterns</key>
7243 <array>
7244 <dict>
7245 <key>include</key>
7246 <string>#comment</string>
7247 </dict>
7248 <dict>
7249 <key>include</key>
7250 <string>#type-string</string>
7251 </dict>
7252 <dict>
7253 <key>include</key>
7254 <string>#numeric-literal</string>
7255 </dict>
7256 <dict>
7257 <key>include</key>
7258 <string>#type-primitive</string>
7259 </dict>
7260 <dict>
7261 <key>include</key>
7262 <string>#type-builtin-literals</string>
7263 </dict>
7264 <dict>
7265 <key>include</key>
7266 <string>#type-parameters</string>
7267 </dict>
7268 <dict>
7269 <key>include</key>
7270 <string>#type-tuple</string>
7271 </dict>
7272 <dict>
7273 <key>include</key>
7274 <string>#type-object</string>
7275 </dict>
7276 <dict>
7277 <key>include</key>
7278 <string>#type-operators</string>
7279 </dict>
7280 <dict>
7281 <key>include</key>
7282 <string>#type-conditional</string>
7283 </dict>
7284 <dict>
7285 <key>include</key>
7286 <string>#type-fn-type-parameters</string>
7287 </dict>
7288 <dict>
7289 <key>include</key>
7290 <string>#type-paren-or-function-parameters</string>
7291 </dict>
7292 <dict>
7293 <key>include</key>
7294 <string>#type-function-return-type</string>
7295 </dict>
7296 <dict>
7297 <key>match</key>
7298 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
7299 <key>captures</key>
7300 <dict>
7301 <key>1</key>
7302 <dict>
7303 <key>name</key>
7304 <string>storage.modifier.ts</string>
7305 </dict>
7306 </dict>
7307 </dict>
7308 <dict>
7309 <key>include</key>
7310 <string>#type-name</string>
7311 </dict>
7312 </array>
7313 </dict>
7314 <key>type-primitive</key>
7315 <dict>
7316 <key>name</key>
7317 <string>support.type.primitive.ts</string>
7318 <key>match</key>
7319 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7320 </dict>
7321 <key>type-builtin-literals</key>
7322 <dict>
7323 <key>name</key>
7324 <string>support.type.builtin.ts</string>
7325 <key>match</key>
7326 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7327 </dict>
7328 <key>type-tuple</key>
7329 <dict>
7330 <key>name</key>
7331 <string>meta.type.tuple.ts</string>
7332 <key>begin</key>
7333 <string>\[</string>
7334 <key>beginCaptures</key>
7335 <dict>
7336 <key>0</key>
7337 <dict>
7338 <key>name</key>
7339 <string>meta.brace.square.ts</string>
7340 </dict>
7341 </dict>
7342 <key>end</key>
7343 <string>\]</string>
7344 <key>endCaptures</key>
7345 <dict>
7346 <key>0</key>
7347 <dict>
7348 <key>name</key>
7349 <string>meta.brace.square.ts</string>
7350 </dict>
7351 </dict>
7352 <key>patterns</key>
7353 <array>
7354 <dict>
7355 <key>name</key>
7356 <string>keyword.operator.rest.ts</string>
7357 <key>match</key>
7358 <string>\.\.\.</string>
7359 </dict>
7360 <dict>
7361 <key>match</key>
7362 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))([_$[:alpha:]][_$[:alnum:]]*)\s*(\?)?\s*(:)</string>
7363 <key>captures</key>
7364 <dict>
7365 <key>1</key>
7366 <dict>
7367 <key>name</key>
7368 <string>entity.name.label.ts</string>
7369 </dict>
7370 <key>2</key>
7371 <dict>
7372 <key>name</key>
7373 <string>keyword.operator.optional.ts</string>
7374 </dict>
7375 <key>3</key>
7376 <dict>
7377 <key>name</key>
7378 <string>punctuation.separator.label.ts</string>
7379 </dict>
7380 </dict>
7381 </dict>
7382 <dict>
7383 <key>include</key>
7384 <string>#type</string>
7385 </dict>
7386 <dict>
7387 <key>include</key>
7388 <string>#punctuation-comma</string>
7389 </dict>
7390 </array>
7391 </dict>
7392 <key>type-object</key>
7393 <dict>
7394 <key>name</key>
7395 <string>meta.object.type.ts</string>
7396 <key>begin</key>
7397 <string>\{</string>
7398 <key>beginCaptures</key>
7399 <dict>
7400 <key>0</key>
7401 <dict>
7402 <key>name</key>
7403 <string>punctuation.definition.block.ts</string>
7404 </dict>
7405 </dict>
7406 <key>end</key>
7407 <string>\}</string>
7408 <key>endCaptures</key>
7409 <dict>
7410 <key>0</key>
7411 <dict>
7412 <key>name</key>
7413 <string>punctuation.definition.block.ts</string>
7414 </dict>
7415 </dict>
7416 <key>patterns</key>
7417 <array>
7418 <dict>
7419 <key>include</key>
7420 <string>#comment</string>
7421 </dict>
7422 <dict>
7423 <key>include</key>
7424 <string>#method-declaration</string>
7425 </dict>
7426 <dict>
7427 <key>include</key>
7428 <string>#indexer-declaration</string>
7429 </dict>
7430 <dict>
7431 <key>include</key>
7432 <string>#indexer-mapped-type-declaration</string>
7433 </dict>
7434 <dict>
7435 <key>include</key>
7436 <string>#field-declaration</string>
7437 </dict>
7438 <dict>
7439 <key>include</key>
7440 <string>#type-annotation</string>
7441 </dict>
7442 <dict>
7443 <key>begin</key>
7444 <string>\.\.\.</string>
7445 <key>beginCaptures</key>
7446 <dict>
7447 <key>0</key>
7448 <dict>
7449 <key>name</key>
7450 <string>keyword.operator.spread.ts</string>
7451 </dict>
7452 </dict>
7453 <key>end</key>
7454 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
7455 <key>patterns</key>
7456 <array>
7457 <dict>
7458 <key>include</key>
7459 <string>#type</string>
7460 </dict>
7461 </array>
7462 </dict>
7463 <dict>
7464 <key>include</key>
7465 <string>#punctuation-comma</string>
7466 </dict>
7467 <dict>
7468 <key>include</key>
7469 <string>#punctuation-semicolon</string>
7470 </dict>
7471 <dict>
7472 <key>include</key>
7473 <string>#type</string>
7474 </dict>
7475 </array>
7476 </dict>
7477 <key>type-conditional</key>
7478 <dict>
7479 <key>patterns</key>
7480 <array>
7481 <dict>
7482 <key>begin</key>
7483 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(extends)\s+</string>
7484 <key>beginCaptures</key>
7485 <dict>
7486 <key>1</key>
7487 <dict>
7488 <key>name</key>
7489 <string>storage.modifier.ts</string>
7490 </dict>
7491 </dict>
7492 <key>end</key>
7493 <string>(?&lt;=:)</string>
7494 <key>patterns</key>
7495 <array>
7496 <dict>
7497 <key>begin</key>
7498 <string>\?</string>
7499 <key>beginCaptures</key>
7500 <dict>
7501 <key>0</key>
7502 <dict>
7503 <key>name</key>
7504 <string>keyword.operator.ternary.ts</string>
7505 </dict>
7506 </dict>
7507 <key>end</key>
7508 <string>:</string>
7509 <key>endCaptures</key>
7510 <dict>
7511 <key>0</key>
7512 <dict>
7513 <key>name</key>
7514 <string>keyword.operator.ternary.ts</string>
7515 </dict>
7516 </dict>
7517 <key>patterns</key>
7518 <array>
7519 <dict>
7520 <key>include</key>
7521 <string>#type</string>
7522 </dict>
7523 </array>
7524 </dict>
7525 <dict>
7526 <key>include</key>
7527 <string>#type</string>
7528 </dict>
7529 </array>
7530 </dict>
7531 </array>
7532 </dict>
7533 <key>type-paren-or-function-parameters</key>
7534 <dict>
7535 <key>name</key>
7536 <string>meta.type.paren.cover.ts</string>
7537 <key>begin</key>
7538 <string>\(</string>
7539 <key>beginCaptures</key>
7540 <dict>
7541 <key>0</key>
7542 <dict>
7543 <key>name</key>
7544 <string>meta.brace.round.ts</string>
7545 </dict>
7546 </dict>
7547 <key>end</key>
7548 <string>\)</string>
7549 <key>endCaptures</key>
7550 <dict>
7551 <key>0</key>
7552 <dict>
7553 <key>name</key>
7554 <string>meta.brace.round.ts</string>
7555 </dict>
7556 </dict>
7557 <key>patterns</key>
7558 <array>
7559 <dict>
7560 <key>match</key>
7561 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=\s*(:\s*(
7562 (&lt;) |
7563 ([(]\s*(
7564 ([)]) |
7565 (\.\.\.) |
7566 ([_$[:alnum:]]+\s*(
7567 ([:,?=])|
7568 ([)]\s*=&gt;)
7569 ))
7570 ))
7571)) |
7572(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
7573(:\s*((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))))</string>
7574 <key>captures</key>
7575 <dict>
7576 <key>1</key>
7577 <dict>
7578 <key>name</key>
7579 <string>storage.modifier.ts</string>
7580 </dict>
7581 <key>2</key>
7582 <dict>
7583 <key>name</key>
7584 <string>keyword.operator.rest.ts</string>
7585 </dict>
7586 <key>3</key>
7587 <dict>
7588 <key>name</key>
7589 <string>entity.name.function.ts variable.language.this.ts</string>
7590 </dict>
7591 <key>4</key>
7592 <dict>
7593 <key>name</key>
7594 <string>entity.name.function.ts</string>
7595 </dict>
7596 <key>5</key>
7597 <dict>
7598 <key>name</key>
7599 <string>keyword.operator.optional.ts</string>
7600 </dict>
7601 </dict>
7602 </dict>
7603 <dict>
7604 <key>match</key>
7605 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=:)</string>
7606 <key>captures</key>
7607 <dict>
7608 <key>1</key>
7609 <dict>
7610 <key>name</key>
7611 <string>storage.modifier.ts</string>
7612 </dict>
7613 <key>2</key>
7614 <dict>
7615 <key>name</key>
7616 <string>keyword.operator.rest.ts</string>
7617 </dict>
7618 <key>3</key>
7619 <dict>
7620 <key>name</key>
7621 <string>variable.parameter.ts variable.language.this.ts</string>
7622 </dict>
7623 <key>4</key>
7624 <dict>
7625 <key>name</key>
7626 <string>variable.parameter.ts</string>
7627 </dict>
7628 <key>5</key>
7629 <dict>
7630 <key>name</key>
7631 <string>keyword.operator.optional.ts</string>
7632 </dict>
7633 </dict>
7634 </dict>
7635 <dict>
7636 <key>include</key>
7637 <string>#type-annotation</string>
7638 </dict>
7639 <dict>
7640 <key>name</key>
7641 <string>punctuation.separator.parameter.ts</string>
7642 <key>match</key>
7643 <string>,</string>
7644 </dict>
7645 <dict>
7646 <key>include</key>
7647 <string>#type</string>
7648 </dict>
7649 </array>
7650 </dict>
7651 <key>type-fn-type-parameters</key>
7652 <dict>
7653 <key>patterns</key>
7654 <array>
7655 <dict>
7656 <key>begin</key>
7657 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(new)\b(?=\s*\&lt;)</string>
7658 <key>beginCaptures</key>
7659 <dict>
7660 <key>1</key>
7661 <dict>
7662 <key>name</key>
7663 <string>meta.type.constructor.ts storage.modifier.ts</string>
7664 </dict>
7665 <key>2</key>
7666 <dict>
7667 <key>name</key>
7668 <string>meta.type.constructor.ts keyword.control.new.ts</string>
7669 </dict>
7670 </dict>
7671 <key>end</key>
7672 <string>(?&lt;=&gt;)</string>
7673 <key>patterns</key>
7674 <array>
7675 <dict>
7676 <key>include</key>
7677 <string>#comment</string>
7678 </dict>
7679 <dict>
7680 <key>include</key>
7681 <string>#type-parameters</string>
7682 </dict>
7683 </array>
7684 </dict>
7685 <dict>
7686 <key>name</key>
7687 <string>meta.type.constructor.ts</string>
7688 <key>begin</key>
7689 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(new)\b\s*(?=\()</string>
7690 <key>beginCaptures</key>
7691 <dict>
7692 <key>1</key>
7693 <dict>
7694 <key>name</key>
7695 <string>storage.modifier.ts</string>
7696 </dict>
7697 <key>2</key>
7698 <dict>
7699 <key>name</key>
7700 <string>keyword.control.new.ts</string>
7701 </dict>
7702 </dict>
7703 <key>end</key>
7704 <string>(?&lt;=\))</string>
7705 <key>patterns</key>
7706 <array>
7707 <dict>
7708 <key>include</key>
7709 <string>#function-parameters</string>
7710 </dict>
7711 </array>
7712 </dict>
7713 <dict>
7714 <key>name</key>
7715 <string>meta.type.function.ts</string>
7716 <key>begin</key>
7717 <string>(?x)(
7718 (?=
7719 [(]\s*(
7720 ([)]) |
7721 (\.\.\.) |
7722 ([_$[:alnum:]]+\s*(
7723 ([:,?=])|
7724 ([)]\s*=&gt;)
7725 ))
7726 )
7727 )
7728)</string>
7729 <key>end</key>
7730 <string>(?&lt;=\))</string>
7731 <key>patterns</key>
7732 <array>
7733 <dict>
7734 <key>include</key>
7735 <string>#function-parameters</string>
7736 </dict>
7737 </array>
7738 </dict>
7739 </array>
7740 </dict>
7741 <key>type-function-return-type</key>
7742 <dict>
7743 <key>patterns</key>
7744 <array>
7745 <dict>
7746 <key>name</key>
7747 <string>meta.type.function.return.ts</string>
7748 <key>begin</key>
7749 <string>(=&gt;)(?=\s*\S)</string>
7750 <key>beginCaptures</key>
7751 <dict>
7752 <key>1</key>
7753 <dict>
7754 <key>name</key>
7755 <string>storage.type.function.arrow.ts</string>
7756 </dict>
7757 </dict>
7758 <key>end</key>
7759 <string>(?&lt;!=&gt;)(?&lt;![|&amp;])(?=[,\]\)\{\}=;&gt;:\?]|//|$)</string>
7760 <key>patterns</key>
7761 <array>
7762 <dict>
7763 <key>include</key>
7764 <string>#type-function-return-type-core</string>
7765 </dict>
7766 </array>
7767 </dict>
7768 <dict>
7769 <key>name</key>
7770 <string>meta.type.function.return.ts</string>
7771 <key>begin</key>
7772 <string>=&gt;</string>
7773 <key>beginCaptures</key>
7774 <dict>
7775 <key>0</key>
7776 <dict>
7777 <key>name</key>
7778 <string>storage.type.function.arrow.ts</string>
7779 </dict>
7780 </dict>
7781 <key>end</key>
7782 <string>(?&lt;!=&gt;)(?&lt;![|&amp;])((?=[,\]\)\{\}=;:\?&gt;]|//|^\s*$)|((?&lt;=\S)(?=\s*$)))</string>
7783 <key>patterns</key>
7784 <array>
7785 <dict>
7786 <key>include</key>
7787 <string>#type-function-return-type-core</string>
7788 </dict>
7789 </array>
7790 </dict>
7791 </array>
7792 </dict>
7793 <key>type-function-return-type-core</key>
7794 <dict>
7795 <key>patterns</key>
7796 <array>
7797 <dict>
7798 <key>include</key>
7799 <string>#comment</string>
7800 </dict>
7801 <dict>
7802 <key>begin</key>
7803 <string>(?&lt;==&gt;)(?=\s*\{)</string>
7804 <key>end</key>
7805 <string>(?&lt;=\})</string>
7806 <key>patterns</key>
7807 <array>
7808 <dict>
7809 <key>include</key>
7810 <string>#type-object</string>
7811 </dict>
7812 </array>
7813 </dict>
7814 <dict>
7815 <key>include</key>
7816 <string>#type-predicate-operator</string>
7817 </dict>
7818 <dict>
7819 <key>include</key>
7820 <string>#type</string>
7821 </dict>
7822 </array>
7823 </dict>
7824 <key>type-operators</key>
7825 <dict>
7826 <key>patterns</key>
7827 <array>
7828 <dict>
7829 <key>include</key>
7830 <string>#typeof-operator</string>
7831 </dict>
7832 <dict>
7833 <key>include</key>
7834 <string>#type-infer</string>
7835 </dict>
7836 <dict>
7837 <key>begin</key>
7838 <string>([&amp;|])(?=\s*\{)</string>
7839 <key>beginCaptures</key>
7840 <dict>
7841 <key>0</key>
7842 <dict>
7843 <key>name</key>
7844 <string>keyword.operator.type.ts</string>
7845 </dict>
7846 </dict>
7847 <key>end</key>
7848 <string>(?&lt;=\})</string>
7849 <key>patterns</key>
7850 <array>
7851 <dict>
7852 <key>include</key>
7853 <string>#type-object</string>
7854 </dict>
7855 </array>
7856 </dict>
7857 <dict>
7858 <key>begin</key>
7859 <string>[&amp;|]</string>
7860 <key>beginCaptures</key>
7861 <dict>
7862 <key>0</key>
7863 <dict>
7864 <key>name</key>
7865 <string>keyword.operator.type.ts</string>
7866 </dict>
7867 </dict>
7868 <key>end</key>
7869 <string>(?=\S)</string>
7870 </dict>
7871 <dict>
7872 <key>name</key>
7873 <string>keyword.operator.expression.keyof.ts</string>
7874 <key>match</key>
7875 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))keyof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7876 </dict>
7877 <dict>
7878 <key>name</key>
7879 <string>keyword.operator.ternary.ts</string>
7880 <key>match</key>
7881 <string>(\?|\:)</string>
7882 </dict>
7883 <dict>
7884 <key>name</key>
7885 <string>keyword.operator.expression.import.ts</string>
7886 <key>match</key>
7887 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))import(?=\s*\()</string>
7888 </dict>
7889 </array>
7890 </dict>
7891 <key>type-infer</key>
7892 <dict>
7893 <key>patterns</key>
7894 <array>
7895 <dict>
7896 <key>match</key>
7897 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(infer)\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?:\s+(extends)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))?</string>
7898 <key>name</key>
7899 <string>meta.type.infer.ts</string>
7900 <key>captures</key>
7901 <dict>
7902 <key>1</key>
7903 <dict>
7904 <key>name</key>
7905 <string>keyword.operator.expression.infer.ts</string>
7906 </dict>
7907 <key>2</key>
7908 <dict>
7909 <key>name</key>
7910 <string>entity.name.type.ts</string>
7911 </dict>
7912 <key>3</key>
7913 <dict>
7914 <key>name</key>
7915 <string>keyword.operator.expression.extends.ts</string>
7916 </dict>
7917 </dict>
7918 </dict>
7919 </array>
7920 </dict>
7921 <key>type-predicate-operator</key>
7922 <dict>
7923 <key>patterns</key>
7924 <array>
7925 <dict>
7926 <key>match</key>
7927 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(asserts)\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s(is)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7928 <key>captures</key>
7929 <dict>
7930 <key>1</key>
7931 <dict>
7932 <key>name</key>
7933 <string>keyword.operator.type.asserts.ts</string>
7934 </dict>
7935 <key>2</key>
7936 <dict>
7937 <key>name</key>
7938 <string>variable.parameter.ts variable.language.this.ts</string>
7939 </dict>
7940 <key>3</key>
7941 <dict>
7942 <key>name</key>
7943 <string>variable.parameter.ts</string>
7944 </dict>
7945 <key>4</key>
7946 <dict>
7947 <key>name</key>
7948 <string>keyword.operator.expression.is.ts</string>
7949 </dict>
7950 </dict>
7951 </dict>
7952 <dict>
7953 <key>match</key>
7954 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(asserts)\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7955 <key>captures</key>
7956 <dict>
7957 <key>1</key>
7958 <dict>
7959 <key>name</key>
7960 <string>keyword.operator.type.asserts.ts</string>
7961 </dict>
7962 <key>2</key>
7963 <dict>
7964 <key>name</key>
7965 <string>variable.parameter.ts variable.language.this.ts</string>
7966 </dict>
7967 <key>3</key>
7968 <dict>
7969 <key>name</key>
7970 <string>variable.parameter.ts</string>
7971 </dict>
7972 </dict>
7973 </dict>
7974 <dict>
7975 <key>name</key>
7976 <string>keyword.operator.type.asserts.ts</string>
7977 <key>match</key>
7978 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))asserts(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7979 </dict>
7980 <dict>
7981 <key>name</key>
7982 <string>keyword.operator.expression.is.ts</string>
7983 <key>match</key>
7984 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))is(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7985 </dict>
7986 </array>
7987 </dict>
7988 <key>type-name</key>
7989 <dict>
7990 <key>patterns</key>
7991 <array>
7992 <dict>
7993 <key>begin</key>
7994 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(&lt;)</string>
7995 <key>captures</key>
7996 <dict>
7997 <key>1</key>
7998 <dict>
7999 <key>name</key>
8000 <string>entity.name.type.module.ts</string>
8001 </dict>
8002 <key>2</key>
8003 <dict>
8004 <key>name</key>
8005 <string>punctuation.accessor.ts</string>
8006 </dict>
8007 <key>3</key>
8008 <dict>
8009 <key>name</key>
8010 <string>punctuation.accessor.optional.ts</string>
8011 </dict>
8012 <key>4</key>
8013 <dict>
8014 <key>name</key>
8015 <string>meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts</string>
8016 </dict>
8017 </dict>
8018 <key>end</key>
8019 <string>(&gt;)</string>
8020 <key>endCaptures</key>
8021 <dict>
8022 <key>1</key>
8023 <dict>
8024 <key>name</key>
8025 <string>meta.type.parameters.ts punctuation.definition.typeparameters.end.ts</string>
8026 </dict>
8027 </dict>
8028 <key>contentName</key>
8029 <string>meta.type.parameters.ts</string>
8030 <key>patterns</key>
8031 <array>
8032 <dict>
8033 <key>include</key>
8034 <string>#type-arguments-body</string>
8035 </dict>
8036 </array>
8037 </dict>
8038 <dict>
8039 <key>begin</key>
8040 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;)</string>
8041 <key>beginCaptures</key>
8042 <dict>
8043 <key>1</key>
8044 <dict>
8045 <key>name</key>
8046 <string>entity.name.type.ts</string>
8047 </dict>
8048 <key>2</key>
8049 <dict>
8050 <key>name</key>
8051 <string>meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts</string>
8052 </dict>
8053 </dict>
8054 <key>end</key>
8055 <string>(&gt;)</string>
8056 <key>endCaptures</key>
8057 <dict>
8058 <key>1</key>
8059 <dict>
8060 <key>name</key>
8061 <string>meta.type.parameters.ts punctuation.definition.typeparameters.end.ts</string>
8062 </dict>
8063 </dict>
8064 <key>contentName</key>
8065 <string>meta.type.parameters.ts</string>
8066 <key>patterns</key>
8067 <array>
8068 <dict>
8069 <key>include</key>
8070 <string>#type-arguments-body</string>
8071 </dict>
8072 </array>
8073 </dict>
8074 <dict>
8075 <key>match</key>
8076 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))</string>
8077 <key>captures</key>
8078 <dict>
8079 <key>1</key>
8080 <dict>
8081 <key>name</key>
8082 <string>entity.name.type.module.ts</string>
8083 </dict>
8084 <key>2</key>
8085 <dict>
8086 <key>name</key>
8087 <string>punctuation.accessor.ts</string>
8088 </dict>
8089 <key>3</key>
8090 <dict>
8091 <key>name</key>
8092 <string>punctuation.accessor.optional.ts</string>
8093 </dict>
8094 </dict>
8095 </dict>
8096 <dict>
8097 <key>name</key>
8098 <string>entity.name.type.ts</string>
8099 <key>match</key>
8100 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
8101 </dict>
8102 </array>
8103 </dict>
8104 <key>punctuation-comma</key>
8105 <dict>
8106 <key>name</key>
8107 <string>punctuation.separator.comma.ts</string>
8108 <key>match</key>
8109 <string>,</string>
8110 </dict>
8111 <key>punctuation-semicolon</key>
8112 <dict>
8113 <key>name</key>
8114 <string>punctuation.terminator.statement.ts</string>
8115 <key>match</key>
8116 <string>;</string>
8117 </dict>
8118 <key>punctuation-accessor</key>
8119 <dict>
8120 <key>match</key>
8121 <string>(?:(\.)|(\?\.(?!\s*[[:digit:]])))</string>
8122 <key>captures</key>
8123 <dict>
8124 <key>1</key>
8125 <dict>
8126 <key>name</key>
8127 <string>punctuation.accessor.ts</string>
8128 </dict>
8129 <key>2</key>
8130 <dict>
8131 <key>name</key>
8132 <string>punctuation.accessor.optional.ts</string>
8133 </dict>
8134 </dict>
8135 </dict>
8136 <key>string</key>
8137 <dict>
8138 <key>patterns</key>
8139 <array>
8140 <dict>
8141 <key>include</key>
8142 <string>#qstring-single</string>
8143 </dict>
8144 <dict>
8145 <key>include</key>
8146 <string>#qstring-double</string>
8147 </dict>
8148 <dict>
8149 <key>include</key>
8150 <string>#template</string>
8151 </dict>
8152 </array>
8153 </dict>
8154 <key>qstring-double</key>
8155 <dict>
8156 <key>name</key>
8157 <string>string.quoted.double.ts</string>
8158 <key>begin</key>
8159 <string>"</string>
8160 <key>beginCaptures</key>
8161 <dict>
8162 <key>0</key>
8163 <dict>
8164 <key>name</key>
8165 <string>punctuation.definition.string.begin.ts</string>
8166 </dict>
8167 </dict>
8168 <key>end</key>
8169 <string>(")|((?:[^\\\n])$)</string>
8170 <key>endCaptures</key>
8171 <dict>
8172 <key>1</key>
8173 <dict>
8174 <key>name</key>
8175 <string>punctuation.definition.string.end.ts</string>
8176 </dict>
8177 <key>2</key>
8178 <dict>
8179 <key>name</key>
8180 <string>invalid.illegal.newline.ts</string>
8181 </dict>
8182 </dict>
8183 <key>patterns</key>
8184 <array>
8185 <dict>
8186 <key>include</key>
8187 <string>#string-character-escape</string>
8188 </dict>
8189 </array>
8190 </dict>
8191 <key>qstring-single</key>
8192 <dict>
8193 <key>name</key>
8194 <string>string.quoted.single.ts</string>
8195 <key>begin</key>
8196 <string>'</string>
8197 <key>beginCaptures</key>
8198 <dict>
8199 <key>0</key>
8200 <dict>
8201 <key>name</key>
8202 <string>punctuation.definition.string.begin.ts</string>
8203 </dict>
8204 </dict>
8205 <key>end</key>
8206 <string>(\')|((?:[^\\\n])$)</string>
8207 <key>endCaptures</key>
8208 <dict>
8209 <key>1</key>
8210 <dict>
8211 <key>name</key>
8212 <string>punctuation.definition.string.end.ts</string>
8213 </dict>
8214 <key>2</key>
8215 <dict>
8216 <key>name</key>
8217 <string>invalid.illegal.newline.ts</string>
8218 </dict>
8219 </dict>
8220 <key>patterns</key>
8221 <array>
8222 <dict>
8223 <key>include</key>
8224 <string>#string-character-escape</string>
8225 </dict>
8226 </array>
8227 </dict>
8228 <key>string-character-escape</key>
8229 <dict>
8230 <key>name</key>
8231 <string>constant.character.escape.ts</string>
8232 <key>match</key>
8233 <string>\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\{[0-9A-Fa-f]+\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)</string>
8234 </dict>
8235 <key>template</key>
8236 <dict>
8237 <key>patterns</key>
8238 <array>
8239 <dict>
8240 <key>include</key>
8241 <string>#template-call</string>
8242 </dict>
8243 <dict>
8244 <key>contentName</key>
8245 <string>string.template.ts</string>
8246 <key>begin</key>
8247 <string>([_$[:alpha:]][_$[:alnum:]]*)?(`)</string>
8248 <key>beginCaptures</key>
8249 <dict>
8250 <key>1</key>
8251 <dict>
8252 <key>name</key>
8253 <string>entity.name.function.tagged-template.ts</string>
8254 </dict>
8255 <key>2</key>
8256 <dict>
8257 <key>name</key>
8258 <string>string.template.ts punctuation.definition.string.template.begin.ts</string>
8259 </dict>
8260 </dict>
8261 <key>end</key>
8262 <string>`</string>
8263 <key>endCaptures</key>
8264 <dict>
8265 <key>0</key>
8266 <dict>
8267 <key>name</key>
8268 <string>string.template.ts punctuation.definition.string.template.end.ts</string>
8269 </dict>
8270 </dict>
8271 <key>patterns</key>
8272 <array>
8273 <dict>
8274 <key>include</key>
8275 <string>#template-substitution-element</string>
8276 </dict>
8277 <dict>
8278 <key>include</key>
8279 <string>#string-character-escape</string>
8280 </dict>
8281 </array>
8282 </dict>
8283 </array>
8284 </dict>
8285 <key>template-call</key>
8286 <dict>
8287 <key>patterns</key>
8288 <array>
8289 <dict>
8290 <key>begin</key>
8291 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?`)</string>
8292 <key>end</key>
8293 <string>(?=`)</string>
8294 <key>patterns</key>
8295 <array>
8296 <dict>
8297 <key>begin</key>
8298 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))</string>
8299 <key>end</key>
8300 <string>(?=(&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?`)</string>
8301 <key>patterns</key>
8302 <array>
8303 <dict>
8304 <key>include</key>
8305 <string>#support-function-call-identifiers</string>
8306 </dict>
8307 <dict>
8308 <key>name</key>
8309 <string>entity.name.function.tagged-template.ts</string>
8310 <key>match</key>
8311 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
8312 </dict>
8313 </array>
8314 </dict>
8315 <dict>
8316 <key>include</key>
8317 <string>#type-arguments</string>
8318 </dict>
8319 </array>
8320 </dict>
8321 <dict>
8322 <key>begin</key>
8323 <string>([_$[:alpha:]][_$[:alnum:]]*)?\s*(?=(&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)`)</string>
8324 <key>beginCaptures</key>
8325 <dict>
8326 <key>1</key>
8327 <dict>
8328 <key>name</key>
8329 <string>entity.name.function.tagged-template.ts</string>
8330 </dict>
8331 </dict>
8332 <key>end</key>
8333 <string>(?=`)</string>
8334 <key>patterns</key>
8335 <array>
8336 <dict>
8337 <key>include</key>
8338 <string>#type-arguments</string>
8339 </dict>
8340 </array>
8341 </dict>
8342 </array>
8343 </dict>
8344 <key>template-substitution-element</key>
8345 <dict>
8346 <key>name</key>
8347 <string>meta.template.expression.ts</string>
8348 <key>begin</key>
8349 <string>\$\{</string>
8350 <key>beginCaptures</key>
8351 <dict>
8352 <key>0</key>
8353 <dict>
8354 <key>name</key>
8355 <string>punctuation.definition.template-expression.begin.ts</string>
8356 </dict>
8357 </dict>
8358 <key>end</key>
8359 <string>\}</string>
8360 <key>endCaptures</key>
8361 <dict>
8362 <key>0</key>
8363 <dict>
8364 <key>name</key>
8365 <string>punctuation.definition.template-expression.end.ts</string>
8366 </dict>
8367 </dict>
8368 <key>patterns</key>
8369 <array>
8370 <dict>
8371 <key>include</key>
8372 <string>#expression</string>
8373 </dict>
8374 </array>
8375 <key>contentName</key>
8376 <string>meta.embedded.line.ts</string>
8377 </dict>
8378 <key>type-string</key>
8379 <dict>
8380 <key>patterns</key>
8381 <array>
8382 <dict>
8383 <key>include</key>
8384 <string>#qstring-single</string>
8385 </dict>
8386 <dict>
8387 <key>include</key>
8388 <string>#qstring-double</string>
8389 </dict>
8390 <dict>
8391 <key>include</key>
8392 <string>#template-type</string>
8393 </dict>
8394 </array>
8395 </dict>
8396 <key>template-type</key>
8397 <dict>
8398 <key>patterns</key>
8399 <array>
8400 <dict>
8401 <key>include</key>
8402 <string>#template-call</string>
8403 </dict>
8404 <dict>
8405 <key>contentName</key>
8406 <string>string.template.ts</string>
8407 <key>begin</key>
8408 <string>([_$[:alpha:]][_$[:alnum:]]*)?(`)</string>
8409 <key>beginCaptures</key>
8410 <dict>
8411 <key>1</key>
8412 <dict>
8413 <key>name</key>
8414 <string>entity.name.function.tagged-template.ts</string>
8415 </dict>
8416 <key>2</key>
8417 <dict>
8418 <key>name</key>
8419 <string>string.template.ts punctuation.definition.string.template.begin.ts</string>
8420 </dict>
8421 </dict>
8422 <key>end</key>
8423 <string>`</string>
8424 <key>endCaptures</key>
8425 <dict>
8426 <key>0</key>
8427 <dict>
8428 <key>name</key>
8429 <string>string.template.ts punctuation.definition.string.template.end.ts</string>
8430 </dict>
8431 </dict>
8432 <key>patterns</key>
8433 <array>
8434 <dict>
8435 <key>include</key>
8436 <string>#template-type-substitution-element</string>
8437 </dict>
8438 <dict>
8439 <key>include</key>
8440 <string>#string-character-escape</string>
8441 </dict>
8442 </array>
8443 </dict>
8444 </array>
8445 </dict>
8446 <key>template-type-substitution-element</key>
8447 <dict>
8448 <key>name</key>
8449 <string>meta.template.expression.ts</string>
8450 <key>begin</key>
8451 <string>\$\{</string>
8452 <key>beginCaptures</key>
8453 <dict>
8454 <key>0</key>
8455 <dict>
8456 <key>name</key>
8457 <string>punctuation.definition.template-expression.begin.ts</string>
8458 </dict>
8459 </dict>
8460 <key>end</key>
8461 <string>\}</string>
8462 <key>endCaptures</key>
8463 <dict>
8464 <key>0</key>
8465 <dict>
8466 <key>name</key>
8467 <string>punctuation.definition.template-expression.end.ts</string>
8468 </dict>
8469 </dict>
8470 <key>patterns</key>
8471 <array>
8472 <dict>
8473 <key>include</key>
8474 <string>#type</string>
8475 </dict>
8476 </array>
8477 <key>contentName</key>
8478 <string>meta.embedded.line.ts</string>
8479 </dict>
8480 <key>regex</key>
8481 <dict>
8482 <key>patterns</key>
8483 <array>
8484 <dict>
8485 <key>name</key>
8486 <string>string.regexp.ts</string>
8487 <key>begin</key>
8488 <string>(?&lt;!\+\+|--|})(?&lt;=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
8489 <key>beginCaptures</key>
8490 <dict>
8491 <key>1</key>
8492 <dict>
8493 <key>name</key>
8494 <string>punctuation.definition.string.begin.ts</string>
8495 </dict>
8496 </dict>
8497 <key>end</key>
8498 <string>(/)([dgimsuvy]*)</string>
8499 <key>endCaptures</key>
8500 <dict>
8501 <key>1</key>
8502 <dict>
8503 <key>name</key>
8504 <string>punctuation.definition.string.end.ts</string>
8505 </dict>
8506 <key>2</key>
8507 <dict>
8508 <key>name</key>
8509 <string>keyword.other.ts</string>
8510 </dict>
8511 </dict>
8512 <key>patterns</key>
8513 <array>
8514 <dict>
8515 <key>include</key>
8516 <string>#regexp</string>
8517 </dict>
8518 </array>
8519 </dict>
8520 <dict>
8521 <key>name</key>
8522 <string>string.regexp.ts</string>
8523 <key>begin</key>
8524 <string>((?&lt;![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?&lt;=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
8525 <key>beginCaptures</key>
8526 <dict>
8527 <key>0</key>
8528 <dict>
8529 <key>name</key>
8530 <string>punctuation.definition.string.begin.ts</string>
8531 </dict>
8532 </dict>
8533 <key>end</key>
8534 <string>(/)([dgimsuvy]*)</string>
8535 <key>endCaptures</key>
8536 <dict>
8537 <key>1</key>
8538 <dict>
8539 <key>name</key>
8540 <string>punctuation.definition.string.end.ts</string>
8541 </dict>
8542 <key>2</key>
8543 <dict>
8544 <key>name</key>
8545 <string>keyword.other.ts</string>
8546 </dict>
8547 </dict>
8548 <key>patterns</key>
8549 <array>
8550 <dict>
8551 <key>include</key>
8552 <string>#regexp</string>
8553 </dict>
8554 </array>
8555 </dict>
8556 </array>
8557 </dict>
8558 <key>regexp</key>
8559 <dict>
8560 <key>patterns</key>
8561 <array>
8562 <dict>
8563 <key>name</key>
8564 <string>keyword.control.anchor.regexp</string>
8565 <key>match</key>
8566 <string>\\[bB]|\^|\$</string>
8567 </dict>
8568 <dict>
8569 <key>match</key>
8570 <string>\\[1-9]\d*|\\k&lt;([a-zA-Z_$][\w$]*)&gt;</string>
8571 <key>captures</key>
8572 <dict>
8573 <key>0</key>
8574 <dict>
8575 <key>name</key>
8576 <string>keyword.other.back-reference.regexp</string>
8577 </dict>
8578 <key>1</key>
8579 <dict>
8580 <key>name</key>
8581 <string>variable.other.regexp</string>
8582 </dict>
8583 </dict>
8584 </dict>
8585 <dict>
8586 <key>name</key>
8587 <string>keyword.operator.quantifier.regexp</string>
8588 <key>match</key>
8589 <string>[?+*]|\{(\d+,\d+|\d+,|,\d+|\d+)\}\??</string>
8590 </dict>
8591 <dict>
8592 <key>name</key>
8593 <string>keyword.operator.or.regexp</string>
8594 <key>match</key>
8595 <string>\|</string>
8596 </dict>
8597 <dict>
8598 <key>name</key>
8599 <string>meta.group.assertion.regexp</string>
8600 <key>begin</key>
8601 <string>(\()((\?=)|(\?!)|(\?&lt;=)|(\?&lt;!))</string>
8602 <key>beginCaptures</key>
8603 <dict>
8604 <key>1</key>
8605 <dict>
8606 <key>name</key>
8607 <string>punctuation.definition.group.regexp</string>
8608 </dict>
8609 <key>2</key>
8610 <dict>
8611 <key>name</key>
8612 <string>punctuation.definition.group.assertion.regexp</string>
8613 </dict>
8614 <key>3</key>
8615 <dict>
8616 <key>name</key>
8617 <string>meta.assertion.look-ahead.regexp</string>
8618 </dict>
8619 <key>4</key>
8620 <dict>
8621 <key>name</key>
8622 <string>meta.assertion.negative-look-ahead.regexp</string>
8623 </dict>
8624 <key>5</key>
8625 <dict>
8626 <key>name</key>
8627 <string>meta.assertion.look-behind.regexp</string>
8628 </dict>
8629 <key>6</key>
8630 <dict>
8631 <key>name</key>
8632 <string>meta.assertion.negative-look-behind.regexp</string>
8633 </dict>
8634 </dict>
8635 <key>end</key>
8636 <string>(\))</string>
8637 <key>endCaptures</key>
8638 <dict>
8639 <key>1</key>
8640 <dict>
8641 <key>name</key>
8642 <string>punctuation.definition.group.regexp</string>
8643 </dict>
8644 </dict>
8645 <key>patterns</key>
8646 <array>
8647 <dict>
8648 <key>include</key>
8649 <string>#regexp</string>
8650 </dict>
8651 </array>
8652 </dict>
8653 <dict>
8654 <key>name</key>
8655 <string>meta.group.regexp</string>
8656 <key>begin</key>
8657 <string>\((?:(\?:)|(?:\?&lt;([a-zA-Z_$][\w$]*)&gt;))?</string>
8658 <key>beginCaptures</key>
8659 <dict>
8660 <key>0</key>
8661 <dict>
8662 <key>name</key>
8663 <string>punctuation.definition.group.regexp</string>
8664 </dict>
8665 <key>1</key>
8666 <dict>
8667 <key>name</key>
8668 <string>punctuation.definition.group.no-capture.regexp</string>
8669 </dict>
8670 <key>2</key>
8671 <dict>
8672 <key>name</key>
8673 <string>variable.other.regexp</string>
8674 </dict>
8675 </dict>
8676 <key>end</key>
8677 <string>\)</string>
8678 <key>endCaptures</key>
8679 <dict>
8680 <key>0</key>
8681 <dict>
8682 <key>name</key>
8683 <string>punctuation.definition.group.regexp</string>
8684 </dict>
8685 </dict>
8686 <key>patterns</key>
8687 <array>
8688 <dict>
8689 <key>include</key>
8690 <string>#regexp</string>
8691 </dict>
8692 </array>
8693 </dict>
8694 <dict>
8695 <key>name</key>
8696 <string>constant.other.character-class.set.regexp</string>
8697 <key>begin</key>
8698 <string>(\[)(\^)?</string>
8699 <key>beginCaptures</key>
8700 <dict>
8701 <key>1</key>
8702 <dict>
8703 <key>name</key>
8704 <string>punctuation.definition.character-class.regexp</string>
8705 </dict>
8706 <key>2</key>
8707 <dict>
8708 <key>name</key>
8709 <string>keyword.operator.negation.regexp</string>
8710 </dict>
8711 </dict>
8712 <key>end</key>
8713 <string>(\])</string>
8714 <key>endCaptures</key>
8715 <dict>
8716 <key>1</key>
8717 <dict>
8718 <key>name</key>
8719 <string>punctuation.definition.character-class.regexp</string>
8720 </dict>
8721 </dict>
8722 <key>patterns</key>
8723 <array>
8724 <dict>
8725 <key>name</key>
8726 <string>constant.other.character-class.range.regexp</string>
8727 <key>match</key>
8728 <string>(?:.|(\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\c[A-Z])|(\\.))\-(?:[^\]\\]|(\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\c[A-Z])|(\\.))</string>
8729 <key>captures</key>
8730 <dict>
8731 <key>1</key>
8732 <dict>
8733 <key>name</key>
8734 <string>constant.character.numeric.regexp</string>
8735 </dict>
8736 <key>2</key>
8737 <dict>
8738 <key>name</key>
8739 <string>constant.character.control.regexp</string>
8740 </dict>
8741 <key>3</key>
8742 <dict>
8743 <key>name</key>
8744 <string>constant.character.escape.backslash.regexp</string>
8745 </dict>
8746 <key>4</key>
8747 <dict>
8748 <key>name</key>
8749 <string>constant.character.numeric.regexp</string>
8750 </dict>
8751 <key>5</key>
8752 <dict>
8753 <key>name</key>
8754 <string>constant.character.control.regexp</string>
8755 </dict>
8756 <key>6</key>
8757 <dict>
8758 <key>name</key>
8759 <string>constant.character.escape.backslash.regexp</string>
8760 </dict>
8761 </dict>
8762 </dict>
8763 <dict>
8764 <key>include</key>
8765 <string>#regex-character-class</string>
8766 </dict>
8767 </array>
8768 </dict>
8769 <dict>
8770 <key>include</key>
8771 <string>#regex-character-class</string>
8772 </dict>
8773 </array>
8774 </dict>
8775 <key>regex-character-class</key>
8776 <dict>
8777 <key>patterns</key>
8778 <array>
8779 <dict>
8780 <key>name</key>
8781 <string>constant.other.character-class.regexp</string>
8782 <key>match</key>
8783 <string>\\[wWsSdDtrnvf]|\.</string>
8784 </dict>
8785 <dict>
8786 <key>name</key>
8787 <string>constant.character.numeric.regexp</string>
8788 <key>match</key>
8789 <string>\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})</string>
8790 </dict>
8791 <dict>
8792 <key>name</key>
8793 <string>constant.character.control.regexp</string>
8794 <key>match</key>
8795 <string>\\c[A-Z]</string>
8796 </dict>
8797 <dict>
8798 <key>name</key>
8799 <string>constant.character.escape.backslash.regexp</string>
8800 <key>match</key>
8801 <string>\\.</string>
8802 </dict>
8803 </array>
8804 </dict>
8805 <key>comment</key>
8806 <dict>
8807 <key>patterns</key>
8808 <array>
8809 <dict>
8810 <key>name</key>
8811 <string>comment.block.documentation.ts</string>
8812 <key>begin</key>
8813 <string>/\*\*(?!/)</string>
8814 <key>beginCaptures</key>
8815 <dict>
8816 <key>0</key>
8817 <dict>
8818 <key>name</key>
8819 <string>punctuation.definition.comment.ts</string>
8820 </dict>
8821 </dict>
8822 <key>end</key>
8823 <string>\*/</string>
8824 <key>endCaptures</key>
8825 <dict>
8826 <key>0</key>
8827 <dict>
8828 <key>name</key>
8829 <string>punctuation.definition.comment.ts</string>
8830 </dict>
8831 </dict>
8832 <key>patterns</key>
8833 <array>
8834 <dict>
8835 <key>include</key>
8836 <string>#docblock</string>
8837 </dict>
8838 </array>
8839 </dict>
8840 <dict>
8841 <key>name</key>
8842 <string>comment.block.ts</string>
8843 <key>begin</key>
8844 <string>(/\*)(?:\s*((@)internal)(?=\s|(\*/)))?</string>
8845 <key>beginCaptures</key>
8846 <dict>
8847 <key>1</key>
8848 <dict>
8849 <key>name</key>
8850 <string>punctuation.definition.comment.ts</string>
8851 </dict>
8852 <key>2</key>
8853 <dict>
8854 <key>name</key>
8855 <string>storage.type.internaldeclaration.ts</string>
8856 </dict>
8857 <key>3</key>
8858 <dict>
8859 <key>name</key>
8860 <string>punctuation.decorator.internaldeclaration.ts</string>
8861 </dict>
8862 </dict>
8863 <key>end</key>
8864 <string>\*/</string>
8865 <key>endCaptures</key>
8866 <dict>
8867 <key>0</key>
8868 <dict>
8869 <key>name</key>
8870 <string>punctuation.definition.comment.ts</string>
8871 </dict>
8872 </dict>
8873 </dict>
8874 <dict>
8875 <key>begin</key>
8876 <string>(^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?)</string>
8877 <key>beginCaptures</key>
8878 <dict>
8879 <key>1</key>
8880 <dict>
8881 <key>name</key>
8882 <string>punctuation.whitespace.comment.leading.ts</string>
8883 </dict>
8884 <key>2</key>
8885 <dict>
8886 <key>name</key>
8887 <string>comment.line.double-slash.ts</string>
8888 </dict>
8889 <key>3</key>
8890 <dict>
8891 <key>name</key>
8892 <string>punctuation.definition.comment.ts</string>
8893 </dict>
8894 <key>4</key>
8895 <dict>
8896 <key>name</key>
8897 <string>storage.type.internaldeclaration.ts</string>
8898 </dict>
8899 <key>5</key>
8900 <dict>
8901 <key>name</key>
8902 <string>punctuation.decorator.internaldeclaration.ts</string>
8903 </dict>
8904 </dict>
8905 <key>end</key>
8906 <string>(?=$)</string>
8907 <key>contentName</key>
8908 <string>comment.line.double-slash.ts</string>
8909 </dict>
8910 </array>
8911 </dict>
8912 <key>single-line-comment-consuming-line-ending</key>
8913 <dict>
8914 <key>begin</key>
8915 <string>(^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?)</string>
8916 <key>beginCaptures</key>
8917 <dict>
8918 <key>1</key>
8919 <dict>
8920 <key>name</key>
8921 <string>punctuation.whitespace.comment.leading.ts</string>
8922 </dict>
8923 <key>2</key>
8924 <dict>
8925 <key>name</key>
8926 <string>comment.line.double-slash.ts</string>
8927 </dict>
8928 <key>3</key>
8929 <dict>
8930 <key>name</key>
8931 <string>punctuation.definition.comment.ts</string>
8932 </dict>
8933 <key>4</key>
8934 <dict>
8935 <key>name</key>
8936 <string>storage.type.internaldeclaration.ts</string>
8937 </dict>
8938 <key>5</key>
8939 <dict>
8940 <key>name</key>
8941 <string>punctuation.decorator.internaldeclaration.ts</string>
8942 </dict>
8943 </dict>
8944 <key>end</key>
8945 <string>(?=^)</string>
8946 <key>contentName</key>
8947 <string>comment.line.double-slash.ts</string>
8948 </dict>
8949 <key>directives</key>
8950 <dict>
8951 <key>name</key>
8952 <string>comment.line.triple-slash.directive.ts</string>
8953 <key>begin</key>
8954 <string>^(///)\s*(?=&lt;(reference|amd-dependency|amd-module)(\s+(path|types|no-default-lib|lib|name|resolution-mode)\s*=\s*((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))+\s*/&gt;\s*$)</string>
8955 <key>beginCaptures</key>
8956 <dict>
8957 <key>1</key>
8958 <dict>
8959 <key>name</key>
8960 <string>punctuation.definition.comment.ts</string>
8961 </dict>
8962 </dict>
8963 <key>end</key>
8964 <string>(?=$)</string>
8965 <key>patterns</key>
8966 <array>
8967 <dict>
8968 <key>name</key>
8969 <string>meta.tag.ts</string>
8970 <key>begin</key>
8971 <string>(&lt;)(reference|amd-dependency|amd-module)</string>
8972 <key>beginCaptures</key>
8973 <dict>
8974 <key>1</key>
8975 <dict>
8976 <key>name</key>
8977 <string>punctuation.definition.tag.directive.ts</string>
8978 </dict>
8979 <key>2</key>
8980 <dict>
8981 <key>name</key>
8982 <string>entity.name.tag.directive.ts</string>
8983 </dict>
8984 </dict>
8985 <key>end</key>
8986 <string>/&gt;</string>
8987 <key>endCaptures</key>
8988 <dict>
8989 <key>0</key>
8990 <dict>
8991 <key>name</key>
8992 <string>punctuation.definition.tag.directive.ts</string>
8993 </dict>
8994 </dict>
8995 <key>patterns</key>
8996 <array>
8997 <dict>
8998 <key>name</key>
8999 <string>entity.other.attribute-name.directive.ts</string>
9000 <key>match</key>
9001 <string>path|types|no-default-lib|lib|name|resolution-mode</string>
9002 </dict>
9003 <dict>
9004 <key>name</key>
9005 <string>keyword.operator.assignment.ts</string>
9006 <key>match</key>
9007 <string>=</string>
9008 </dict>
9009 <dict>
9010 <key>include</key>
9011 <string>#string</string>
9012 </dict>
9013 </array>
9014 </dict>
9015 </array>
9016 </dict>
9017 <key>docblock</key>
9018 <dict>
9019 <key>patterns</key>
9020 <array>
9021 <dict>
9022 <key>match</key>
9023 <string>(?x)
9024((@)(?:access|api))
9025\s+
9026(private|protected|public)
9027\b</string>
9028 <key>captures</key>
9029 <dict>
9030 <key>1</key>
9031 <dict>
9032 <key>name</key>
9033 <string>storage.type.class.jsdoc</string>
9034 </dict>
9035 <key>2</key>
9036 <dict>
9037 <key>name</key>
9038 <string>punctuation.definition.block.tag.jsdoc</string>
9039 </dict>
9040 <key>3</key>
9041 <dict>
9042 <key>name</key>
9043 <string>constant.language.access-type.jsdoc</string>
9044 </dict>
9045 </dict>
9046 </dict>
9047 <dict>
9048 <key>match</key>
9049 <string>(?x)
9050((@)author)
9051\s+
9052(
9053 [^@\s&lt;&gt;*/]
9054 (?:[^@&lt;&gt;*/]|\*[^/])*
9055)
9056(?:
9057 \s*
9058 (&lt;)
9059 ([^&gt;\s]+)
9060 (&gt;)
9061)?</string>
9062 <key>captures</key>
9063 <dict>
9064 <key>1</key>
9065 <dict>
9066 <key>name</key>
9067 <string>storage.type.class.jsdoc</string>
9068 </dict>
9069 <key>2</key>
9070 <dict>
9071 <key>name</key>
9072 <string>punctuation.definition.block.tag.jsdoc</string>
9073 </dict>
9074 <key>3</key>
9075 <dict>
9076 <key>name</key>
9077 <string>entity.name.type.instance.jsdoc</string>
9078 </dict>
9079 <key>4</key>
9080 <dict>
9081 <key>name</key>
9082 <string>punctuation.definition.bracket.angle.begin.jsdoc</string>
9083 </dict>
9084 <key>5</key>
9085 <dict>
9086 <key>name</key>
9087 <string>constant.other.email.link.underline.jsdoc</string>
9088 </dict>
9089 <key>6</key>
9090 <dict>
9091 <key>name</key>
9092 <string>punctuation.definition.bracket.angle.end.jsdoc</string>
9093 </dict>
9094 </dict>
9095 </dict>
9096 <dict>
9097 <key>match</key>
9098 <string>(?x)
9099((@)borrows) \s+
9100((?:[^@\s*/]|\*[^/])+) # &lt;that namepath&gt;
9101\s+ (as) \s+ # as
9102((?:[^@\s*/]|\*[^/])+) # &lt;this namepath&gt;</string>
9103 <key>captures</key>
9104 <dict>
9105 <key>1</key>
9106 <dict>
9107 <key>name</key>
9108 <string>storage.type.class.jsdoc</string>
9109 </dict>
9110 <key>2</key>
9111 <dict>
9112 <key>name</key>
9113 <string>punctuation.definition.block.tag.jsdoc</string>
9114 </dict>
9115 <key>3</key>
9116 <dict>
9117 <key>name</key>
9118 <string>entity.name.type.instance.jsdoc</string>
9119 </dict>
9120 <key>4</key>
9121 <dict>
9122 <key>name</key>
9123 <string>keyword.operator.control.jsdoc</string>
9124 </dict>
9125 <key>5</key>
9126 <dict>
9127 <key>name</key>
9128 <string>entity.name.type.instance.jsdoc</string>
9129 </dict>
9130 </dict>
9131 </dict>
9132 <dict>
9133 <key>name</key>
9134 <string>meta.example.jsdoc</string>
9135 <key>begin</key>
9136 <string>((@)example)\s+</string>
9137 <key>end</key>
9138 <string>(?=@|\*/)</string>
9139 <key>beginCaptures</key>
9140 <dict>
9141 <key>1</key>
9142 <dict>
9143 <key>name</key>
9144 <string>storage.type.class.jsdoc</string>
9145 </dict>
9146 <key>2</key>
9147 <dict>
9148 <key>name</key>
9149 <string>punctuation.definition.block.tag.jsdoc</string>
9150 </dict>
9151 </dict>
9152 <key>patterns</key>
9153 <array>
9154 <dict>
9155 <key>match</key>
9156 <string>^\s\*\s+</string>
9157 </dict>
9158 <dict>
9159 <key>contentName</key>
9160 <string>constant.other.description.jsdoc</string>
9161 <key>begin</key>
9162 <string>\G(&lt;)caption(&gt;)</string>
9163 <key>beginCaptures</key>
9164 <dict>
9165 <key>0</key>
9166 <dict>
9167 <key>name</key>
9168 <string>entity.name.tag.inline.jsdoc</string>
9169 </dict>
9170 <key>1</key>
9171 <dict>
9172 <key>name</key>
9173 <string>punctuation.definition.bracket.angle.begin.jsdoc</string>
9174 </dict>
9175 <key>2</key>
9176 <dict>
9177 <key>name</key>
9178 <string>punctuation.definition.bracket.angle.end.jsdoc</string>
9179 </dict>
9180 </dict>
9181 <key>end</key>
9182 <string>(&lt;/)caption(&gt;)|(?=\*/)</string>
9183 <key>endCaptures</key>
9184 <dict>
9185 <key>0</key>
9186 <dict>
9187 <key>name</key>
9188 <string>entity.name.tag.inline.jsdoc</string>
9189 </dict>
9190 <key>1</key>
9191 <dict>
9192 <key>name</key>
9193 <string>punctuation.definition.bracket.angle.begin.jsdoc</string>
9194 </dict>
9195 <key>2</key>
9196 <dict>
9197 <key>name</key>
9198 <string>punctuation.definition.bracket.angle.end.jsdoc</string>
9199 </dict>
9200 </dict>
9201 </dict>
9202 <dict>
9203 <key>match</key>
9204 <string>[^\s@*](?:[^*]|\*[^/])*</string>
9205 <key>captures</key>
9206 <dict>
9207 <key>0</key>
9208 <dict>
9209 <key>name</key>
9210 <string>source.embedded.ts</string>
9211 </dict>
9212 </dict>
9213 </dict>
9214 </array>
9215 </dict>
9216 <dict>
9217 <key>match</key>
9218 <string>(?x) ((@)kind) \s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \b</string>
9219 <key>captures</key>
9220 <dict>
9221 <key>1</key>
9222 <dict>
9223 <key>name</key>
9224 <string>storage.type.class.jsdoc</string>
9225 </dict>
9226 <key>2</key>
9227 <dict>
9228 <key>name</key>
9229 <string>punctuation.definition.block.tag.jsdoc</string>
9230 </dict>
9231 <key>3</key>
9232 <dict>
9233 <key>name</key>
9234 <string>constant.language.symbol-type.jsdoc</string>
9235 </dict>
9236 </dict>
9237 </dict>
9238 <dict>
9239 <key>match</key>
9240 <string>(?x)
9241((@)see)
9242\s+
9243(?:
9244 # URL
9245 (
9246 (?=https?://)
9247 (?:[^\s*]|\*[^/])+
9248 )
9249 |
9250 # JSDoc namepath
9251 (
9252 (?!
9253 # Avoid matching bare URIs (also acceptable as links)
9254 https?://
9255 |
9256 # Avoid matching {@inline tags}; we match those below
9257 (?:\[[^\[\]]*\])? # Possible description [preceding]{@tag}
9258 {@(?:link|linkcode|linkplain|tutorial)\b
9259 )
9260 # Matched namepath
9261 (?:[^@\s*/]|\*[^/])+
9262 )
9263)</string>
9264 <key>captures</key>
9265 <dict>
9266 <key>1</key>
9267 <dict>
9268 <key>name</key>
9269 <string>storage.type.class.jsdoc</string>
9270 </dict>
9271 <key>2</key>
9272 <dict>
9273 <key>name</key>
9274 <string>punctuation.definition.block.tag.jsdoc</string>
9275 </dict>
9276 <key>3</key>
9277 <dict>
9278 <key>name</key>
9279 <string>variable.other.link.underline.jsdoc</string>
9280 </dict>
9281 <key>4</key>
9282 <dict>
9283 <key>name</key>
9284 <string>entity.name.type.instance.jsdoc</string>
9285 </dict>
9286 </dict>
9287 </dict>
9288 <dict>
9289 <key>match</key>
9290 <string>(?x)
9291((@)template)
9292\s+
9293# One or more valid identifiers
9294(
9295 [A-Za-z_$] # First character: non-numeric word character
9296 [\w$.\[\]]* # Rest of identifier
9297 (?: # Possible list of additional identifiers
9298 \s* , \s*
9299 [A-Za-z_$]
9300 [\w$.\[\]]*
9301 )*
9302)</string>
9303 <key>captures</key>
9304 <dict>
9305 <key>1</key>
9306 <dict>
9307 <key>name</key>
9308 <string>storage.type.class.jsdoc</string>
9309 </dict>
9310 <key>2</key>
9311 <dict>
9312 <key>name</key>
9313 <string>punctuation.definition.block.tag.jsdoc</string>
9314 </dict>
9315 <key>3</key>
9316 <dict>
9317 <key>name</key>
9318 <string>variable.other.jsdoc</string>
9319 </dict>
9320 </dict>
9321 </dict>
9322 <dict>
9323 <key>begin</key>
9324 <string>(?x)((@)template)\s+(?={)</string>
9325 <key>beginCaptures</key>
9326 <dict>
9327 <key>1</key>
9328 <dict>
9329 <key>name</key>
9330 <string>storage.type.class.jsdoc</string>
9331 </dict>
9332 <key>2</key>
9333 <dict>
9334 <key>name</key>
9335 <string>punctuation.definition.block.tag.jsdoc</string>
9336 </dict>
9337 </dict>
9338 <key>end</key>
9339 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9340 <key>patterns</key>
9341 <array>
9342 <dict>
9343 <key>include</key>
9344 <string>#jsdoctype</string>
9345 </dict>
9346 <dict>
9347 <key>name</key>
9348 <string>variable.other.jsdoc</string>
9349 <key>match</key>
9350 <string>([A-Za-z_$][\w$.\[\]]*)</string>
9351 </dict>
9352 </array>
9353 </dict>
9354 <dict>
9355 <key>match</key>
9356 <string>(?x)
9357(
9358 (@)
9359 (?:arg|argument|const|constant|member|namespace|param|var)
9360)
9361\s+
9362(
9363 [A-Za-z_$]
9364 [\w$.\[\]]*
9365)</string>
9366 <key>captures</key>
9367 <dict>
9368 <key>1</key>
9369 <dict>
9370 <key>name</key>
9371 <string>storage.type.class.jsdoc</string>
9372 </dict>
9373 <key>2</key>
9374 <dict>
9375 <key>name</key>
9376 <string>punctuation.definition.block.tag.jsdoc</string>
9377 </dict>
9378 <key>3</key>
9379 <dict>
9380 <key>name</key>
9381 <string>variable.other.jsdoc</string>
9382 </dict>
9383 </dict>
9384 </dict>
9385 <dict>
9386 <key>begin</key>
9387 <string>((@)typedef)\s+(?={)</string>
9388 <key>beginCaptures</key>
9389 <dict>
9390 <key>1</key>
9391 <dict>
9392 <key>name</key>
9393 <string>storage.type.class.jsdoc</string>
9394 </dict>
9395 <key>2</key>
9396 <dict>
9397 <key>name</key>
9398 <string>punctuation.definition.block.tag.jsdoc</string>
9399 </dict>
9400 </dict>
9401 <key>end</key>
9402 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9403 <key>patterns</key>
9404 <array>
9405 <dict>
9406 <key>include</key>
9407 <string>#jsdoctype</string>
9408 </dict>
9409 <dict>
9410 <key>name</key>
9411 <string>entity.name.type.instance.jsdoc</string>
9412 <key>match</key>
9413 <string>(?:[^@\s*/]|\*[^/])+</string>
9414 </dict>
9415 </array>
9416 </dict>
9417 <dict>
9418 <key>begin</key>
9419 <string>((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\s+(?={)</string>
9420 <key>beginCaptures</key>
9421 <dict>
9422 <key>1</key>
9423 <dict>
9424 <key>name</key>
9425 <string>storage.type.class.jsdoc</string>
9426 </dict>
9427 <key>2</key>
9428 <dict>
9429 <key>name</key>
9430 <string>punctuation.definition.block.tag.jsdoc</string>
9431 </dict>
9432 </dict>
9433 <key>end</key>
9434 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9435 <key>patterns</key>
9436 <array>
9437 <dict>
9438 <key>include</key>
9439 <string>#jsdoctype</string>
9440 </dict>
9441 <dict>
9442 <key>name</key>
9443 <string>variable.other.jsdoc</string>
9444 <key>match</key>
9445 <string>([A-Za-z_$][\w$.\[\]]*)</string>
9446 </dict>
9447 <dict>
9448 <key>name</key>
9449 <string>variable.other.jsdoc</string>
9450 <key>match</key>
9451 <string>(?x)
9452(\[)\s*
9453[\w$]+
9454(?:
9455 (?:\[\])? # Foo[ ].bar properties within an array
9456 \. # Foo.Bar namespaced parameter
9457 [\w$]+
9458)*
9459(?:
9460 \s*
9461 (=) # [foo=bar] Default parameter value
9462 \s*
9463 (
9464 # The inner regexes are to stop the match early at */ and to not stop at escaped quotes
9465 (?&gt;
9466 "(?:(?:\*(?!/))|(?:\\(?!"))|[^*\\])*?" | # [foo="bar"] Double-quoted
9467 '(?:(?:\*(?!/))|(?:\\(?!'))|[^*\\])*?' | # [foo='bar'] Single-quoted
9468 \[ (?:(?:\*(?!/))|[^*])*? \] | # [foo=[1,2]] Array literal
9469 (?:(?:\*(?!/))|\s(?!\s*\])|\[.*?(?:\]|(?=\*/))|[^*\s\[\]])* # Everything else
9470 )*
9471 )
9472)?
9473\s*(?:(\])((?:[^*\s]|\*[^\s/])+)?|(?=\*/))</string>
9474 <key>captures</key>
9475 <dict>
9476 <key>1</key>
9477 <dict>
9478 <key>name</key>
9479 <string>punctuation.definition.optional-value.begin.bracket.square.jsdoc</string>
9480 </dict>
9481 <key>2</key>
9482 <dict>
9483 <key>name</key>
9484 <string>keyword.operator.assignment.jsdoc</string>
9485 </dict>
9486 <key>3</key>
9487 <dict>
9488 <key>name</key>
9489 <string>source.embedded.ts</string>
9490 </dict>
9491 <key>4</key>
9492 <dict>
9493 <key>name</key>
9494 <string>punctuation.definition.optional-value.end.bracket.square.jsdoc</string>
9495 </dict>
9496 <key>5</key>
9497 <dict>
9498 <key>name</key>
9499 <string>invalid.illegal.syntax.jsdoc</string>
9500 </dict>
9501 </dict>
9502 </dict>
9503 </array>
9504 </dict>
9505 <dict>
9506 <key>begin</key>
9507 <string>(?x)
9508(
9509 (@)
9510 (?:define|enum|exception|export|extends|lends|implements|modifies
9511 |namespace|private|protected|returns?|satisfies|suppress|this|throws|type
9512 |yields?)
9513)
9514\s+(?={)</string>
9515 <key>beginCaptures</key>
9516 <dict>
9517 <key>1</key>
9518 <dict>
9519 <key>name</key>
9520 <string>storage.type.class.jsdoc</string>
9521 </dict>
9522 <key>2</key>
9523 <dict>
9524 <key>name</key>
9525 <string>punctuation.definition.block.tag.jsdoc</string>
9526 </dict>
9527 </dict>
9528 <key>end</key>
9529 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9530 <key>patterns</key>
9531 <array>
9532 <dict>
9533 <key>include</key>
9534 <string>#jsdoctype</string>
9535 </dict>
9536 </array>
9537 </dict>
9538 <dict>
9539 <key>match</key>
9540 <string>(?x)
9541(
9542 (@)
9543 (?:alias|augments|callback|constructs|emits|event|fires|exports?
9544 |extends|external|function|func|host|lends|listens|interface|memberof!?
9545 |method|module|mixes|mixin|name|requires|see|this|typedef|uses)
9546)
9547\s+
9548(
9549 (?:
9550 [^{}@\s*] | \*[^/]
9551 )+
9552)</string>
9553 <key>captures</key>
9554 <dict>
9555 <key>1</key>
9556 <dict>
9557 <key>name</key>
9558 <string>storage.type.class.jsdoc</string>
9559 </dict>
9560 <key>2</key>
9561 <dict>
9562 <key>name</key>
9563 <string>punctuation.definition.block.tag.jsdoc</string>
9564 </dict>
9565 <key>3</key>
9566 <dict>
9567 <key>name</key>
9568 <string>entity.name.type.instance.jsdoc</string>
9569 </dict>
9570 </dict>
9571 </dict>
9572 <dict>
9573 <key>contentName</key>
9574 <string>variable.other.jsdoc</string>
9575 <key>begin</key>
9576 <string>((@)(?:default(?:value)?|license|version))\s+(([''"]))</string>
9577 <key>beginCaptures</key>
9578 <dict>
9579 <key>1</key>
9580 <dict>
9581 <key>name</key>
9582 <string>storage.type.class.jsdoc</string>
9583 </dict>
9584 <key>2</key>
9585 <dict>
9586 <key>name</key>
9587 <string>punctuation.definition.block.tag.jsdoc</string>
9588 </dict>
9589 <key>3</key>
9590 <dict>
9591 <key>name</key>
9592 <string>variable.other.jsdoc</string>
9593 </dict>
9594 <key>4</key>
9595 <dict>
9596 <key>name</key>
9597 <string>punctuation.definition.string.begin.jsdoc</string>
9598 </dict>
9599 </dict>
9600 <key>end</key>
9601 <string>(\3)|(?=$|\*/)</string>
9602 <key>endCaptures</key>
9603 <dict>
9604 <key>0</key>
9605 <dict>
9606 <key>name</key>
9607 <string>variable.other.jsdoc</string>
9608 </dict>
9609 <key>1</key>
9610 <dict>
9611 <key>name</key>
9612 <string>punctuation.definition.string.end.jsdoc</string>
9613 </dict>
9614 </dict>
9615 </dict>
9616 <dict>
9617 <key>match</key>
9618 <string>((@)(?:default(?:value)?|license|tutorial|variation|version))\s+([^\s*]+)</string>
9619 <key>captures</key>
9620 <dict>
9621 <key>1</key>
9622 <dict>
9623 <key>name</key>
9624 <string>storage.type.class.jsdoc</string>
9625 </dict>
9626 <key>2</key>
9627 <dict>
9628 <key>name</key>
9629 <string>punctuation.definition.block.tag.jsdoc</string>
9630 </dict>
9631 <key>3</key>
9632 <dict>
9633 <key>name</key>
9634 <string>variable.other.jsdoc</string>
9635 </dict>
9636 </dict>
9637 </dict>
9638 <dict>
9639 <key>name</key>
9640 <string>storage.type.class.jsdoc</string>
9641 <key>match</key>
9642 <string>(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \b</string>
9643 <key>captures</key>
9644 <dict>
9645 <key>1</key>
9646 <dict>
9647 <key>name</key>
9648 <string>punctuation.definition.block.tag.jsdoc</string>
9649 </dict>
9650 </dict>
9651 </dict>
9652 <dict>
9653 <key>include</key>
9654 <string>#inline-tags</string>
9655 </dict>
9656 <dict>
9657 <key>match</key>
9658 <string>((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\s+)</string>
9659 <key>captures</key>
9660 <dict>
9661 <key>1</key>
9662 <dict>
9663 <key>name</key>
9664 <string>storage.type.class.jsdoc</string>
9665 </dict>
9666 <key>2</key>
9667 <dict>
9668 <key>name</key>
9669 <string>punctuation.definition.block.tag.jsdoc</string>
9670 </dict>
9671 </dict>
9672 </dict>
9673 </array>
9674 </dict>
9675 <key>brackets</key>
9676 <dict>
9677 <key>patterns</key>
9678 <array>
9679 <dict>
9680 <key>begin</key>
9681 <string>{</string>
9682 <key>end</key>
9683 <string>}|(?=\*/)</string>
9684 <key>patterns</key>
9685 <array>
9686 <dict>
9687 <key>include</key>
9688 <string>#brackets</string>
9689 </dict>
9690 </array>
9691 </dict>
9692 <dict>
9693 <key>begin</key>
9694 <string>\[</string>
9695 <key>end</key>
9696 <string>\]|(?=\*/)</string>
9697 <key>patterns</key>
9698 <array>
9699 <dict>
9700 <key>include</key>
9701 <string>#brackets</string>
9702 </dict>
9703 </array>
9704 </dict>
9705 </array>
9706 </dict>
9707 <key>inline-tags</key>
9708 <dict>
9709 <key>patterns</key>
9710 <array>
9711 <dict>
9712 <key>name</key>
9713 <string>constant.other.description.jsdoc</string>
9714 <key>match</key>
9715 <string>(\[)[^\]]+(\])(?={@(?:link|linkcode|linkplain|tutorial))</string>
9716 <key>captures</key>
9717 <dict>
9718 <key>1</key>
9719 <dict>
9720 <key>name</key>
9721 <string>punctuation.definition.bracket.square.begin.jsdoc</string>
9722 </dict>
9723 <key>2</key>
9724 <dict>
9725 <key>name</key>
9726 <string>punctuation.definition.bracket.square.end.jsdoc</string>
9727 </dict>
9728 </dict>
9729 </dict>
9730 <dict>
9731 <key>name</key>
9732 <string>entity.name.type.instance.jsdoc</string>
9733 <key>begin</key>
9734 <string>({)((@)(?:link(?:code|plain)?|tutorial))\s*</string>
9735 <key>beginCaptures</key>
9736 <dict>
9737 <key>1</key>
9738 <dict>
9739 <key>name</key>
9740 <string>punctuation.definition.bracket.curly.begin.jsdoc</string>
9741 </dict>
9742 <key>2</key>
9743 <dict>
9744 <key>name</key>
9745 <string>storage.type.class.jsdoc</string>
9746 </dict>
9747 <key>3</key>
9748 <dict>
9749 <key>name</key>
9750 <string>punctuation.definition.inline.tag.jsdoc</string>
9751 </dict>
9752 </dict>
9753 <key>end</key>
9754 <string>}|(?=\*/)</string>
9755 <key>endCaptures</key>
9756 <dict>
9757 <key>0</key>
9758 <dict>
9759 <key>name</key>
9760 <string>punctuation.definition.bracket.curly.end.jsdoc</string>
9761 </dict>
9762 </dict>
9763 <key>patterns</key>
9764 <array>
9765 <dict>
9766 <key>match</key>
9767 <string>\G((?=https?://)(?:[^|}\s*]|\*[/])+)(\|)?</string>
9768 <key>captures</key>
9769 <dict>
9770 <key>1</key>
9771 <dict>
9772 <key>name</key>
9773 <string>variable.other.link.underline.jsdoc</string>
9774 </dict>
9775 <key>2</key>
9776 <dict>
9777 <key>name</key>
9778 <string>punctuation.separator.pipe.jsdoc</string>
9779 </dict>
9780 </dict>
9781 </dict>
9782 <dict>
9783 <key>match</key>
9784 <string>\G((?:[^{}@\s|*]|\*[^/])+)(\|)?</string>
9785 <key>captures</key>
9786 <dict>
9787 <key>1</key>
9788 <dict>
9789 <key>name</key>
9790 <string>variable.other.description.jsdoc</string>
9791 </dict>
9792 <key>2</key>
9793 <dict>
9794 <key>name</key>
9795 <string>punctuation.separator.pipe.jsdoc</string>
9796 </dict>
9797 </dict>
9798 </dict>
9799 </array>
9800 </dict>
9801 </array>
9802 </dict>
9803 <key>jsdoctype</key>
9804 <dict>
9805 <key>patterns</key>
9806 <array>
9807 <dict>
9808 <key>name</key>
9809 <string>invalid.illegal.type.jsdoc</string>
9810 <key>match</key>
9811 <string>\G{(?:[^}*]|\*[^/}])+$</string>
9812 </dict>
9813 <dict>
9814 <key>contentName</key>
9815 <string>entity.name.type.instance.jsdoc</string>
9816 <key>begin</key>
9817 <string>\G({)</string>
9818 <key>beginCaptures</key>
9819 <dict>
9820 <key>0</key>
9821 <dict>
9822 <key>name</key>
9823 <string>entity.name.type.instance.jsdoc</string>
9824 </dict>
9825 <key>1</key>
9826 <dict>
9827 <key>name</key>
9828 <string>punctuation.definition.bracket.curly.begin.jsdoc</string>
9829 </dict>
9830 </dict>
9831 <key>end</key>
9832 <string>((}))\s*|(?=\*/)</string>
9833 <key>endCaptures</key>
9834 <dict>
9835 <key>1</key>
9836 <dict>
9837 <key>name</key>
9838 <string>entity.name.type.instance.jsdoc</string>
9839 </dict>
9840 <key>2</key>
9841 <dict>
9842 <key>name</key>
9843 <string>punctuation.definition.bracket.curly.end.jsdoc</string>
9844 </dict>
9845 </dict>
9846 <key>patterns</key>
9847 <array>
9848 <dict>
9849 <key>include</key>
9850 <string>#brackets</string>
9851 </dict>
9852 </array>
9853 </dict>
9854 </array>
9855 </dict>
9856 </dict>
9857 </dict>
9858</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/tsx.plist created+10281
......@@ -0,0 +1,10281 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4 <dict>
5 <key>name</key>
6 <string>TypeScriptReact</string>
7 <key>scopeName</key>
8 <string>source.tsx</string>
9 <key>fileTypes</key>
10 <array>
11 <string>tsx</string>
12 </array>
13 <key>uuid</key>
14 <string>805375ec-d614-41f5-8993-5843fe63ea82</string>
15 <key>patterns</key>
16 <array>
17 <dict>
18 <key>include</key>
19 <string>#directives</string>
20 </dict>
21 <dict>
22 <key>include</key>
23 <string>#statements</string>
24 </dict>
25 <dict>
26 <key>include</key>
27 <string>#shebang</string>
28 </dict>
29 </array>
30 <key>repository</key>
31 <dict>
32 <key>shebang</key>
33 <dict>
34 <key>name</key>
35 <string>comment.line.shebang.tsx</string>
36 <key>match</key>
37 <string>\A(#!).*(?=$)</string>
38 <key>captures</key>
39 <dict>
40 <key>1</key>
41 <dict>
42 <key>name</key>
43 <string>punctuation.definition.comment.tsx</string>
44 </dict>
45 </dict>
46 </dict>
47 <key>statements</key>
48 <dict>
49 <key>patterns</key>
50 <array>
51 <dict>
52 <key>include</key>
53 <string>#declaration</string>
54 </dict>
55 <dict>
56 <key>include</key>
57 <string>#control-statement</string>
58 </dict>
59 <dict>
60 <key>include</key>
61 <string>#after-operator-block-as-object-literal</string>
62 </dict>
63 <dict>
64 <key>include</key>
65 <string>#decl-block</string>
66 </dict>
67 <dict>
68 <key>include</key>
69 <string>#label</string>
70 </dict>
71 <dict>
72 <key>include</key>
73 <string>#expression</string>
74 </dict>
75 <dict>
76 <key>include</key>
77 <string>#punctuation-semicolon</string>
78 </dict>
79 <dict>
80 <key>include</key>
81 <string>#string</string>
82 </dict>
83 <dict>
84 <key>include</key>
85 <string>#comment</string>
86 </dict>
87 </array>
88 </dict>
89 <key>declaration</key>
90 <dict>
91 <key>patterns</key>
92 <array>
93 <dict>
94 <key>include</key>
95 <string>#decorator</string>
96 </dict>
97 <dict>
98 <key>include</key>
99 <string>#var-expr</string>
100 </dict>
101 <dict>
102 <key>include</key>
103 <string>#function-declaration</string>
104 </dict>
105 <dict>
106 <key>include</key>
107 <string>#class-declaration</string>
108 </dict>
109 <dict>
110 <key>include</key>
111 <string>#interface-declaration</string>
112 </dict>
113 <dict>
114 <key>include</key>
115 <string>#enum-declaration</string>
116 </dict>
117 <dict>
118 <key>include</key>
119 <string>#namespace-declaration</string>
120 </dict>
121 <dict>
122 <key>include</key>
123 <string>#type-alias-declaration</string>
124 </dict>
125 <dict>
126 <key>include</key>
127 <string>#import-equals-declaration</string>
128 </dict>
129 <dict>
130 <key>include</key>
131 <string>#import-declaration</string>
132 </dict>
133 <dict>
134 <key>include</key>
135 <string>#export-declaration</string>
136 </dict>
137 <dict>
138 <key>name</key>
139 <string>storage.modifier.tsx</string>
140 <key>match</key>
141 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(declare|export)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
142 </dict>
143 </array>
144 </dict>
145 <key>control-statement</key>
146 <dict>
147 <key>patterns</key>
148 <array>
149 <dict>
150 <key>include</key>
151 <string>#switch-statement</string>
152 </dict>
153 <dict>
154 <key>include</key>
155 <string>#for-loop</string>
156 </dict>
157 <dict>
158 <key>name</key>
159 <string>keyword.control.trycatch.tsx</string>
160 <key>match</key>
161 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
162 </dict>
163 <dict>
164 <key>match</key>
165 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(break|continue|goto)\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
166 <key>captures</key>
167 <dict>
168 <key>1</key>
169 <dict>
170 <key>name</key>
171 <string>keyword.control.loop.tsx</string>
172 </dict>
173 <key>2</key>
174 <dict>
175 <key>name</key>
176 <string>entity.name.label.tsx</string>
177 </dict>
178 </dict>
179 </dict>
180 <dict>
181 <key>name</key>
182 <string>keyword.control.loop.tsx</string>
183 <key>match</key>
184 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
185 </dict>
186 <dict>
187 <key>begin</key>
188 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(return)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
189 <key>beginCaptures</key>
190 <dict>
191 <key>0</key>
192 <dict>
193 <key>name</key>
194 <string>keyword.control.flow.tsx</string>
195 </dict>
196 </dict>
197 <key>end</key>
198 <string>(?=[;}]|$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
199 <key>patterns</key>
200 <array>
201 <dict>
202 <key>include</key>
203 <string>#expression</string>
204 </dict>
205 </array>
206 </dict>
207 <dict>
208 <key>name</key>
209 <string>keyword.control.switch.tsx</string>
210 <key>match</key>
211 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
212 </dict>
213 <dict>
214 <key>include</key>
215 <string>#if-statement</string>
216 </dict>
217 <dict>
218 <key>name</key>
219 <string>keyword.control.conditional.tsx</string>
220 <key>match</key>
221 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(else|if)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
222 </dict>
223 <dict>
224 <key>name</key>
225 <string>keyword.control.with.tsx</string>
226 <key>match</key>
227 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(with)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
228 </dict>
229 <dict>
230 <key>name</key>
231 <string>keyword.control.tsx</string>
232 <key>match</key>
233 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(package)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
234 </dict>
235 <dict>
236 <key>name</key>
237 <string>keyword.other.debugger.tsx</string>
238 <key>match</key>
239 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(debugger)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
240 </dict>
241 </array>
242 </dict>
243 <key>label</key>
244 <dict>
245 <key>patterns</key>
246 <array>
247 <dict>
248 <key>begin</key>
249 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*\{)</string>
250 <key>beginCaptures</key>
251 <dict>
252 <key>1</key>
253 <dict>
254 <key>name</key>
255 <string>entity.name.label.tsx</string>
256 </dict>
257 <key>2</key>
258 <dict>
259 <key>name</key>
260 <string>punctuation.separator.label.tsx</string>
261 </dict>
262 </dict>
263 <key>end</key>
264 <string>(?&lt;=\})</string>
265 <key>patterns</key>
266 <array>
267 <dict>
268 <key>include</key>
269 <string>#decl-block</string>
270 </dict>
271 </array>
272 </dict>
273 <dict>
274 <key>match</key>
275 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(:)</string>
276 <key>captures</key>
277 <dict>
278 <key>1</key>
279 <dict>
280 <key>name</key>
281 <string>entity.name.label.tsx</string>
282 </dict>
283 <key>2</key>
284 <dict>
285 <key>name</key>
286 <string>punctuation.separator.label.tsx</string>
287 </dict>
288 </dict>
289 </dict>
290 </array>
291 </dict>
292 <key>expression</key>
293 <dict>
294 <key>patterns</key>
295 <array>
296 <dict>
297 <key>include</key>
298 <string>#expressionWithoutIdentifiers</string>
299 </dict>
300 <dict>
301 <key>include</key>
302 <string>#identifiers</string>
303 </dict>
304 <dict>
305 <key>include</key>
306 <string>#expressionPunctuations</string>
307 </dict>
308 </array>
309 </dict>
310 <key>expressionWithoutIdentifiers</key>
311 <dict>
312 <key>patterns</key>
313 <array>
314 <dict>
315 <key>include</key>
316 <string>#jsx</string>
317 </dict>
318 <dict>
319 <key>include</key>
320 <string>#string</string>
321 </dict>
322 <dict>
323 <key>include</key>
324 <string>#regex</string>
325 </dict>
326 <dict>
327 <key>include</key>
328 <string>#comment</string>
329 </dict>
330 <dict>
331 <key>include</key>
332 <string>#function-expression</string>
333 </dict>
334 <dict>
335 <key>include</key>
336 <string>#class-expression</string>
337 </dict>
338 <dict>
339 <key>include</key>
340 <string>#arrow-function</string>
341 </dict>
342 <dict>
343 <key>include</key>
344 <string>#paren-expression-possibly-arrow</string>
345 </dict>
346 <dict>
347 <key>include</key>
348 <string>#cast</string>
349 </dict>
350 <dict>
351 <key>include</key>
352 <string>#ternary-expression</string>
353 </dict>
354 <dict>
355 <key>include</key>
356 <string>#new-expr</string>
357 </dict>
358 <dict>
359 <key>include</key>
360 <string>#instanceof-expr</string>
361 </dict>
362 <dict>
363 <key>include</key>
364 <string>#object-literal</string>
365 </dict>
366 <dict>
367 <key>include</key>
368 <string>#expression-operators</string>
369 </dict>
370 <dict>
371 <key>include</key>
372 <string>#function-call</string>
373 </dict>
374 <dict>
375 <key>include</key>
376 <string>#literal</string>
377 </dict>
378 <dict>
379 <key>include</key>
380 <string>#support-objects</string>
381 </dict>
382 <dict>
383 <key>include</key>
384 <string>#paren-expression</string>
385 </dict>
386 </array>
387 </dict>
388 <key>expressionPunctuations</key>
389 <dict>
390 <key>patterns</key>
391 <array>
392 <dict>
393 <key>include</key>
394 <string>#punctuation-comma</string>
395 </dict>
396 <dict>
397 <key>include</key>
398 <string>#punctuation-accessor</string>
399 </dict>
400 </array>
401 </dict>
402 <key>decorator</key>
403 <dict>
404 <key>name</key>
405 <string>meta.decorator.tsx</string>
406 <key>begin</key>
407 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))\@</string>
408 <key>beginCaptures</key>
409 <dict>
410 <key>0</key>
411 <dict>
412 <key>name</key>
413 <string>punctuation.decorator.tsx</string>
414 </dict>
415 </dict>
416 <key>end</key>
417 <string>(?=\s)</string>
418 <key>patterns</key>
419 <array>
420 <dict>
421 <key>include</key>
422 <string>#expression</string>
423 </dict>
424 </array>
425 </dict>
426 <key>var-expr</key>
427 <dict>
428 <key>patterns</key>
429 <array>
430 <dict>
431 <key>name</key>
432 <string>meta.var.expr.tsx</string>
433 <key>begin</key>
434 <string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))</string>
435 <key>end</key>
436 <string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=^|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|((?&lt;!^let|[^\._$[:alnum:]]let|^var|[^\._$[:alnum:]]var)(?=\s*$)))</string>
437 <key>patterns</key>
438 <array>
439 <dict>
440 <key>begin</key>
441 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
442 <key>beginCaptures</key>
443 <dict>
444 <key>1</key>
445 <dict>
446 <key>name</key>
447 <string>keyword.control.export.tsx</string>
448 </dict>
449 <key>2</key>
450 <dict>
451 <key>name</key>
452 <string>storage.modifier.tsx</string>
453 </dict>
454 <key>3</key>
455 <dict>
456 <key>name</key>
457 <string>storage.type.tsx</string>
458 </dict>
459 </dict>
460 <key>end</key>
461 <string>(?=\S)</string>
462 </dict>
463 <dict>
464 <key>include</key>
465 <string>#destructuring-variable</string>
466 </dict>
467 <dict>
468 <key>include</key>
469 <string>#var-single-variable</string>
470 </dict>
471 <dict>
472 <key>include</key>
473 <string>#variable-initializer</string>
474 </dict>
475 <dict>
476 <key>include</key>
477 <string>#comment</string>
478 </dict>
479 <dict>
480 <key>begin</key>
481 <string>(,)\s*(?=$|\/\/)</string>
482 <key>beginCaptures</key>
483 <dict>
484 <key>1</key>
485 <dict>
486 <key>name</key>
487 <string>punctuation.separator.comma.tsx</string>
488 </dict>
489 </dict>
490 <key>end</key>
491 <string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|^\s*$))|((?&lt;=\S)(?=\s*$)))</string>
492 <key>patterns</key>
493 <array>
494 <dict>
495 <key>include</key>
496 <string>#single-line-comment-consuming-line-ending</string>
497 </dict>
498 <dict>
499 <key>include</key>
500 <string>#comment</string>
501 </dict>
502 <dict>
503 <key>include</key>
504 <string>#destructuring-variable</string>
505 </dict>
506 <dict>
507 <key>include</key>
508 <string>#var-single-variable</string>
509 </dict>
510 <dict>
511 <key>include</key>
512 <string>#punctuation-comma</string>
513 </dict>
514 </array>
515 </dict>
516 <dict>
517 <key>include</key>
518 <string>#punctuation-comma</string>
519 </dict>
520 </array>
521 </dict>
522 <dict>
523 <key>name</key>
524 <string>meta.var.expr.tsx</string>
525 <key>begin</key>
526 <string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))</string>
527 <key>beginCaptures</key>
528 <dict>
529 <key>1</key>
530 <dict>
531 <key>name</key>
532 <string>keyword.control.export.tsx</string>
533 </dict>
534 <key>2</key>
535 <dict>
536 <key>name</key>
537 <string>storage.modifier.tsx</string>
538 </dict>
539 <key>3</key>
540 <dict>
541 <key>name</key>
542 <string>storage.type.tsx</string>
543 </dict>
544 </dict>
545 <key>end</key>
546 <string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=^|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|((?&lt;!^const|[^\._$[:alnum:]]const)(?=\s*$)))</string>
547 <key>patterns</key>
548 <array>
549 <dict>
550 <key>begin</key>
551 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
552 <key>beginCaptures</key>
553 <dict>
554 <key>1</key>
555 <dict>
556 <key>name</key>
557 <string>keyword.control.export.tsx</string>
558 </dict>
559 <key>2</key>
560 <dict>
561 <key>name</key>
562 <string>storage.modifier.tsx</string>
563 </dict>
564 <key>3</key>
565 <dict>
566 <key>name</key>
567 <string>storage.type.tsx</string>
568 </dict>
569 </dict>
570 <key>end</key>
571 <string>(?=\S)</string>
572 </dict>
573 <dict>
574 <key>include</key>
575 <string>#destructuring-const</string>
576 </dict>
577 <dict>
578 <key>include</key>
579 <string>#var-single-const</string>
580 </dict>
581 <dict>
582 <key>include</key>
583 <string>#variable-initializer</string>
584 </dict>
585 <dict>
586 <key>include</key>
587 <string>#comment</string>
588 </dict>
589 <dict>
590 <key>begin</key>
591 <string>(,)\s*(?=$|\/\/)</string>
592 <key>beginCaptures</key>
593 <dict>
594 <key>1</key>
595 <dict>
596 <key>name</key>
597 <string>punctuation.separator.comma.tsx</string>
598 </dict>
599 </dict>
600 <key>end</key>
601 <string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|^\s*$))|((?&lt;=\S)(?=\s*$)))</string>
602 <key>patterns</key>
603 <array>
604 <dict>
605 <key>include</key>
606 <string>#single-line-comment-consuming-line-ending</string>
607 </dict>
608 <dict>
609 <key>include</key>
610 <string>#comment</string>
611 </dict>
612 <dict>
613 <key>include</key>
614 <string>#destructuring-const</string>
615 </dict>
616 <dict>
617 <key>include</key>
618 <string>#var-single-const</string>
619 </dict>
620 <dict>
621 <key>include</key>
622 <string>#punctuation-comma</string>
623 </dict>
624 </array>
625 </dict>
626 <dict>
627 <key>include</key>
628 <string>#punctuation-comma</string>
629 </dict>
630 </array>
631 </dict>
632 <dict>
633 <key>name</key>
634 <string>meta.var.expr.tsx</string>
635 <key>begin</key>
636 <string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b((?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))</string>
637 <key>beginCaptures</key>
638 <dict>
639 <key>1</key>
640 <dict>
641 <key>name</key>
642 <string>keyword.control.export.tsx</string>
643 </dict>
644 <key>2</key>
645 <dict>
646 <key>name</key>
647 <string>storage.modifier.tsx</string>
648 </dict>
649 <key>3</key>
650 <dict>
651 <key>name</key>
652 <string>storage.type.tsx</string>
653 </dict>
654 </dict>
655 <key>end</key>
656 <string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b((?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|((?&lt;!^using|[^\._$[:alnum:]]using|^await\s+using|[^\._$[:alnum:]]await\s+using)(?=\s*$)))</string>
657 <key>patterns</key>
658 <array>
659 <dict>
660 <key>begin</key>
661 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b((?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
662 <key>beginCaptures</key>
663 <dict>
664 <key>1</key>
665 <dict>
666 <key>name</key>
667 <string>keyword.control.export.tsx</string>
668 </dict>
669 <key>2</key>
670 <dict>
671 <key>name</key>
672 <string>storage.modifier.tsx</string>
673 </dict>
674 <key>3</key>
675 <dict>
676 <key>name</key>
677 <string>storage.type.tsx</string>
678 </dict>
679 </dict>
680 <key>end</key>
681 <string>(?=\S)</string>
682 </dict>
683 <dict>
684 <key>include</key>
685 <string>#var-single-const</string>
686 </dict>
687 <dict>
688 <key>include</key>
689 <string>#variable-initializer</string>
690 </dict>
691 <dict>
692 <key>include</key>
693 <string>#comment</string>
694 </dict>
695 <dict>
696 <key>begin</key>
697 <string>(,)\s*((?!\S)|(?=\/\/))</string>
698 <key>beginCaptures</key>
699 <dict>
700 <key>1</key>
701 <dict>
702 <key>name</key>
703 <string>punctuation.separator.comma.tsx</string>
704 </dict>
705 </dict>
706 <key>end</key>
707 <string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|^\s*$))|((?&lt;=\S)(?=\s*$)))</string>
708 <key>patterns</key>
709 <array>
710 <dict>
711 <key>include</key>
712 <string>#single-line-comment-consuming-line-ending</string>
713 </dict>
714 <dict>
715 <key>include</key>
716 <string>#comment</string>
717 </dict>
718 <dict>
719 <key>include</key>
720 <string>#var-single-const</string>
721 </dict>
722 <dict>
723 <key>include</key>
724 <string>#punctuation-comma</string>
725 </dict>
726 </array>
727 </dict>
728 <dict>
729 <key>include</key>
730 <string>#punctuation-comma</string>
731 </dict>
732 </array>
733 </dict>
734 </array>
735 </dict>
736 <key>var-single-variable</key>
737 <dict>
738 <key>patterns</key>
739 <array>
740 <dict>
741 <key>name</key>
742 <string>meta.var-single-variable.expr.tsx</string>
743 <key>begin</key>
744 <string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(\!)?(?=\s*
745# function assignment |
746(=\s*(
747 ((async\s+)?(
748 (function\s*[(&lt;*]) |
749 (function\s+) |
750 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
751 )) |
752 ((async\s*)?(
753 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
754 # sure shot arrow functions even if =&gt; is on new line
755(
756 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
757 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
758 (
759 ([)]\s*:) | # ():
760 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
761 )
762) |
763(
764 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
765) |
766# arrow function possible to detect only with =&gt; on same line
767(
768 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
769 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
770 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
771 \s*=&gt; # arrow operator
772)
773 ))
774)) |
775# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
776(:\s*(
777 (&lt;) |
778 ([(]\s*(
779 ([)]) |
780 (\.\.\.) |
781 ([_$[:alnum:]]+\s*(
782 ([:,?=])|
783 ([)]\s*=&gt;)
784 ))
785 ))
786)) |
787(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
788(:\s*((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
789(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
790 ((async\s+)?(
791 (function\s*[(&lt;*]) |
792 (function\s+) |
793 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
794 )) |
795 ((async\s*)?(
796 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
797 # sure shot arrow functions even if =&gt; is on new line
798(
799 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
800 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
801 (
802 ([)]\s*:) | # ():
803 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
804 )
805) |
806(
807 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
808) |
809# arrow function possible to detect only with =&gt; on same line
810(
811 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
812 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
813 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
814 \s*=&gt; # arrow operator
815)
816 ))
817)))</string>
818 <key>beginCaptures</key>
819 <dict>
820 <key>1</key>
821 <dict>
822 <key>name</key>
823 <string>meta.definition.variable.tsx entity.name.function.tsx</string>
824 </dict>
825 <key>2</key>
826 <dict>
827 <key>name</key>
828 <string>keyword.operator.definiteassignment.tsx</string>
829 </dict>
830 </dict>
831 <key>end</key>
832 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
833 <key>patterns</key>
834 <array>
835 <dict>
836 <key>include</key>
837 <string>#var-single-variable-type-annotation</string>
838 </dict>
839 </array>
840 </dict>
841 <dict>
842 <key>name</key>
843 <string>meta.var-single-variable.expr.tsx</string>
844 <key>begin</key>
845 <string>([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\!)?</string>
846 <key>beginCaptures</key>
847 <dict>
848 <key>1</key>
849 <dict>
850 <key>name</key>
851 <string>meta.definition.variable.tsx variable.other.constant.tsx</string>
852 </dict>
853 <key>2</key>
854 <dict>
855 <key>name</key>
856 <string>keyword.operator.definiteassignment.tsx</string>
857 </dict>
858 </dict>
859 <key>end</key>
860 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
861 <key>patterns</key>
862 <array>
863 <dict>
864 <key>include</key>
865 <string>#var-single-variable-type-annotation</string>
866 </dict>
867 </array>
868 </dict>
869 <dict>
870 <key>name</key>
871 <string>meta.var-single-variable.expr.tsx</string>
872 <key>begin</key>
873 <string>([_$[:alpha:]][_$[:alnum:]]*)(\!)?</string>
874 <key>beginCaptures</key>
875 <dict>
876 <key>1</key>
877 <dict>
878 <key>name</key>
879 <string>meta.definition.variable.tsx variable.other.readwrite.tsx</string>
880 </dict>
881 <key>2</key>
882 <dict>
883 <key>name</key>
884 <string>keyword.operator.definiteassignment.tsx</string>
885 </dict>
886 </dict>
887 <key>end</key>
888 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
889 <key>patterns</key>
890 <array>
891 <dict>
892 <key>include</key>
893 <string>#var-single-variable-type-annotation</string>
894 </dict>
895 </array>
896 </dict>
897 </array>
898 </dict>
899 <key>var-single-const</key>
900 <dict>
901 <key>patterns</key>
902 <array>
903 <dict>
904 <key>name</key>
905 <string>meta.var-single-variable.expr.tsx</string>
906 <key>begin</key>
907 <string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\s*
908# function assignment |
909(=\s*(
910 ((async\s+)?(
911 (function\s*[(&lt;*]) |
912 (function\s+) |
913 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
914 )) |
915 ((async\s*)?(
916 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
917 # sure shot arrow functions even if =&gt; is on new line
918(
919 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
920 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
921 (
922 ([)]\s*:) | # ():
923 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
924 )
925) |
926(
927 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
928) |
929# arrow function possible to detect only with =&gt; on same line
930(
931 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
932 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
933 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
934 \s*=&gt; # arrow operator
935)
936 ))
937)) |
938# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
939(:\s*(
940 (&lt;) |
941 ([(]\s*(
942 ([)]) |
943 (\.\.\.) |
944 ([_$[:alnum:]]+\s*(
945 ([:,?=])|
946 ([)]\s*=&gt;)
947 ))
948 ))
949)) |
950(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
951(:\s*((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
952(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
953 ((async\s+)?(
954 (function\s*[(&lt;*]) |
955 (function\s+) |
956 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
957 )) |
958 ((async\s*)?(
959 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
960 # sure shot arrow functions even if =&gt; is on new line
961(
962 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
963 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
964 (
965 ([)]\s*:) | # ():
966 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
967 )
968) |
969(
970 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
971) |
972# arrow function possible to detect only with =&gt; on same line
973(
974 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
975 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
976 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
977 \s*=&gt; # arrow operator
978)
979 ))
980)))</string>
981 <key>beginCaptures</key>
982 <dict>
983 <key>1</key>
984 <dict>
985 <key>name</key>
986 <string>meta.definition.variable.tsx variable.other.constant.tsx entity.name.function.tsx</string>
987 </dict>
988 </dict>
989 <key>end</key>
990 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
991 <key>patterns</key>
992 <array>
993 <dict>
994 <key>include</key>
995 <string>#var-single-variable-type-annotation</string>
996 </dict>
997 </array>
998 </dict>
999 <dict>
1000 <key>name</key>
1001 <string>meta.var-single-variable.expr.tsx</string>
1002 <key>begin</key>
1003 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
1004 <key>beginCaptures</key>
1005 <dict>
1006 <key>1</key>
1007 <dict>
1008 <key>name</key>
1009 <string>meta.definition.variable.tsx variable.other.constant.tsx</string>
1010 </dict>
1011 </dict>
1012 <key>end</key>
1013 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
1014 <key>patterns</key>
1015 <array>
1016 <dict>
1017 <key>include</key>
1018 <string>#var-single-variable-type-annotation</string>
1019 </dict>
1020 </array>
1021 </dict>
1022 </array>
1023 </dict>
1024 <key>var-single-variable-type-annotation</key>
1025 <dict>
1026 <key>patterns</key>
1027 <array>
1028 <dict>
1029 <key>include</key>
1030 <string>#type-annotation</string>
1031 </dict>
1032 <dict>
1033 <key>include</key>
1034 <string>#string</string>
1035 </dict>
1036 <dict>
1037 <key>include</key>
1038 <string>#comment</string>
1039 </dict>
1040 </array>
1041 </dict>
1042 <key>destructuring-variable</key>
1043 <dict>
1044 <key>patterns</key>
1045 <array>
1046 <dict>
1047 <key>name</key>
1048 <string>meta.object-binding-pattern-variable.tsx</string>
1049 <key>begin</key>
1050 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{)</string>
1051 <key>end</key>
1052 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1053 <key>patterns</key>
1054 <array>
1055 <dict>
1056 <key>include</key>
1057 <string>#object-binding-pattern</string>
1058 </dict>
1059 <dict>
1060 <key>include</key>
1061 <string>#type-annotation</string>
1062 </dict>
1063 <dict>
1064 <key>include</key>
1065 <string>#comment</string>
1066 </dict>
1067 </array>
1068 </dict>
1069 <dict>
1070 <key>name</key>
1071 <string>meta.array-binding-pattern-variable.tsx</string>
1072 <key>begin</key>
1073 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[)</string>
1074 <key>end</key>
1075 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1076 <key>patterns</key>
1077 <array>
1078 <dict>
1079 <key>include</key>
1080 <string>#array-binding-pattern</string>
1081 </dict>
1082 <dict>
1083 <key>include</key>
1084 <string>#type-annotation</string>
1085 </dict>
1086 <dict>
1087 <key>include</key>
1088 <string>#comment</string>
1089 </dict>
1090 </array>
1091 </dict>
1092 </array>
1093 </dict>
1094 <key>destructuring-const</key>
1095 <dict>
1096 <key>patterns</key>
1097 <array>
1098 <dict>
1099 <key>name</key>
1100 <string>meta.object-binding-pattern-variable.tsx</string>
1101 <key>begin</key>
1102 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{)</string>
1103 <key>end</key>
1104 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1105 <key>patterns</key>
1106 <array>
1107 <dict>
1108 <key>include</key>
1109 <string>#object-binding-pattern-const</string>
1110 </dict>
1111 <dict>
1112 <key>include</key>
1113 <string>#type-annotation</string>
1114 </dict>
1115 <dict>
1116 <key>include</key>
1117 <string>#comment</string>
1118 </dict>
1119 </array>
1120 </dict>
1121 <dict>
1122 <key>name</key>
1123 <string>meta.array-binding-pattern-variable.tsx</string>
1124 <key>begin</key>
1125 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[)</string>
1126 <key>end</key>
1127 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1128 <key>patterns</key>
1129 <array>
1130 <dict>
1131 <key>include</key>
1132 <string>#array-binding-pattern-const</string>
1133 </dict>
1134 <dict>
1135 <key>include</key>
1136 <string>#type-annotation</string>
1137 </dict>
1138 <dict>
1139 <key>include</key>
1140 <string>#comment</string>
1141 </dict>
1142 </array>
1143 </dict>
1144 </array>
1145 </dict>
1146 <key>object-binding-element</key>
1147 <dict>
1148 <key>patterns</key>
1149 <array>
1150 <dict>
1151 <key>include</key>
1152 <string>#comment</string>
1153 </dict>
1154 <dict>
1155 <key>begin</key>
1156 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1157 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1158 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1159 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1160 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1161 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1162 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1163 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1164 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1165)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1166 <key>end</key>
1167 <string>(?=,|\})</string>
1168 <key>patterns</key>
1169 <array>
1170 <dict>
1171 <key>include</key>
1172 <string>#object-binding-element-propertyName</string>
1173 </dict>
1174 <dict>
1175 <key>include</key>
1176 <string>#binding-element</string>
1177 </dict>
1178 </array>
1179 </dict>
1180 <dict>
1181 <key>include</key>
1182 <string>#object-binding-pattern</string>
1183 </dict>
1184 <dict>
1185 <key>include</key>
1186 <string>#destructuring-variable-rest</string>
1187 </dict>
1188 <dict>
1189 <key>include</key>
1190 <string>#variable-initializer</string>
1191 </dict>
1192 <dict>
1193 <key>include</key>
1194 <string>#punctuation-comma</string>
1195 </dict>
1196 </array>
1197 </dict>
1198 <key>object-binding-element-const</key>
1199 <dict>
1200 <key>patterns</key>
1201 <array>
1202 <dict>
1203 <key>include</key>
1204 <string>#comment</string>
1205 </dict>
1206 <dict>
1207 <key>begin</key>
1208 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1209 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1210 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1211 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1212 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1213 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1214 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1215 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1216 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1217)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1218 <key>end</key>
1219 <string>(?=,|\})</string>
1220 <key>patterns</key>
1221 <array>
1222 <dict>
1223 <key>include</key>
1224 <string>#object-binding-element-propertyName</string>
1225 </dict>
1226 <dict>
1227 <key>include</key>
1228 <string>#binding-element-const</string>
1229 </dict>
1230 </array>
1231 </dict>
1232 <dict>
1233 <key>include</key>
1234 <string>#object-binding-pattern-const</string>
1235 </dict>
1236 <dict>
1237 <key>include</key>
1238 <string>#destructuring-variable-rest-const</string>
1239 </dict>
1240 <dict>
1241 <key>include</key>
1242 <string>#variable-initializer</string>
1243 </dict>
1244 <dict>
1245 <key>include</key>
1246 <string>#punctuation-comma</string>
1247 </dict>
1248 </array>
1249 </dict>
1250 <key>object-binding-element-propertyName</key>
1251 <dict>
1252 <key>begin</key>
1253 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1254 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1255 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1256 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1257 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1258 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1259 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1260 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1261 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1262)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1263 <key>end</key>
1264 <string>(:)</string>
1265 <key>endCaptures</key>
1266 <dict>
1267 <key>0</key>
1268 <dict>
1269 <key>name</key>
1270 <string>punctuation.destructuring.tsx</string>
1271 </dict>
1272 </dict>
1273 <key>patterns</key>
1274 <array>
1275 <dict>
1276 <key>include</key>
1277 <string>#string</string>
1278 </dict>
1279 <dict>
1280 <key>include</key>
1281 <string>#array-literal</string>
1282 </dict>
1283 <dict>
1284 <key>include</key>
1285 <string>#numeric-literal</string>
1286 </dict>
1287 <dict>
1288 <key>name</key>
1289 <string>variable.object.property.tsx</string>
1290 <key>match</key>
1291 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
1292 </dict>
1293 </array>
1294 </dict>
1295 <key>binding-element</key>
1296 <dict>
1297 <key>patterns</key>
1298 <array>
1299 <dict>
1300 <key>include</key>
1301 <string>#comment</string>
1302 </dict>
1303 <dict>
1304 <key>include</key>
1305 <string>#string</string>
1306 </dict>
1307 <dict>
1308 <key>include</key>
1309 <string>#numeric-literal</string>
1310 </dict>
1311 <dict>
1312 <key>include</key>
1313 <string>#regex</string>
1314 </dict>
1315 <dict>
1316 <key>include</key>
1317 <string>#object-binding-pattern</string>
1318 </dict>
1319 <dict>
1320 <key>include</key>
1321 <string>#array-binding-pattern</string>
1322 </dict>
1323 <dict>
1324 <key>include</key>
1325 <string>#destructuring-variable-rest</string>
1326 </dict>
1327 <dict>
1328 <key>include</key>
1329 <string>#variable-initializer</string>
1330 </dict>
1331 </array>
1332 </dict>
1333 <key>binding-element-const</key>
1334 <dict>
1335 <key>patterns</key>
1336 <array>
1337 <dict>
1338 <key>include</key>
1339 <string>#comment</string>
1340 </dict>
1341 <dict>
1342 <key>include</key>
1343 <string>#string</string>
1344 </dict>
1345 <dict>
1346 <key>include</key>
1347 <string>#numeric-literal</string>
1348 </dict>
1349 <dict>
1350 <key>include</key>
1351 <string>#regex</string>
1352 </dict>
1353 <dict>
1354 <key>include</key>
1355 <string>#object-binding-pattern-const</string>
1356 </dict>
1357 <dict>
1358 <key>include</key>
1359 <string>#array-binding-pattern-const</string>
1360 </dict>
1361 <dict>
1362 <key>include</key>
1363 <string>#destructuring-variable-rest-const</string>
1364 </dict>
1365 <dict>
1366 <key>include</key>
1367 <string>#variable-initializer</string>
1368 </dict>
1369 </array>
1370 </dict>
1371 <key>destructuring-variable-rest</key>
1372 <dict>
1373 <key>match</key>
1374 <string>(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>
1375 <key>captures</key>
1376 <dict>
1377 <key>1</key>
1378 <dict>
1379 <key>name</key>
1380 <string>keyword.operator.rest.tsx</string>
1381 </dict>
1382 <key>2</key>
1383 <dict>
1384 <key>name</key>
1385 <string>meta.definition.variable.tsx variable.other.readwrite.tsx</string>
1386 </dict>
1387 </dict>
1388 </dict>
1389 <key>destructuring-variable-rest-const</key>
1390 <dict>
1391 <key>match</key>
1392 <string>(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>
1393 <key>captures</key>
1394 <dict>
1395 <key>1</key>
1396 <dict>
1397 <key>name</key>
1398 <string>keyword.operator.rest.tsx</string>
1399 </dict>
1400 <key>2</key>
1401 <dict>
1402 <key>name</key>
1403 <string>meta.definition.variable.tsx variable.other.constant.tsx</string>
1404 </dict>
1405 </dict>
1406 </dict>
1407 <key>object-binding-pattern</key>
1408 <dict>
1409 <key>begin</key>
1410 <string>(?:(\.\.\.)\s*)?(\{)</string>
1411 <key>beginCaptures</key>
1412 <dict>
1413 <key>1</key>
1414 <dict>
1415 <key>name</key>
1416 <string>keyword.operator.rest.tsx</string>
1417 </dict>
1418 <key>2</key>
1419 <dict>
1420 <key>name</key>
1421 <string>punctuation.definition.binding-pattern.object.tsx</string>
1422 </dict>
1423 </dict>
1424 <key>end</key>
1425 <string>\}</string>
1426 <key>endCaptures</key>
1427 <dict>
1428 <key>0</key>
1429 <dict>
1430 <key>name</key>
1431 <string>punctuation.definition.binding-pattern.object.tsx</string>
1432 </dict>
1433 </dict>
1434 <key>patterns</key>
1435 <array>
1436 <dict>
1437 <key>include</key>
1438 <string>#object-binding-element</string>
1439 </dict>
1440 </array>
1441 </dict>
1442 <key>object-binding-pattern-const</key>
1443 <dict>
1444 <key>begin</key>
1445 <string>(?:(\.\.\.)\s*)?(\{)</string>
1446 <key>beginCaptures</key>
1447 <dict>
1448 <key>1</key>
1449 <dict>
1450 <key>name</key>
1451 <string>keyword.operator.rest.tsx</string>
1452 </dict>
1453 <key>2</key>
1454 <dict>
1455 <key>name</key>
1456 <string>punctuation.definition.binding-pattern.object.tsx</string>
1457 </dict>
1458 </dict>
1459 <key>end</key>
1460 <string>\}</string>
1461 <key>endCaptures</key>
1462 <dict>
1463 <key>0</key>
1464 <dict>
1465 <key>name</key>
1466 <string>punctuation.definition.binding-pattern.object.tsx</string>
1467 </dict>
1468 </dict>
1469 <key>patterns</key>
1470 <array>
1471 <dict>
1472 <key>include</key>
1473 <string>#object-binding-element-const</string>
1474 </dict>
1475 </array>
1476 </dict>
1477 <key>array-binding-pattern</key>
1478 <dict>
1479 <key>begin</key>
1480 <string>(?:(\.\.\.)\s*)?(\[)</string>
1481 <key>beginCaptures</key>
1482 <dict>
1483 <key>1</key>
1484 <dict>
1485 <key>name</key>
1486 <string>keyword.operator.rest.tsx</string>
1487 </dict>
1488 <key>2</key>
1489 <dict>
1490 <key>name</key>
1491 <string>punctuation.definition.binding-pattern.array.tsx</string>
1492 </dict>
1493 </dict>
1494 <key>end</key>
1495 <string>\]</string>
1496 <key>endCaptures</key>
1497 <dict>
1498 <key>0</key>
1499 <dict>
1500 <key>name</key>
1501 <string>punctuation.definition.binding-pattern.array.tsx</string>
1502 </dict>
1503 </dict>
1504 <key>patterns</key>
1505 <array>
1506 <dict>
1507 <key>include</key>
1508 <string>#binding-element</string>
1509 </dict>
1510 <dict>
1511 <key>include</key>
1512 <string>#punctuation-comma</string>
1513 </dict>
1514 </array>
1515 </dict>
1516 <key>array-binding-pattern-const</key>
1517 <dict>
1518 <key>begin</key>
1519 <string>(?:(\.\.\.)\s*)?(\[)</string>
1520 <key>beginCaptures</key>
1521 <dict>
1522 <key>1</key>
1523 <dict>
1524 <key>name</key>
1525 <string>keyword.operator.rest.tsx</string>
1526 </dict>
1527 <key>2</key>
1528 <dict>
1529 <key>name</key>
1530 <string>punctuation.definition.binding-pattern.array.tsx</string>
1531 </dict>
1532 </dict>
1533 <key>end</key>
1534 <string>\]</string>
1535 <key>endCaptures</key>
1536 <dict>
1537 <key>0</key>
1538 <dict>
1539 <key>name</key>
1540 <string>punctuation.definition.binding-pattern.array.tsx</string>
1541 </dict>
1542 </dict>
1543 <key>patterns</key>
1544 <array>
1545 <dict>
1546 <key>include</key>
1547 <string>#binding-element-const</string>
1548 </dict>
1549 <dict>
1550 <key>include</key>
1551 <string>#punctuation-comma</string>
1552 </dict>
1553 </array>
1554 </dict>
1555 <key>parameter-name</key>
1556 <dict>
1557 <key>patterns</key>
1558 <array>
1559 <dict>
1560 <key>match</key>
1561 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+)</string>
1562 <key>captures</key>
1563 <dict>
1564 <key>1</key>
1565 <dict>
1566 <key>name</key>
1567 <string>storage.modifier.tsx</string>
1568 </dict>
1569 </dict>
1570 </dict>
1571 <dict>
1572 <key>match</key>
1573 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
1574# function assignment |
1575(=\s*(
1576 ((async\s+)?(
1577 (function\s*[(&lt;*]) |
1578 (function\s+) |
1579 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
1580 )) |
1581 ((async\s*)?(
1582 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1583 # sure shot arrow functions even if =&gt; is on new line
1584(
1585 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
1586 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
1587 (
1588 ([)]\s*:) | # ():
1589 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1590 )
1591) |
1592(
1593 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
1594) |
1595# arrow function possible to detect only with =&gt; on same line
1596(
1597 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
1598 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1599 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1600 \s*=&gt; # arrow operator
1601)
1602 ))
1603)) |
1604# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
1605(:\s*(
1606 (&lt;) |
1607 ([(]\s*(
1608 ([)]) |
1609 (\.\.\.) |
1610 ([_$[:alnum:]]+\s*(
1611 ([:,?=])|
1612 ([)]\s*=&gt;)
1613 ))
1614 ))
1615)) |
1616(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
1617(:\s*((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
1618(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
1619 ((async\s+)?(
1620 (function\s*[(&lt;*]) |
1621 (function\s+) |
1622 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
1623 )) |
1624 ((async\s*)?(
1625 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1626 # sure shot arrow functions even if =&gt; is on new line
1627(
1628 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
1629 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
1630 (
1631 ([)]\s*:) | # ():
1632 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1633 )
1634) |
1635(
1636 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
1637) |
1638# arrow function possible to detect only with =&gt; on same line
1639(
1640 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
1641 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1642 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1643 \s*=&gt; # arrow operator
1644)
1645 ))
1646)))</string>
1647 <key>captures</key>
1648 <dict>
1649 <key>1</key>
1650 <dict>
1651 <key>name</key>
1652 <string>storage.modifier.tsx</string>
1653 </dict>
1654 <key>2</key>
1655 <dict>
1656 <key>name</key>
1657 <string>keyword.operator.rest.tsx</string>
1658 </dict>
1659 <key>3</key>
1660 <dict>
1661 <key>name</key>
1662 <string>entity.name.function.tsx variable.language.this.tsx</string>
1663 </dict>
1664 <key>4</key>
1665 <dict>
1666 <key>name</key>
1667 <string>entity.name.function.tsx</string>
1668 </dict>
1669 <key>5</key>
1670 <dict>
1671 <key>name</key>
1672 <string>keyword.operator.optional.tsx</string>
1673 </dict>
1674 </dict>
1675 </dict>
1676 <dict>
1677 <key>match</key>
1678 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)</string>
1679 <key>captures</key>
1680 <dict>
1681 <key>1</key>
1682 <dict>
1683 <key>name</key>
1684 <string>storage.modifier.tsx</string>
1685 </dict>
1686 <key>2</key>
1687 <dict>
1688 <key>name</key>
1689 <string>keyword.operator.rest.tsx</string>
1690 </dict>
1691 <key>3</key>
1692 <dict>
1693 <key>name</key>
1694 <string>variable.parameter.tsx variable.language.this.tsx</string>
1695 </dict>
1696 <key>4</key>
1697 <dict>
1698 <key>name</key>
1699 <string>variable.parameter.tsx</string>
1700 </dict>
1701 <key>5</key>
1702 <dict>
1703 <key>name</key>
1704 <string>keyword.operator.optional.tsx</string>
1705 </dict>
1706 </dict>
1707 </dict>
1708 </array>
1709 </dict>
1710 <key>destructuring-parameter</key>
1711 <dict>
1712 <key>patterns</key>
1713 <array>
1714 <dict>
1715 <key>name</key>
1716 <string>meta.parameter.object-binding-pattern.tsx</string>
1717 <key>begin</key>
1718 <string>(?&lt;!=|:)\s*(?:(\.\.\.)\s*)?(\{)</string>
1719 <key>beginCaptures</key>
1720 <dict>
1721 <key>1</key>
1722 <dict>
1723 <key>name</key>
1724 <string>keyword.operator.rest.tsx</string>
1725 </dict>
1726 <key>2</key>
1727 <dict>
1728 <key>name</key>
1729 <string>punctuation.definition.binding-pattern.object.tsx</string>
1730 </dict>
1731 </dict>
1732 <key>end</key>
1733 <string>\}</string>
1734 <key>endCaptures</key>
1735 <dict>
1736 <key>0</key>
1737 <dict>
1738 <key>name</key>
1739 <string>punctuation.definition.binding-pattern.object.tsx</string>
1740 </dict>
1741 </dict>
1742 <key>patterns</key>
1743 <array>
1744 <dict>
1745 <key>include</key>
1746 <string>#parameter-object-binding-element</string>
1747 </dict>
1748 </array>
1749 </dict>
1750 <dict>
1751 <key>name</key>
1752 <string>meta.paramter.array-binding-pattern.tsx</string>
1753 <key>begin</key>
1754 <string>(?&lt;!=|:)\s*(?:(\.\.\.)\s*)?(\[)</string>
1755 <key>beginCaptures</key>
1756 <dict>
1757 <key>1</key>
1758 <dict>
1759 <key>name</key>
1760 <string>keyword.operator.rest.tsx</string>
1761 </dict>
1762 <key>2</key>
1763 <dict>
1764 <key>name</key>
1765 <string>punctuation.definition.binding-pattern.array.tsx</string>
1766 </dict>
1767 </dict>
1768 <key>end</key>
1769 <string>\]</string>
1770 <key>endCaptures</key>
1771 <dict>
1772 <key>0</key>
1773 <dict>
1774 <key>name</key>
1775 <string>punctuation.definition.binding-pattern.array.tsx</string>
1776 </dict>
1777 </dict>
1778 <key>patterns</key>
1779 <array>
1780 <dict>
1781 <key>include</key>
1782 <string>#parameter-binding-element</string>
1783 </dict>
1784 <dict>
1785 <key>include</key>
1786 <string>#punctuation-comma</string>
1787 </dict>
1788 </array>
1789 </dict>
1790 </array>
1791 </dict>
1792 <key>parameter-object-binding-element</key>
1793 <dict>
1794 <key>patterns</key>
1795 <array>
1796 <dict>
1797 <key>include</key>
1798 <string>#comment</string>
1799 </dict>
1800 <dict>
1801 <key>begin</key>
1802 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1803 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1804 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1805 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1806 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1807 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1808 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1809 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1810 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1811)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1812 <key>end</key>
1813 <string>(?=,|\})</string>
1814 <key>patterns</key>
1815 <array>
1816 <dict>
1817 <key>include</key>
1818 <string>#object-binding-element-propertyName</string>
1819 </dict>
1820 <dict>
1821 <key>include</key>
1822 <string>#parameter-binding-element</string>
1823 </dict>
1824 <dict>
1825 <key>include</key>
1826 <string>#paren-expression</string>
1827 </dict>
1828 </array>
1829 </dict>
1830 <dict>
1831 <key>include</key>
1832 <string>#parameter-object-binding-pattern</string>
1833 </dict>
1834 <dict>
1835 <key>include</key>
1836 <string>#destructuring-parameter-rest</string>
1837 </dict>
1838 <dict>
1839 <key>include</key>
1840 <string>#variable-initializer</string>
1841 </dict>
1842 <dict>
1843 <key>include</key>
1844 <string>#punctuation-comma</string>
1845 </dict>
1846 </array>
1847 </dict>
1848 <key>parameter-binding-element</key>
1849 <dict>
1850 <key>patterns</key>
1851 <array>
1852 <dict>
1853 <key>include</key>
1854 <string>#comment</string>
1855 </dict>
1856 <dict>
1857 <key>include</key>
1858 <string>#string</string>
1859 </dict>
1860 <dict>
1861 <key>include</key>
1862 <string>#numeric-literal</string>
1863 </dict>
1864 <dict>
1865 <key>include</key>
1866 <string>#regex</string>
1867 </dict>
1868 <dict>
1869 <key>include</key>
1870 <string>#parameter-object-binding-pattern</string>
1871 </dict>
1872 <dict>
1873 <key>include</key>
1874 <string>#parameter-array-binding-pattern</string>
1875 </dict>
1876 <dict>
1877 <key>include</key>
1878 <string>#destructuring-parameter-rest</string>
1879 </dict>
1880 <dict>
1881 <key>include</key>
1882 <string>#variable-initializer</string>
1883 </dict>
1884 </array>
1885 </dict>
1886 <key>destructuring-parameter-rest</key>
1887 <dict>
1888 <key>match</key>
1889 <string>(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>
1890 <key>captures</key>
1891 <dict>
1892 <key>1</key>
1893 <dict>
1894 <key>name</key>
1895 <string>keyword.operator.rest.tsx</string>
1896 </dict>
1897 <key>2</key>
1898 <dict>
1899 <key>name</key>
1900 <string>variable.parameter.tsx</string>
1901 </dict>
1902 </dict>
1903 </dict>
1904 <key>parameter-object-binding-pattern</key>
1905 <dict>
1906 <key>begin</key>
1907 <string>(?:(\.\.\.)\s*)?(\{)</string>
1908 <key>beginCaptures</key>
1909 <dict>
1910 <key>1</key>
1911 <dict>
1912 <key>name</key>
1913 <string>keyword.operator.rest.tsx</string>
1914 </dict>
1915 <key>2</key>
1916 <dict>
1917 <key>name</key>
1918 <string>punctuation.definition.binding-pattern.object.tsx</string>
1919 </dict>
1920 </dict>
1921 <key>end</key>
1922 <string>\}</string>
1923 <key>endCaptures</key>
1924 <dict>
1925 <key>0</key>
1926 <dict>
1927 <key>name</key>
1928 <string>punctuation.definition.binding-pattern.object.tsx</string>
1929 </dict>
1930 </dict>
1931 <key>patterns</key>
1932 <array>
1933 <dict>
1934 <key>include</key>
1935 <string>#parameter-object-binding-element</string>
1936 </dict>
1937 </array>
1938 </dict>
1939 <key>parameter-array-binding-pattern</key>
1940 <dict>
1941 <key>begin</key>
1942 <string>(?:(\.\.\.)\s*)?(\[)</string>
1943 <key>beginCaptures</key>
1944 <dict>
1945 <key>1</key>
1946 <dict>
1947 <key>name</key>
1948 <string>keyword.operator.rest.tsx</string>
1949 </dict>
1950 <key>2</key>
1951 <dict>
1952 <key>name</key>
1953 <string>punctuation.definition.binding-pattern.array.tsx</string>
1954 </dict>
1955 </dict>
1956 <key>end</key>
1957 <string>\]</string>
1958 <key>endCaptures</key>
1959 <dict>
1960 <key>0</key>
1961 <dict>
1962 <key>name</key>
1963 <string>punctuation.definition.binding-pattern.array.tsx</string>
1964 </dict>
1965 </dict>
1966 <key>patterns</key>
1967 <array>
1968 <dict>
1969 <key>include</key>
1970 <string>#parameter-binding-element</string>
1971 </dict>
1972 <dict>
1973 <key>include</key>
1974 <string>#punctuation-comma</string>
1975 </dict>
1976 </array>
1977 </dict>
1978 <key>field-declaration</key>
1979 <dict>
1980 <key>name</key>
1981 <string>meta.field.declaration.tsx</string>
1982 <key>begin</key>
1983 <string>(?x)(?&lt;!\()(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)\s+)?(?=\s*((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1984 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1985 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1986 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1987 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1988 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1989 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1990 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1991 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1992)(?!\$))|(\#?[_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(?:(?:(\?)|(\!))\s*)?(=|:|;|,|\}|$))</string>
1993 <key>beginCaptures</key>
1994 <dict>
1995 <key>1</key>
1996 <dict>
1997 <key>name</key>
1998 <string>storage.modifier.tsx</string>
1999 </dict>
2000 </dict>
2001 <key>end</key>
2002 <string>(?x)(?=\}|;|,|$|(^(?!\s*((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2003 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2004 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2005 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2006 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2007 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2008 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2009 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2010 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2011)(?!\$))|(\#?[_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(?:(?:(\?)|(\!))\s*)?(=|:|;|,|$))))|(?&lt;=\})</string>
2012 <key>patterns</key>
2013 <array>
2014 <dict>
2015 <key>include</key>
2016 <string>#variable-initializer</string>
2017 </dict>
2018 <dict>
2019 <key>include</key>
2020 <string>#type-annotation</string>
2021 </dict>
2022 <dict>
2023 <key>include</key>
2024 <string>#string</string>
2025 </dict>
2026 <dict>
2027 <key>include</key>
2028 <string>#array-literal</string>
2029 </dict>
2030 <dict>
2031 <key>include</key>
2032 <string>#numeric-literal</string>
2033 </dict>
2034 <dict>
2035 <key>include</key>
2036 <string>#comment</string>
2037 </dict>
2038 <dict>
2039 <key>match</key>
2040 <string>(?x)(\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\?)|(\!))?(?=\s*\s*
2041# function assignment |
2042(=\s*(
2043 ((async\s+)?(
2044 (function\s*[(&lt;*]) |
2045 (function\s+) |
2046 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
2047 )) |
2048 ((async\s*)?(
2049 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
2050 # sure shot arrow functions even if =&gt; is on new line
2051(
2052 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
2053 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
2054 (
2055 ([)]\s*:) | # ():
2056 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
2057 )
2058) |
2059(
2060 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
2061) |
2062# arrow function possible to detect only with =&gt; on same line
2063(
2064 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
2065 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2066 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2067 \s*=&gt; # arrow operator
2068)
2069 ))
2070)) |
2071# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
2072(:\s*(
2073 (&lt;) |
2074 ([(]\s*(
2075 ([)]) |
2076 (\.\.\.) |
2077 ([_$[:alnum:]]+\s*(
2078 ([:,?=])|
2079 ([)]\s*=&gt;)
2080 ))
2081 ))
2082)) |
2083(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
2084(:\s*((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
2085(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
2086 ((async\s+)?(
2087 (function\s*[(&lt;*]) |
2088 (function\s+) |
2089 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
2090 )) |
2091 ((async\s*)?(
2092 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
2093 # sure shot arrow functions even if =&gt; is on new line
2094(
2095 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
2096 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
2097 (
2098 ([)]\s*:) | # ():
2099 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
2100 )
2101) |
2102(
2103 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
2104) |
2105# arrow function possible to detect only with =&gt; on same line
2106(
2107 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
2108 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2109 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2110 \s*=&gt; # arrow operator
2111)
2112 ))
2113)))</string>
2114 <key>captures</key>
2115 <dict>
2116 <key>1</key>
2117 <dict>
2118 <key>name</key>
2119 <string>meta.definition.property.tsx entity.name.function.tsx</string>
2120 </dict>
2121 <key>2</key>
2122 <dict>
2123 <key>name</key>
2124 <string>keyword.operator.optional.tsx</string>
2125 </dict>
2126 <key>3</key>
2127 <dict>
2128 <key>name</key>
2129 <string>keyword.operator.definiteassignment.tsx</string>
2130 </dict>
2131 </dict>
2132 </dict>
2133 <dict>
2134 <key>name</key>
2135 <string>meta.definition.property.tsx variable.object.property.tsx</string>
2136 <key>match</key>
2137 <string>\#?[_$[:alpha:]][_$[:alnum:]]*</string>
2138 </dict>
2139 <dict>
2140 <key>name</key>
2141 <string>keyword.operator.optional.tsx</string>
2142 <key>match</key>
2143 <string>\?</string>
2144 </dict>
2145 <dict>
2146 <key>name</key>
2147 <string>keyword.operator.definiteassignment.tsx</string>
2148 <key>match</key>
2149 <string>\!</string>
2150 </dict>
2151 </array>
2152 </dict>
2153 <key>variable-initializer</key>
2154 <dict>
2155 <key>patterns</key>
2156 <array>
2157 <dict>
2158 <key>begin</key>
2159 <string>(?&lt;!=|!)(=)(?!=)(?=\s*\S)(?!\s*.*=&gt;\s*$)</string>
2160 <key>beginCaptures</key>
2161 <dict>
2162 <key>1</key>
2163 <dict>
2164 <key>name</key>
2165 <string>keyword.operator.assignment.tsx</string>
2166 </dict>
2167 </dict>
2168 <key>end</key>
2169 <string>(?=$|^|[,);}\]]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
2170 <key>patterns</key>
2171 <array>
2172 <dict>
2173 <key>include</key>
2174 <string>#expression</string>
2175 </dict>
2176 </array>
2177 </dict>
2178 <dict>
2179 <key>begin</key>
2180 <string>(?&lt;!=|!)(=)(?!=)</string>
2181 <key>beginCaptures</key>
2182 <dict>
2183 <key>1</key>
2184 <dict>
2185 <key>name</key>
2186 <string>keyword.operator.assignment.tsx</string>
2187 </dict>
2188 </dict>
2189 <key>end</key>
2190 <string>(?=[,);}\]]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))|(?=^\s*$)|(?&lt;![\|\&amp;\+\-\*\/])(?&lt;=\S)(?&lt;!=)(?=\s*$)</string>
2191 <key>patterns</key>
2192 <array>
2193 <dict>
2194 <key>include</key>
2195 <string>#expression</string>
2196 </dict>
2197 </array>
2198 </dict>
2199 </array>
2200 </dict>
2201 <key>function-declaration</key>
2202 <dict>
2203 <key>name</key>
2204 <string>meta.function.tsx</string>
2205 <key>begin</key>
2206 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?&lt;=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*</string>
2207 <key>beginCaptures</key>
2208 <dict>
2209 <key>1</key>
2210 <dict>
2211 <key>name</key>
2212 <string>keyword.control.export.tsx</string>
2213 </dict>
2214 <key>2</key>
2215 <dict>
2216 <key>name</key>
2217 <string>storage.modifier.tsx</string>
2218 </dict>
2219 <key>3</key>
2220 <dict>
2221 <key>name</key>
2222 <string>storage.modifier.async.tsx</string>
2223 </dict>
2224 <key>4</key>
2225 <dict>
2226 <key>name</key>
2227 <string>storage.type.function.tsx</string>
2228 </dict>
2229 <key>5</key>
2230 <dict>
2231 <key>name</key>
2232 <string>keyword.generator.asterisk.tsx</string>
2233 </dict>
2234 <key>6</key>
2235 <dict>
2236 <key>name</key>
2237 <string>meta.definition.function.tsx entity.name.function.tsx</string>
2238 </dict>
2239 </dict>
2240 <key>end</key>
2241 <string>(?=;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|(?&lt;=\})</string>
2242 <key>patterns</key>
2243 <array>
2244 <dict>
2245 <key>include</key>
2246 <string>#function-name</string>
2247 </dict>
2248 <dict>
2249 <key>include</key>
2250 <string>#function-body</string>
2251 </dict>
2252 </array>
2253 </dict>
2254 <key>function-expression</key>
2255 <dict>
2256 <key>name</key>
2257 <string>meta.function.expression.tsx</string>
2258 <key>begin</key>
2259 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?&lt;=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*</string>
2260 <key>beginCaptures</key>
2261 <dict>
2262 <key>1</key>
2263 <dict>
2264 <key>name</key>
2265 <string>storage.modifier.async.tsx</string>
2266 </dict>
2267 <key>2</key>
2268 <dict>
2269 <key>name</key>
2270 <string>storage.type.function.tsx</string>
2271 </dict>
2272 <key>3</key>
2273 <dict>
2274 <key>name</key>
2275 <string>keyword.generator.asterisk.tsx</string>
2276 </dict>
2277 <key>4</key>
2278 <dict>
2279 <key>name</key>
2280 <string>meta.definition.function.tsx entity.name.function.tsx</string>
2281 </dict>
2282 </dict>
2283 <key>end</key>
2284 <string>(?=;)|(?&lt;=\})</string>
2285 <key>patterns</key>
2286 <array>
2287 <dict>
2288 <key>include</key>
2289 <string>#function-name</string>
2290 </dict>
2291 <dict>
2292 <key>include</key>
2293 <string>#single-line-comment-consuming-line-ending</string>
2294 </dict>
2295 <dict>
2296 <key>include</key>
2297 <string>#function-body</string>
2298 </dict>
2299 </array>
2300 </dict>
2301 <key>function-name</key>
2302 <dict>
2303 <key>name</key>
2304 <string>meta.definition.function.tsx entity.name.function.tsx</string>
2305 <key>match</key>
2306 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
2307 </dict>
2308 <key>function-body</key>
2309 <dict>
2310 <key>patterns</key>
2311 <array>
2312 <dict>
2313 <key>include</key>
2314 <string>#comment</string>
2315 </dict>
2316 <dict>
2317 <key>include</key>
2318 <string>#type-parameters</string>
2319 </dict>
2320 <dict>
2321 <key>include</key>
2322 <string>#function-parameters</string>
2323 </dict>
2324 <dict>
2325 <key>include</key>
2326 <string>#return-type</string>
2327 </dict>
2328 <dict>
2329 <key>include</key>
2330 <string>#type-function-return-type</string>
2331 </dict>
2332 <dict>
2333 <key>include</key>
2334 <string>#decl-block</string>
2335 </dict>
2336 <dict>
2337 <key>name</key>
2338 <string>keyword.generator.asterisk.tsx</string>
2339 <key>match</key>
2340 <string>\*</string>
2341 </dict>
2342 </array>
2343 </dict>
2344 <key>method-declaration</key>
2345 <dict>
2346 <key>patterns</key>
2347 <array>
2348 <dict>
2349 <key>name</key>
2350 <string>meta.method.declaration.tsx</string>
2351 <key>begin</key>
2352 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\s*\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
2353 <key>beginCaptures</key>
2354 <dict>
2355 <key>1</key>
2356 <dict>
2357 <key>name</key>
2358 <string>storage.modifier.tsx</string>
2359 </dict>
2360 <key>2</key>
2361 <dict>
2362 <key>name</key>
2363 <string>storage.modifier.tsx</string>
2364 </dict>
2365 <key>3</key>
2366 <dict>
2367 <key>name</key>
2368 <string>storage.modifier.tsx</string>
2369 </dict>
2370 <key>4</key>
2371 <dict>
2372 <key>name</key>
2373 <string>storage.modifier.async.tsx</string>
2374 </dict>
2375 <key>5</key>
2376 <dict>
2377 <key>name</key>
2378 <string>storage.type.tsx</string>
2379 </dict>
2380 </dict>
2381 <key>end</key>
2382 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
2383 <key>patterns</key>
2384 <array>
2385 <dict>
2386 <key>include</key>
2387 <string>#method-declaration-name</string>
2388 </dict>
2389 <dict>
2390 <key>include</key>
2391 <string>#function-body</string>
2392 </dict>
2393 </array>
2394 </dict>
2395 <dict>
2396 <key>name</key>
2397 <string>meta.method.declaration.tsx</string>
2398 <key>begin</key>
2399 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\s*\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2400 <key>beginCaptures</key>
2401 <dict>
2402 <key>1</key>
2403 <dict>
2404 <key>name</key>
2405 <string>storage.modifier.tsx</string>
2406 </dict>
2407 <key>2</key>
2408 <dict>
2409 <key>name</key>
2410 <string>storage.modifier.tsx</string>
2411 </dict>
2412 <key>3</key>
2413 <dict>
2414 <key>name</key>
2415 <string>storage.modifier.tsx</string>
2416 </dict>
2417 <key>4</key>
2418 <dict>
2419 <key>name</key>
2420 <string>storage.modifier.async.tsx</string>
2421 </dict>
2422 <key>5</key>
2423 <dict>
2424 <key>name</key>
2425 <string>keyword.operator.new.tsx</string>
2426 </dict>
2427 <key>6</key>
2428 <dict>
2429 <key>name</key>
2430 <string>keyword.generator.asterisk.tsx</string>
2431 </dict>
2432 </dict>
2433 <key>end</key>
2434 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
2435 <key>patterns</key>
2436 <array>
2437 <dict>
2438 <key>include</key>
2439 <string>#method-declaration-name</string>
2440 </dict>
2441 <dict>
2442 <key>include</key>
2443 <string>#function-body</string>
2444 </dict>
2445 </array>
2446 </dict>
2447 <dict>
2448 <key>name</key>
2449 <string>meta.method.declaration.tsx</string>
2450 <key>begin</key>
2451 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2452 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2453 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2454 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2455 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2456 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2457 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2458 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2459 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2460)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2461 <key>beginCaptures</key>
2462 <dict>
2463 <key>1</key>
2464 <dict>
2465 <key>name</key>
2466 <string>storage.modifier.tsx</string>
2467 </dict>
2468 <key>2</key>
2469 <dict>
2470 <key>name</key>
2471 <string>storage.modifier.tsx</string>
2472 </dict>
2473 <key>3</key>
2474 <dict>
2475 <key>name</key>
2476 <string>storage.modifier.tsx</string>
2477 </dict>
2478 <key>4</key>
2479 <dict>
2480 <key>name</key>
2481 <string>storage.modifier.async.tsx</string>
2482 </dict>
2483 <key>5</key>
2484 <dict>
2485 <key>name</key>
2486 <string>storage.type.property.tsx</string>
2487 </dict>
2488 <key>6</key>
2489 <dict>
2490 <key>name</key>
2491 <string>keyword.generator.asterisk.tsx</string>
2492 </dict>
2493 </dict>
2494 <key>end</key>
2495 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
2496 <key>patterns</key>
2497 <array>
2498 <dict>
2499 <key>include</key>
2500 <string>#method-declaration-name</string>
2501 </dict>
2502 <dict>
2503 <key>include</key>
2504 <string>#function-body</string>
2505 </dict>
2506 </array>
2507 </dict>
2508 </array>
2509 </dict>
2510 <key>object-literal-method-declaration</key>
2511 <dict>
2512 <key>name</key>
2513 <string>meta.method.declaration.tsx</string>
2514 <key>begin</key>
2515 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2516 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2517 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2518 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2519 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2520 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2521 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2522 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2523 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2524)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2525 <key>beginCaptures</key>
2526 <dict>
2527 <key>1</key>
2528 <dict>
2529 <key>name</key>
2530 <string>storage.modifier.async.tsx</string>
2531 </dict>
2532 <key>2</key>
2533 <dict>
2534 <key>name</key>
2535 <string>storage.type.property.tsx</string>
2536 </dict>
2537 <key>3</key>
2538 <dict>
2539 <key>name</key>
2540 <string>keyword.generator.asterisk.tsx</string>
2541 </dict>
2542 </dict>
2543 <key>end</key>
2544 <string>(?=\}|;|,)|(?&lt;=\})</string>
2545 <key>patterns</key>
2546 <array>
2547 <dict>
2548 <key>include</key>
2549 <string>#method-declaration-name</string>
2550 </dict>
2551 <dict>
2552 <key>include</key>
2553 <string>#function-body</string>
2554 </dict>
2555 <dict>
2556 <key>begin</key>
2557 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2558 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2559 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2560 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2561 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2562 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2563 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2564 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2565 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2566)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2567 <key>beginCaptures</key>
2568 <dict>
2569 <key>1</key>
2570 <dict>
2571 <key>name</key>
2572 <string>storage.modifier.async.tsx</string>
2573 </dict>
2574 <key>2</key>
2575 <dict>
2576 <key>name</key>
2577 <string>storage.type.property.tsx</string>
2578 </dict>
2579 <key>3</key>
2580 <dict>
2581 <key>name</key>
2582 <string>keyword.generator.asterisk.tsx</string>
2583 </dict>
2584 </dict>
2585 <key>end</key>
2586 <string>(?=\(|\&lt;)</string>
2587 <key>patterns</key>
2588 <array>
2589 <dict>
2590 <key>include</key>
2591 <string>#method-declaration-name</string>
2592 </dict>
2593 </array>
2594 </dict>
2595 </array>
2596 </dict>
2597 <key>method-declaration-name</key>
2598 <dict>
2599 <key>begin</key>
2600 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2601 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2602 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2603 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2604 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2605 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2606 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2607 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2608 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2609)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??)\s*[\(\&lt;])</string>
2610 <key>end</key>
2611 <string>(?=\(|\&lt;)</string>
2612 <key>patterns</key>
2613 <array>
2614 <dict>
2615 <key>include</key>
2616 <string>#string</string>
2617 </dict>
2618 <dict>
2619 <key>include</key>
2620 <string>#array-literal</string>
2621 </dict>
2622 <dict>
2623 <key>include</key>
2624 <string>#numeric-literal</string>
2625 </dict>
2626 <dict>
2627 <key>name</key>
2628 <string>meta.definition.method.tsx entity.name.function.tsx</string>
2629 <key>match</key>
2630 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
2631 </dict>
2632 <dict>
2633 <key>name</key>
2634 <string>keyword.operator.optional.tsx</string>
2635 <key>match</key>
2636 <string>\?</string>
2637 </dict>
2638 </array>
2639 </dict>
2640 <key>arrow-function</key>
2641 <dict>
2642 <key>patterns</key>
2643 <array>
2644 <dict>
2645 <key>name</key>
2646 <string>meta.arrow.tsx</string>
2647 <key>match</key>
2648 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(\basync)\s+)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?==&gt;)</string>
2649 <key>captures</key>
2650 <dict>
2651 <key>1</key>
2652 <dict>
2653 <key>name</key>
2654 <string>storage.modifier.async.tsx</string>
2655 </dict>
2656 <key>2</key>
2657 <dict>
2658 <key>name</key>
2659 <string>variable.parameter.tsx</string>
2660 </dict>
2661 </dict>
2662 </dict>
2663 <dict>
2664 <key>name</key>
2665 <string>meta.arrow.tsx</string>
2666 <key>begin</key>
2667 <string>(?x) (?:
2668 (?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(\basync)
2669)? ((?&lt;![})!\]])\s*
2670 (?=
2671 # sure shot arrow functions even if =&gt; is on new line
2672(
2673 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
2674 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
2675 (
2676 ([)]\s*:) | # ():
2677 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
2678 )
2679) |
2680(
2681 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
2682) |
2683# arrow function possible to detect only with =&gt; on same line
2684(
2685 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
2686 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2687 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2688 \s*=&gt; # arrow operator
2689)
2690 )
2691)</string>
2692 <key>beginCaptures</key>
2693 <dict>
2694 <key>1</key>
2695 <dict>
2696 <key>name</key>
2697 <string>storage.modifier.async.tsx</string>
2698 </dict>
2699 </dict>
2700 <key>end</key>
2701 <string>(?==&gt;|\{|(^\s*(export|function|class|interface|let|var|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|const|import|enum|namespace|module|type|abstract|declare)\s+))</string>
2702 <key>patterns</key>
2703 <array>
2704 <dict>
2705 <key>include</key>
2706 <string>#comment</string>
2707 </dict>
2708 <dict>
2709 <key>include</key>
2710 <string>#type-parameters</string>
2711 </dict>
2712 <dict>
2713 <key>include</key>
2714 <string>#function-parameters</string>
2715 </dict>
2716 <dict>
2717 <key>include</key>
2718 <string>#arrow-return-type</string>
2719 </dict>
2720 <dict>
2721 <key>include</key>
2722 <string>#possibly-arrow-return-type</string>
2723 </dict>
2724 </array>
2725 </dict>
2726 <dict>
2727 <key>name</key>
2728 <string>meta.arrow.tsx</string>
2729 <key>begin</key>
2730 <string>=&gt;</string>
2731 <key>beginCaptures</key>
2732 <dict>
2733 <key>0</key>
2734 <dict>
2735 <key>name</key>
2736 <string>storage.type.function.arrow.tsx</string>
2737 </dict>
2738 </dict>
2739 <key>end</key>
2740 <string>((?&lt;=\}|\S)(?&lt;!=&gt;)|((?!\{)(?=\S)))(?!\/[\/\*])</string>
2741 <key>patterns</key>
2742 <array>
2743 <dict>
2744 <key>include</key>
2745 <string>#single-line-comment-consuming-line-ending</string>
2746 </dict>
2747 <dict>
2748 <key>include</key>
2749 <string>#decl-block</string>
2750 </dict>
2751 <dict>
2752 <key>include</key>
2753 <string>#expression</string>
2754 </dict>
2755 </array>
2756 </dict>
2757 </array>
2758 </dict>
2759 <key>indexer-declaration</key>
2760 <dict>
2761 <key>name</key>
2762 <string>meta.indexer.declaration.tsx</string>
2763 <key>begin</key>
2764 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)\s*)?\s*(\[)\s*([_$[:alpha:]][_$[:alnum:]]*)\s*(?=:)</string>
2765 <key>beginCaptures</key>
2766 <dict>
2767 <key>1</key>
2768 <dict>
2769 <key>name</key>
2770 <string>storage.modifier.tsx</string>
2771 </dict>
2772 <key>2</key>
2773 <dict>
2774 <key>name</key>
2775 <string>meta.brace.square.tsx</string>
2776 </dict>
2777 <key>3</key>
2778 <dict>
2779 <key>name</key>
2780 <string>variable.parameter.tsx</string>
2781 </dict>
2782 </dict>
2783 <key>end</key>
2784 <string>(\])\s*(\?\s*)?|$</string>
2785 <key>endCaptures</key>
2786 <dict>
2787 <key>1</key>
2788 <dict>
2789 <key>name</key>
2790 <string>meta.brace.square.tsx</string>
2791 </dict>
2792 <key>2</key>
2793 <dict>
2794 <key>name</key>
2795 <string>keyword.operator.optional.tsx</string>
2796 </dict>
2797 </dict>
2798 <key>patterns</key>
2799 <array>
2800 <dict>
2801 <key>include</key>
2802 <string>#type-annotation</string>
2803 </dict>
2804 </array>
2805 </dict>
2806 <key>indexer-mapped-type-declaration</key>
2807 <dict>
2808 <key>name</key>
2809 <string>meta.indexer.mappedtype.declaration.tsx</string>
2810 <key>begin</key>
2811 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))([+-])?(readonly)\s*)?\s*(\[)\s*([_$[:alpha:]][_$[:alnum:]]*)\s+(in)\s+</string>
2812 <key>beginCaptures</key>
2813 <dict>
2814 <key>1</key>
2815 <dict>
2816 <key>name</key>
2817 <string>keyword.operator.type.modifier.tsx</string>
2818 </dict>
2819 <key>2</key>
2820 <dict>
2821 <key>name</key>
2822 <string>storage.modifier.tsx</string>
2823 </dict>
2824 <key>3</key>
2825 <dict>
2826 <key>name</key>
2827 <string>meta.brace.square.tsx</string>
2828 </dict>
2829 <key>4</key>
2830 <dict>
2831 <key>name</key>
2832 <string>entity.name.type.tsx</string>
2833 </dict>
2834 <key>5</key>
2835 <dict>
2836 <key>name</key>
2837 <string>keyword.operator.expression.in.tsx</string>
2838 </dict>
2839 </dict>
2840 <key>end</key>
2841 <string>(\])([+-])?\s*(\?\s*)?|$</string>
2842 <key>endCaptures</key>
2843 <dict>
2844 <key>1</key>
2845 <dict>
2846 <key>name</key>
2847 <string>meta.brace.square.tsx</string>
2848 </dict>
2849 <key>2</key>
2850 <dict>
2851 <key>name</key>
2852 <string>keyword.operator.type.modifier.tsx</string>
2853 </dict>
2854 <key>3</key>
2855 <dict>
2856 <key>name</key>
2857 <string>keyword.operator.optional.tsx</string>
2858 </dict>
2859 </dict>
2860 <key>patterns</key>
2861 <array>
2862 <dict>
2863 <key>match</key>
2864 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as)\s+</string>
2865 <key>captures</key>
2866 <dict>
2867 <key>1</key>
2868 <dict>
2869 <key>name</key>
2870 <string>keyword.control.as.tsx</string>
2871 </dict>
2872 </dict>
2873 </dict>
2874 <dict>
2875 <key>include</key>
2876 <string>#type</string>
2877 </dict>
2878 </array>
2879 </dict>
2880 <key>function-parameters</key>
2881 <dict>
2882 <key>name</key>
2883 <string>meta.parameters.tsx</string>
2884 <key>begin</key>
2885 <string>\(</string>
2886 <key>beginCaptures</key>
2887 <dict>
2888 <key>0</key>
2889 <dict>
2890 <key>name</key>
2891 <string>punctuation.definition.parameters.begin.tsx</string>
2892 </dict>
2893 </dict>
2894 <key>end</key>
2895 <string>\)</string>
2896 <key>endCaptures</key>
2897 <dict>
2898 <key>0</key>
2899 <dict>
2900 <key>name</key>
2901 <string>punctuation.definition.parameters.end.tsx</string>
2902 </dict>
2903 </dict>
2904 <key>patterns</key>
2905 <array>
2906 <dict>
2907 <key>include</key>
2908 <string>#function-parameters-body</string>
2909 </dict>
2910 </array>
2911 </dict>
2912 <key>function-parameters-body</key>
2913 <dict>
2914 <key>patterns</key>
2915 <array>
2916 <dict>
2917 <key>include</key>
2918 <string>#comment</string>
2919 </dict>
2920 <dict>
2921 <key>include</key>
2922 <string>#string</string>
2923 </dict>
2924 <dict>
2925 <key>include</key>
2926 <string>#decorator</string>
2927 </dict>
2928 <dict>
2929 <key>include</key>
2930 <string>#destructuring-parameter</string>
2931 </dict>
2932 <dict>
2933 <key>include</key>
2934 <string>#parameter-name</string>
2935 </dict>
2936 <dict>
2937 <key>include</key>
2938 <string>#parameter-type-annotation</string>
2939 </dict>
2940 <dict>
2941 <key>include</key>
2942 <string>#variable-initializer</string>
2943 </dict>
2944 <dict>
2945 <key>name</key>
2946 <string>punctuation.separator.parameter.tsx</string>
2947 <key>match</key>
2948 <string>,</string>
2949 </dict>
2950 </array>
2951 </dict>
2952 <key>class-declaration</key>
2953 <dict>
2954 <key>name</key>
2955 <string>meta.class.tsx</string>
2956 <key>begin</key>
2957 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(?:(abstract)\s+)?\b(class)\b(?=\s+|/[/*])</string>
2958 <key>beginCaptures</key>
2959 <dict>
2960 <key>1</key>
2961 <dict>
2962 <key>name</key>
2963 <string>keyword.control.export.tsx</string>
2964 </dict>
2965 <key>2</key>
2966 <dict>
2967 <key>name</key>
2968 <string>storage.modifier.tsx</string>
2969 </dict>
2970 <key>3</key>
2971 <dict>
2972 <key>name</key>
2973 <string>storage.modifier.tsx</string>
2974 </dict>
2975 <key>4</key>
2976 <dict>
2977 <key>name</key>
2978 <string>storage.type.class.tsx</string>
2979 </dict>
2980 </dict>
2981 <key>end</key>
2982 <string>(?&lt;=\})</string>
2983 <key>patterns</key>
2984 <array>
2985 <dict>
2986 <key>include</key>
2987 <string>#class-declaration-or-expression-patterns</string>
2988 </dict>
2989 </array>
2990 </dict>
2991 <key>class-expression</key>
2992 <dict>
2993 <key>name</key>
2994 <string>meta.class.tsx</string>
2995 <key>begin</key>
2996 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(class)\b(?=\s+|[&lt;{]|\/[\/*])</string>
2997 <key>beginCaptures</key>
2998 <dict>
2999 <key>1</key>
3000 <dict>
3001 <key>name</key>
3002 <string>storage.modifier.tsx</string>
3003 </dict>
3004 <key>2</key>
3005 <dict>
3006 <key>name</key>
3007 <string>storage.type.class.tsx</string>
3008 </dict>
3009 </dict>
3010 <key>end</key>
3011 <string>(?&lt;=\})</string>
3012 <key>patterns</key>
3013 <array>
3014 <dict>
3015 <key>include</key>
3016 <string>#class-declaration-or-expression-patterns</string>
3017 </dict>
3018 </array>
3019 </dict>
3020 <key>class-declaration-or-expression-patterns</key>
3021 <dict>
3022 <key>patterns</key>
3023 <array>
3024 <dict>
3025 <key>include</key>
3026 <string>#comment</string>
3027 </dict>
3028 <dict>
3029 <key>include</key>
3030 <string>#class-or-interface-heritage</string>
3031 </dict>
3032 <dict>
3033 <key>match</key>
3034 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
3035 <key>captures</key>
3036 <dict>
3037 <key>0</key>
3038 <dict>
3039 <key>name</key>
3040 <string>entity.name.type.class.tsx</string>
3041 </dict>
3042 </dict>
3043 </dict>
3044 <dict>
3045 <key>include</key>
3046 <string>#type-parameters</string>
3047 </dict>
3048 <dict>
3049 <key>include</key>
3050 <string>#class-or-interface-body</string>
3051 </dict>
3052 </array>
3053 </dict>
3054 <key>interface-declaration</key>
3055 <dict>
3056 <key>name</key>
3057 <string>meta.interface.tsx</string>
3058 <key>begin</key>
3059 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(?:(abstract)\s+)?\b(interface)\b(?=\s+|/[/*])</string>
3060 <key>beginCaptures</key>
3061 <dict>
3062 <key>1</key>
3063 <dict>
3064 <key>name</key>
3065 <string>keyword.control.export.tsx</string>
3066 </dict>
3067 <key>2</key>
3068 <dict>
3069 <key>name</key>
3070 <string>storage.modifier.tsx</string>
3071 </dict>
3072 <key>3</key>
3073 <dict>
3074 <key>name</key>
3075 <string>storage.modifier.tsx</string>
3076 </dict>
3077 <key>4</key>
3078 <dict>
3079 <key>name</key>
3080 <string>storage.type.interface.tsx</string>
3081 </dict>
3082 </dict>
3083 <key>end</key>
3084 <string>(?&lt;=\})</string>
3085 <key>patterns</key>
3086 <array>
3087 <dict>
3088 <key>include</key>
3089 <string>#comment</string>
3090 </dict>
3091 <dict>
3092 <key>include</key>
3093 <string>#class-or-interface-heritage</string>
3094 </dict>
3095 <dict>
3096 <key>match</key>
3097 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
3098 <key>captures</key>
3099 <dict>
3100 <key>0</key>
3101 <dict>
3102 <key>name</key>
3103 <string>entity.name.type.interface.tsx</string>
3104 </dict>
3105 </dict>
3106 </dict>
3107 <dict>
3108 <key>include</key>
3109 <string>#type-parameters</string>
3110 </dict>
3111 <dict>
3112 <key>include</key>
3113 <string>#class-or-interface-body</string>
3114 </dict>
3115 </array>
3116 </dict>
3117 <key>class-or-interface-heritage</key>
3118 <dict>
3119 <key>begin</key>
3120 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(extends|implements)\b)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3121 <key>beginCaptures</key>
3122 <dict>
3123 <key>1</key>
3124 <dict>
3125 <key>name</key>
3126 <string>storage.modifier.tsx</string>
3127 </dict>
3128 </dict>
3129 <key>end</key>
3130 <string>(?=\{)</string>
3131 <key>patterns</key>
3132 <array>
3133 <dict>
3134 <key>include</key>
3135 <string>#comment</string>
3136 </dict>
3137 <dict>
3138 <key>include</key>
3139 <string>#class-or-interface-heritage</string>
3140 </dict>
3141 <dict>
3142 <key>include</key>
3143 <string>#type-parameters</string>
3144 </dict>
3145 <dict>
3146 <key>include</key>
3147 <string>#expressionWithoutIdentifiers</string>
3148 </dict>
3149 <dict>
3150 <key>match</key>
3151 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))(?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s*\??\.\s*[_$[:alpha:]][_$[:alnum:]]*)*\s*)</string>
3152 <key>captures</key>
3153 <dict>
3154 <key>1</key>
3155 <dict>
3156 <key>name</key>
3157 <string>entity.name.type.module.tsx</string>
3158 </dict>
3159 <key>2</key>
3160 <dict>
3161 <key>name</key>
3162 <string>punctuation.accessor.tsx</string>
3163 </dict>
3164 <key>3</key>
3165 <dict>
3166 <key>name</key>
3167 <string>punctuation.accessor.optional.tsx</string>
3168 </dict>
3169 </dict>
3170 </dict>
3171 <dict>
3172 <key>match</key>
3173 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3174 <key>captures</key>
3175 <dict>
3176 <key>1</key>
3177 <dict>
3178 <key>name</key>
3179 <string>entity.other.inherited-class.tsx</string>
3180 </dict>
3181 </dict>
3182 </dict>
3183 <dict>
3184 <key>include</key>
3185 <string>#expressionPunctuations</string>
3186 </dict>
3187 </array>
3188 </dict>
3189 <key>class-or-interface-body</key>
3190 <dict>
3191 <key>begin</key>
3192 <string>\{</string>
3193 <key>beginCaptures</key>
3194 <dict>
3195 <key>0</key>
3196 <dict>
3197 <key>name</key>
3198 <string>punctuation.definition.block.tsx</string>
3199 </dict>
3200 </dict>
3201 <key>end</key>
3202 <string>\}</string>
3203 <key>endCaptures</key>
3204 <dict>
3205 <key>0</key>
3206 <dict>
3207 <key>name</key>
3208 <string>punctuation.definition.block.tsx</string>
3209 </dict>
3210 </dict>
3211 <key>patterns</key>
3212 <array>
3213 <dict>
3214 <key>include</key>
3215 <string>#comment</string>
3216 </dict>
3217 <dict>
3218 <key>include</key>
3219 <string>#decorator</string>
3220 </dict>
3221 <dict>
3222 <key>begin</key>
3223 <string>(?&lt;=:)\s*</string>
3224 <key>end</key>
3225 <string>(?=\s|[;),}\]:\-\+]|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3226 <key>patterns</key>
3227 <array>
3228 <dict>
3229 <key>include</key>
3230 <string>#expression</string>
3231 </dict>
3232 </array>
3233 </dict>
3234 <dict>
3235 <key>include</key>
3236 <string>#method-declaration</string>
3237 </dict>
3238 <dict>
3239 <key>include</key>
3240 <string>#indexer-declaration</string>
3241 </dict>
3242 <dict>
3243 <key>include</key>
3244 <string>#field-declaration</string>
3245 </dict>
3246 <dict>
3247 <key>include</key>
3248 <string>#string</string>
3249 </dict>
3250 <dict>
3251 <key>include</key>
3252 <string>#type-annotation</string>
3253 </dict>
3254 <dict>
3255 <key>include</key>
3256 <string>#variable-initializer</string>
3257 </dict>
3258 <dict>
3259 <key>include</key>
3260 <string>#access-modifier</string>
3261 </dict>
3262 <dict>
3263 <key>include</key>
3264 <string>#property-accessor</string>
3265 </dict>
3266 <dict>
3267 <key>include</key>
3268 <string>#async-modifier</string>
3269 </dict>
3270 <dict>
3271 <key>include</key>
3272 <string>#after-operator-block-as-object-literal</string>
3273 </dict>
3274 <dict>
3275 <key>include</key>
3276 <string>#decl-block</string>
3277 </dict>
3278 <dict>
3279 <key>include</key>
3280 <string>#expression</string>
3281 </dict>
3282 <dict>
3283 <key>include</key>
3284 <string>#punctuation-comma</string>
3285 </dict>
3286 <dict>
3287 <key>include</key>
3288 <string>#punctuation-semicolon</string>
3289 </dict>
3290 </array>
3291 </dict>
3292 <key>access-modifier</key>
3293 <dict>
3294 <key>name</key>
3295 <string>storage.modifier.tsx</string>
3296 <key>match</key>
3297 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3298 </dict>
3299 <key>property-accessor</key>
3300 <dict>
3301 <key>name</key>
3302 <string>storage.type.property.tsx</string>
3303 <key>match</key>
3304 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(accessor|get|set)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3305 </dict>
3306 <key>async-modifier</key>
3307 <dict>
3308 <key>name</key>
3309 <string>storage.modifier.async.tsx</string>
3310 <key>match</key>
3311 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(async)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3312 </dict>
3313 <key>enum-declaration</key>
3314 <dict>
3315 <key>name</key>
3316 <string>meta.enum.declaration.tsx</string>
3317 <key>begin</key>
3318 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?(?:\b(const)\s+)?\b(enum)\s+([_$[:alpha:]][_$[:alnum:]]*)</string>
3319 <key>beginCaptures</key>
3320 <dict>
3321 <key>1</key>
3322 <dict>
3323 <key>name</key>
3324 <string>keyword.control.export.tsx</string>
3325 </dict>
3326 <key>2</key>
3327 <dict>
3328 <key>name</key>
3329 <string>storage.modifier.tsx</string>
3330 </dict>
3331 <key>3</key>
3332 <dict>
3333 <key>name</key>
3334 <string>storage.modifier.tsx</string>
3335 </dict>
3336 <key>4</key>
3337 <dict>
3338 <key>name</key>
3339 <string>storage.type.enum.tsx</string>
3340 </dict>
3341 <key>5</key>
3342 <dict>
3343 <key>name</key>
3344 <string>entity.name.type.enum.tsx</string>
3345 </dict>
3346 </dict>
3347 <key>end</key>
3348 <string>(?&lt;=\})</string>
3349 <key>patterns</key>
3350 <array>
3351 <dict>
3352 <key>include</key>
3353 <string>#comment</string>
3354 </dict>
3355 <dict>
3356 <key>begin</key>
3357 <string>\{</string>
3358 <key>beginCaptures</key>
3359 <dict>
3360 <key>0</key>
3361 <dict>
3362 <key>name</key>
3363 <string>punctuation.definition.block.tsx</string>
3364 </dict>
3365 </dict>
3366 <key>end</key>
3367 <string>\}</string>
3368 <key>endCaptures</key>
3369 <dict>
3370 <key>0</key>
3371 <dict>
3372 <key>name</key>
3373 <string>punctuation.definition.block.tsx</string>
3374 </dict>
3375 </dict>
3376 <key>patterns</key>
3377 <array>
3378 <dict>
3379 <key>include</key>
3380 <string>#comment</string>
3381 </dict>
3382 <dict>
3383 <key>begin</key>
3384 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3385 <key>beginCaptures</key>
3386 <dict>
3387 <key>0</key>
3388 <dict>
3389 <key>name</key>
3390 <string>variable.other.enummember.tsx</string>
3391 </dict>
3392 </dict>
3393 <key>end</key>
3394 <string>(?=,|\}|$)</string>
3395 <key>patterns</key>
3396 <array>
3397 <dict>
3398 <key>include</key>
3399 <string>#comment</string>
3400 </dict>
3401 <dict>
3402 <key>include</key>
3403 <string>#variable-initializer</string>
3404 </dict>
3405 </array>
3406 </dict>
3407 <dict>
3408 <key>begin</key>
3409 <string>(?=((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\])))</string>
3410 <key>end</key>
3411 <string>(?=,|\}|$)</string>
3412 <key>patterns</key>
3413 <array>
3414 <dict>
3415 <key>include</key>
3416 <string>#string</string>
3417 </dict>
3418 <dict>
3419 <key>include</key>
3420 <string>#array-literal</string>
3421 </dict>
3422 <dict>
3423 <key>include</key>
3424 <string>#comment</string>
3425 </dict>
3426 <dict>
3427 <key>include</key>
3428 <string>#variable-initializer</string>
3429 </dict>
3430 </array>
3431 </dict>
3432 <dict>
3433 <key>include</key>
3434 <string>#punctuation-comma</string>
3435 </dict>
3436 </array>
3437 </dict>
3438 </array>
3439 </dict>
3440 <key>namespace-declaration</key>
3441 <dict>
3442 <key>name</key>
3443 <string>meta.namespace.declaration.tsx</string>
3444 <key>begin</key>
3445 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(namespace|module)\s+(?=[_$[:alpha:]"'`]))</string>
3446 <key>beginCaptures</key>
3447 <dict>
3448 <key>1</key>
3449 <dict>
3450 <key>name</key>
3451 <string>keyword.control.export.tsx</string>
3452 </dict>
3453 <key>2</key>
3454 <dict>
3455 <key>name</key>
3456 <string>storage.modifier.tsx</string>
3457 </dict>
3458 <key>3</key>
3459 <dict>
3460 <key>name</key>
3461 <string>storage.type.namespace.tsx</string>
3462 </dict>
3463 </dict>
3464 <key>end</key>
3465 <string>(?&lt;=\})|(?=;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3466 <key>patterns</key>
3467 <array>
3468 <dict>
3469 <key>include</key>
3470 <string>#comment</string>
3471 </dict>
3472 <dict>
3473 <key>include</key>
3474 <string>#string</string>
3475 </dict>
3476 <dict>
3477 <key>name</key>
3478 <string>entity.name.type.module.tsx</string>
3479 <key>match</key>
3480 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3481 </dict>
3482 <dict>
3483 <key>include</key>
3484 <string>#punctuation-accessor</string>
3485 </dict>
3486 <dict>
3487 <key>include</key>
3488 <string>#decl-block</string>
3489 </dict>
3490 </array>
3491 </dict>
3492 <key>type-alias-declaration</key>
3493 <dict>
3494 <key>name</key>
3495 <string>meta.type.declaration.tsx</string>
3496 <key>begin</key>
3497 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(type)\b\s+([_$[:alpha:]][_$[:alnum:]]*)\s*</string>
3498 <key>beginCaptures</key>
3499 <dict>
3500 <key>1</key>
3501 <dict>
3502 <key>name</key>
3503 <string>keyword.control.export.tsx</string>
3504 </dict>
3505 <key>2</key>
3506 <dict>
3507 <key>name</key>
3508 <string>storage.modifier.tsx</string>
3509 </dict>
3510 <key>3</key>
3511 <dict>
3512 <key>name</key>
3513 <string>storage.type.type.tsx</string>
3514 </dict>
3515 <key>4</key>
3516 <dict>
3517 <key>name</key>
3518 <string>entity.name.type.alias.tsx</string>
3519 </dict>
3520 </dict>
3521 <key>end</key>
3522 <string>(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3523 <key>patterns</key>
3524 <array>
3525 <dict>
3526 <key>include</key>
3527 <string>#comment</string>
3528 </dict>
3529 <dict>
3530 <key>include</key>
3531 <string>#type-parameters</string>
3532 </dict>
3533 <dict>
3534 <key>begin</key>
3535 <string>(=)\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3536 <key>beginCaptures</key>
3537 <dict>
3538 <key>1</key>
3539 <dict>
3540 <key>name</key>
3541 <string>keyword.operator.assignment.tsx</string>
3542 </dict>
3543 <key>2</key>
3544 <dict>
3545 <key>name</key>
3546 <string>keyword.control.intrinsic.tsx</string>
3547 </dict>
3548 </dict>
3549 <key>end</key>
3550 <string>(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3551 <key>patterns</key>
3552 <array>
3553 <dict>
3554 <key>include</key>
3555 <string>#type</string>
3556 </dict>
3557 </array>
3558 </dict>
3559 <dict>
3560 <key>begin</key>
3561 <string>(=)\s*</string>
3562 <key>beginCaptures</key>
3563 <dict>
3564 <key>1</key>
3565 <dict>
3566 <key>name</key>
3567 <string>keyword.operator.assignment.tsx</string>
3568 </dict>
3569 </dict>
3570 <key>end</key>
3571 <string>(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3572 <key>patterns</key>
3573 <array>
3574 <dict>
3575 <key>include</key>
3576 <string>#type</string>
3577 </dict>
3578 </array>
3579 </dict>
3580 </array>
3581 </dict>
3582 <key>import-equals-declaration</key>
3583 <dict>
3584 <key>patterns</key>
3585 <array>
3586 <dict>
3587 <key>name</key>
3588 <string>meta.import-equals.external.tsx</string>
3589 <key>begin</key>
3590 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type))?\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(require)\s*(\()</string>
3591 <key>beginCaptures</key>
3592 <dict>
3593 <key>1</key>
3594 <dict>
3595 <key>name</key>
3596 <string>keyword.control.export.tsx</string>
3597 </dict>
3598 <key>2</key>
3599 <dict>
3600 <key>name</key>
3601 <string>storage.modifier.tsx</string>
3602 </dict>
3603 <key>3</key>
3604 <dict>
3605 <key>name</key>
3606 <string>keyword.control.import.tsx</string>
3607 </dict>
3608 <key>4</key>
3609 <dict>
3610 <key>name</key>
3611 <string>keyword.control.type.tsx</string>
3612 </dict>
3613 <key>5</key>
3614 <dict>
3615 <key>name</key>
3616 <string>variable.other.readwrite.alias.tsx</string>
3617 </dict>
3618 <key>6</key>
3619 <dict>
3620 <key>name</key>
3621 <string>keyword.operator.assignment.tsx</string>
3622 </dict>
3623 <key>7</key>
3624 <dict>
3625 <key>name</key>
3626 <string>keyword.control.require.tsx</string>
3627 </dict>
3628 <key>8</key>
3629 <dict>
3630 <key>name</key>
3631 <string>meta.brace.round.tsx</string>
3632 </dict>
3633 </dict>
3634 <key>end</key>
3635 <string>\)</string>
3636 <key>endCaptures</key>
3637 <dict>
3638 <key>0</key>
3639 <dict>
3640 <key>name</key>
3641 <string>meta.brace.round.tsx</string>
3642 </dict>
3643 </dict>
3644 <key>patterns</key>
3645 <array>
3646 <dict>
3647 <key>include</key>
3648 <string>#comment</string>
3649 </dict>
3650 <dict>
3651 <key>include</key>
3652 <string>#string</string>
3653 </dict>
3654 </array>
3655 </dict>
3656 <dict>
3657 <key>name</key>
3658 <string>meta.import-equals.internal.tsx</string>
3659 <key>begin</key>
3660 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type))?\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(?!require\b)</string>
3661 <key>beginCaptures</key>
3662 <dict>
3663 <key>1</key>
3664 <dict>
3665 <key>name</key>
3666 <string>keyword.control.export.tsx</string>
3667 </dict>
3668 <key>2</key>
3669 <dict>
3670 <key>name</key>
3671 <string>storage.modifier.tsx</string>
3672 </dict>
3673 <key>3</key>
3674 <dict>
3675 <key>name</key>
3676 <string>keyword.control.import.tsx</string>
3677 </dict>
3678 <key>4</key>
3679 <dict>
3680 <key>name</key>
3681 <string>keyword.control.type.tsx</string>
3682 </dict>
3683 <key>5</key>
3684 <dict>
3685 <key>name</key>
3686 <string>variable.other.readwrite.alias.tsx</string>
3687 </dict>
3688 <key>6</key>
3689 <dict>
3690 <key>name</key>
3691 <string>keyword.operator.assignment.tsx</string>
3692 </dict>
3693 </dict>
3694 <key>end</key>
3695 <string>(?=;|$|^)</string>
3696 <key>patterns</key>
3697 <array>
3698 <dict>
3699 <key>include</key>
3700 <string>#single-line-comment-consuming-line-ending</string>
3701 </dict>
3702 <dict>
3703 <key>include</key>
3704 <string>#comment</string>
3705 </dict>
3706 <dict>
3707 <key>match</key>
3708 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))</string>
3709 <key>captures</key>
3710 <dict>
3711 <key>1</key>
3712 <dict>
3713 <key>name</key>
3714 <string>entity.name.type.module.tsx</string>
3715 </dict>
3716 <key>2</key>
3717 <dict>
3718 <key>name</key>
3719 <string>punctuation.accessor.tsx</string>
3720 </dict>
3721 <key>3</key>
3722 <dict>
3723 <key>name</key>
3724 <string>punctuation.accessor.optional.tsx</string>
3725 </dict>
3726 </dict>
3727 </dict>
3728 <dict>
3729 <key>name</key>
3730 <string>variable.other.readwrite.tsx</string>
3731 <key>match</key>
3732 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3733 </dict>
3734 </array>
3735 </dict>
3736 </array>
3737 </dict>
3738 <key>import-declaration</key>
3739 <dict>
3740 <key>name</key>
3741 <string>meta.import.tsx</string>
3742 <key>begin</key>
3743 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type)(?!\s+from))?(?!\s*[:\(])(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3744 <key>beginCaptures</key>
3745 <dict>
3746 <key>1</key>
3747 <dict>
3748 <key>name</key>
3749 <string>keyword.control.export.tsx</string>
3750 </dict>
3751 <key>2</key>
3752 <dict>
3753 <key>name</key>
3754 <string>storage.modifier.tsx</string>
3755 </dict>
3756 <key>3</key>
3757 <dict>
3758 <key>name</key>
3759 <string>keyword.control.import.tsx</string>
3760 </dict>
3761 <key>4</key>
3762 <dict>
3763 <key>name</key>
3764 <string>keyword.control.type.tsx</string>
3765 </dict>
3766 </dict>
3767 <key>end</key>
3768 <string>(?&lt;!^import|[^\._$[:alnum:]]import)(?=;|$|^)</string>
3769 <key>patterns</key>
3770 <array>
3771 <dict>
3772 <key>include</key>
3773 <string>#single-line-comment-consuming-line-ending</string>
3774 </dict>
3775 <dict>
3776 <key>include</key>
3777 <string>#comment</string>
3778 </dict>
3779 <dict>
3780 <key>include</key>
3781 <string>#string</string>
3782 </dict>
3783 <dict>
3784 <key>begin</key>
3785 <string>(?&lt;=^import|[^\._$[:alnum:]]import)(?!\s*["'])</string>
3786 <key>end</key>
3787 <string>\bfrom\b</string>
3788 <key>endCaptures</key>
3789 <dict>
3790 <key>0</key>
3791 <dict>
3792 <key>name</key>
3793 <string>keyword.control.from.tsx</string>
3794 </dict>
3795 </dict>
3796 <key>patterns</key>
3797 <array>
3798 <dict>
3799 <key>include</key>
3800 <string>#import-export-declaration</string>
3801 </dict>
3802 </array>
3803 </dict>
3804 <dict>
3805 <key>include</key>
3806 <string>#import-export-declaration</string>
3807 </dict>
3808 </array>
3809 </dict>
3810 <key>export-declaration</key>
3811 <dict>
3812 <key>patterns</key>
3813 <array>
3814 <dict>
3815 <key>match</key>
3816 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)\s+(as)\s+(namespace)\s+([_$[:alpha:]][_$[:alnum:]]*)</string>
3817 <key>captures</key>
3818 <dict>
3819 <key>1</key>
3820 <dict>
3821 <key>name</key>
3822 <string>keyword.control.export.tsx</string>
3823 </dict>
3824 <key>2</key>
3825 <dict>
3826 <key>name</key>
3827 <string>keyword.control.as.tsx</string>
3828 </dict>
3829 <key>3</key>
3830 <dict>
3831 <key>name</key>
3832 <string>storage.type.namespace.tsx</string>
3833 </dict>
3834 <key>4</key>
3835 <dict>
3836 <key>name</key>
3837 <string>entity.name.type.module.tsx</string>
3838 </dict>
3839 </dict>
3840 </dict>
3841 <dict>
3842 <key>name</key>
3843 <string>meta.export.default.tsx</string>
3844 <key>begin</key>
3845 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)(?:\s+(type))?(?:(?:\s*(=))|(?:\s+(default)(?=\s+)))</string>
3846 <key>beginCaptures</key>
3847 <dict>
3848 <key>1</key>
3849 <dict>
3850 <key>name</key>
3851 <string>keyword.control.export.tsx</string>
3852 </dict>
3853 <key>2</key>
3854 <dict>
3855 <key>name</key>
3856 <string>keyword.control.type.tsx</string>
3857 </dict>
3858 <key>3</key>
3859 <dict>
3860 <key>name</key>
3861 <string>keyword.operator.assignment.tsx</string>
3862 </dict>
3863 <key>4</key>
3864 <dict>
3865 <key>name</key>
3866 <string>keyword.control.default.tsx</string>
3867 </dict>
3868 </dict>
3869 <key>end</key>
3870 <string>(?=$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3871 <key>patterns</key>
3872 <array>
3873 <dict>
3874 <key>include</key>
3875 <string>#interface-declaration</string>
3876 </dict>
3877 <dict>
3878 <key>include</key>
3879 <string>#expression</string>
3880 </dict>
3881 </array>
3882 </dict>
3883 <dict>
3884 <key>name</key>
3885 <string>meta.export.tsx</string>
3886 <key>begin</key>
3887 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)(?:\s+(type))?\b(?!(\$)|(\s*:))((?=\s*[\{*])|((?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s|,))(?!\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
3888 <key>beginCaptures</key>
3889 <dict>
3890 <key>1</key>
3891 <dict>
3892 <key>name</key>
3893 <string>keyword.control.export.tsx</string>
3894 </dict>
3895 <key>2</key>
3896 <dict>
3897 <key>name</key>
3898 <string>keyword.control.type.tsx</string>
3899 </dict>
3900 </dict>
3901 <key>end</key>
3902 <string>(?=$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3903 <key>patterns</key>
3904 <array>
3905 <dict>
3906 <key>include</key>
3907 <string>#import-export-declaration</string>
3908 </dict>
3909 </array>
3910 </dict>
3911 </array>
3912 </dict>
3913 <key>import-export-declaration</key>
3914 <dict>
3915 <key>patterns</key>
3916 <array>
3917 <dict>
3918 <key>include</key>
3919 <string>#comment</string>
3920 </dict>
3921 <dict>
3922 <key>include</key>
3923 <string>#string</string>
3924 </dict>
3925 <dict>
3926 <key>include</key>
3927 <string>#import-export-block</string>
3928 </dict>
3929 <dict>
3930 <key>name</key>
3931 <string>keyword.control.from.tsx</string>
3932 <key>match</key>
3933 <string>\bfrom\b</string>
3934 </dict>
3935 <dict>
3936 <key>include</key>
3937 <string>#import-export-assert-clause</string>
3938 </dict>
3939 <dict>
3940 <key>include</key>
3941 <string>#import-export-clause</string>
3942 </dict>
3943 </array>
3944 </dict>
3945 <key>import-export-assert-clause</key>
3946 <dict>
3947 <key>begin</key>
3948 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(with)|(assert))\s*(\{)</string>
3949 <key>beginCaptures</key>
3950 <dict>
3951 <key>1</key>
3952 <dict>
3953 <key>name</key>
3954 <string>keyword.control.with.tsx</string>
3955 </dict>
3956 <key>2</key>
3957 <dict>
3958 <key>name</key>
3959 <string>keyword.control.assert.tsx</string>
3960 </dict>
3961 <key>3</key>
3962 <dict>
3963 <key>name</key>
3964 <string>punctuation.definition.block.tsx</string>
3965 </dict>
3966 </dict>
3967 <key>end</key>
3968 <string>\}</string>
3969 <key>endCaptures</key>
3970 <dict>
3971 <key>0</key>
3972 <dict>
3973 <key>name</key>
3974 <string>punctuation.definition.block.tsx</string>
3975 </dict>
3976 </dict>
3977 <key>patterns</key>
3978 <array>
3979 <dict>
3980 <key>include</key>
3981 <string>#comment</string>
3982 </dict>
3983 <dict>
3984 <key>include</key>
3985 <string>#string</string>
3986 </dict>
3987 <dict>
3988 <key>name</key>
3989 <string>meta.object-literal.key.tsx</string>
3990 <key>match</key>
3991 <string>(?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)</string>
3992 </dict>
3993 <dict>
3994 <key>name</key>
3995 <string>punctuation.separator.key-value.tsx</string>
3996 <key>match</key>
3997 <string>:</string>
3998 </dict>
3999 </array>
4000 </dict>
4001 <key>import-export-block</key>
4002 <dict>
4003 <key>name</key>
4004 <string>meta.block.tsx</string>
4005 <key>begin</key>
4006 <string>\{</string>
4007 <key>beginCaptures</key>
4008 <dict>
4009 <key>0</key>
4010 <dict>
4011 <key>name</key>
4012 <string>punctuation.definition.block.tsx</string>
4013 </dict>
4014 </dict>
4015 <key>end</key>
4016 <string>\}</string>
4017 <key>endCaptures</key>
4018 <dict>
4019 <key>0</key>
4020 <dict>
4021 <key>name</key>
4022 <string>punctuation.definition.block.tsx</string>
4023 </dict>
4024 </dict>
4025 <key>patterns</key>
4026 <array>
4027 <dict>
4028 <key>include</key>
4029 <string>#import-export-clause</string>
4030 </dict>
4031 </array>
4032 </dict>
4033 <key>import-export-clause</key>
4034 <dict>
4035 <key>patterns</key>
4036 <array>
4037 <dict>
4038 <key>include</key>
4039 <string>#comment</string>
4040 </dict>
4041 <dict>
4042 <key>match</key>
4043 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))</string>
4044 <key>captures</key>
4045 <dict>
4046 <key>1</key>
4047 <dict>
4048 <key>name</key>
4049 <string>keyword.control.type.tsx</string>
4050 </dict>
4051 <key>2</key>
4052 <dict>
4053 <key>name</key>
4054 <string>keyword.control.default.tsx</string>
4055 </dict>
4056 <key>3</key>
4057 <dict>
4058 <key>name</key>
4059 <string>constant.language.import-export-all.tsx</string>
4060 </dict>
4061 <key>4</key>
4062 <dict>
4063 <key>name</key>
4064 <string>variable.other.readwrite.tsx</string>
4065 </dict>
4066 <key>5</key>
4067 <dict>
4068 <key>name</key>
4069 <string>string.quoted.alias.tsx</string>
4070 </dict>
4071 <key>12</key>
4072 <dict>
4073 <key>name</key>
4074 <string>keyword.control.as.tsx</string>
4075 </dict>
4076 <key>13</key>
4077 <dict>
4078 <key>name</key>
4079 <string>keyword.control.default.tsx</string>
4080 </dict>
4081 <key>14</key>
4082 <dict>
4083 <key>name</key>
4084 <string>variable.other.readwrite.alias.tsx</string>
4085 </dict>
4086 <key>15</key>
4087 <dict>
4088 <key>name</key>
4089 <string>string.quoted.alias.tsx</string>
4090 </dict>
4091 </dict>
4092 </dict>
4093 <dict>
4094 <key>include</key>
4095 <string>#punctuation-comma</string>
4096 </dict>
4097 <dict>
4098 <key>name</key>
4099 <string>constant.language.import-export-all.tsx</string>
4100 <key>match</key>
4101 <string>\*</string>
4102 </dict>
4103 <dict>
4104 <key>name</key>
4105 <string>keyword.control.default.tsx</string>
4106 <key>match</key>
4107 <string>\b(default)\b</string>
4108 </dict>
4109 <dict>
4110 <key>match</key>
4111 <string>(?:(\btype)\s+)?(?:([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))</string>
4112 <key>captures</key>
4113 <dict>
4114 <key>1</key>
4115 <dict>
4116 <key>name</key>
4117 <string>keyword.control.type.tsx</string>
4118 </dict>
4119 <key>2</key>
4120 <dict>
4121 <key>name</key>
4122 <string>variable.other.readwrite.alias.tsx</string>
4123 </dict>
4124 <key>3</key>
4125 <dict>
4126 <key>name</key>
4127 <string>string.quoted.alias.tsx</string>
4128 </dict>
4129 </dict>
4130 </dict>
4131 </array>
4132 </dict>
4133 <key>switch-statement</key>
4134 <dict>
4135 <key>name</key>
4136 <string>switch-statement.expr.tsx</string>
4137 <key>begin</key>
4138 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?=\bswitch\s*\()</string>
4139 <key>end</key>
4140 <string>\}</string>
4141 <key>endCaptures</key>
4142 <dict>
4143 <key>0</key>
4144 <dict>
4145 <key>name</key>
4146 <string>punctuation.definition.block.tsx</string>
4147 </dict>
4148 </dict>
4149 <key>patterns</key>
4150 <array>
4151 <dict>
4152 <key>include</key>
4153 <string>#comment</string>
4154 </dict>
4155 <dict>
4156 <key>name</key>
4157 <string>switch-expression.expr.tsx</string>
4158 <key>begin</key>
4159 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(switch)\s*(\()</string>
4160 <key>beginCaptures</key>
4161 <dict>
4162 <key>1</key>
4163 <dict>
4164 <key>name</key>
4165 <string>keyword.control.switch.tsx</string>
4166 </dict>
4167 <key>2</key>
4168 <dict>
4169 <key>name</key>
4170 <string>meta.brace.round.tsx</string>
4171 </dict>
4172 </dict>
4173 <key>end</key>
4174 <string>\)</string>
4175 <key>endCaptures</key>
4176 <dict>
4177 <key>0</key>
4178 <dict>
4179 <key>name</key>
4180 <string>meta.brace.round.tsx</string>
4181 </dict>
4182 </dict>
4183 <key>patterns</key>
4184 <array>
4185 <dict>
4186 <key>include</key>
4187 <string>#expression</string>
4188 </dict>
4189 </array>
4190 </dict>
4191 <dict>
4192 <key>name</key>
4193 <string>switch-block.expr.tsx</string>
4194 <key>begin</key>
4195 <string>\{</string>
4196 <key>beginCaptures</key>
4197 <dict>
4198 <key>0</key>
4199 <dict>
4200 <key>name</key>
4201 <string>punctuation.definition.block.tsx</string>
4202 </dict>
4203 </dict>
4204 <key>end</key>
4205 <string>(?=\})</string>
4206 <key>patterns</key>
4207 <array>
4208 <dict>
4209 <key>name</key>
4210 <string>case-clause.expr.tsx</string>
4211 <key>begin</key>
4212 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
4213 <key>beginCaptures</key>
4214 <dict>
4215 <key>1</key>
4216 <dict>
4217 <key>name</key>
4218 <string>keyword.control.switch.tsx</string>
4219 </dict>
4220 </dict>
4221 <key>end</key>
4222 <string>(?=:)</string>
4223 <key>patterns</key>
4224 <array>
4225 <dict>
4226 <key>include</key>
4227 <string>#expression</string>
4228 </dict>
4229 </array>
4230 </dict>
4231 <dict>
4232 <key>begin</key>
4233 <string>(:)\s*(\{)</string>
4234 <key>beginCaptures</key>
4235 <dict>
4236 <key>1</key>
4237 <dict>
4238 <key>name</key>
4239 <string>case-clause.expr.tsx punctuation.definition.section.case-statement.tsx</string>
4240 </dict>
4241 <key>2</key>
4242 <dict>
4243 <key>name</key>
4244 <string>meta.block.tsx punctuation.definition.block.tsx</string>
4245 </dict>
4246 </dict>
4247 <key>end</key>
4248 <string>\}</string>
4249 <key>endCaptures</key>
4250 <dict>
4251 <key>0</key>
4252 <dict>
4253 <key>name</key>
4254 <string>meta.block.tsx punctuation.definition.block.tsx</string>
4255 </dict>
4256 </dict>
4257 <key>contentName</key>
4258 <string>meta.block.tsx</string>
4259 <key>patterns</key>
4260 <array>
4261 <dict>
4262 <key>include</key>
4263 <string>#statements</string>
4264 </dict>
4265 </array>
4266 </dict>
4267 <dict>
4268 <key>match</key>
4269 <string>(:)</string>
4270 <key>captures</key>
4271 <dict>
4272 <key>0</key>
4273 <dict>
4274 <key>name</key>
4275 <string>case-clause.expr.tsx punctuation.definition.section.case-statement.tsx</string>
4276 </dict>
4277 </dict>
4278 </dict>
4279 <dict>
4280 <key>include</key>
4281 <string>#statements</string>
4282 </dict>
4283 </array>
4284 </dict>
4285 </array>
4286 </dict>
4287 <key>for-loop</key>
4288 <dict>
4289 <key>begin</key>
4290 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))for(?=((\s+|(\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*))await)?\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)?(\())</string>
4291 <key>beginCaptures</key>
4292 <dict>
4293 <key>0</key>
4294 <dict>
4295 <key>name</key>
4296 <string>keyword.control.loop.tsx</string>
4297 </dict>
4298 </dict>
4299 <key>end</key>
4300 <string>(?&lt;=\))</string>
4301 <key>patterns</key>
4302 <array>
4303 <dict>
4304 <key>include</key>
4305 <string>#comment</string>
4306 </dict>
4307 <dict>
4308 <key>name</key>
4309 <string>keyword.control.loop.tsx</string>
4310 <key>match</key>
4311 <string>await</string>
4312 </dict>
4313 <dict>
4314 <key>begin</key>
4315 <string>\(</string>
4316 <key>beginCaptures</key>
4317 <dict>
4318 <key>0</key>
4319 <dict>
4320 <key>name</key>
4321 <string>meta.brace.round.tsx</string>
4322 </dict>
4323 </dict>
4324 <key>end</key>
4325 <string>\)</string>
4326 <key>endCaptures</key>
4327 <dict>
4328 <key>0</key>
4329 <dict>
4330 <key>name</key>
4331 <string>meta.brace.round.tsx</string>
4332 </dict>
4333 </dict>
4334 <key>patterns</key>
4335 <array>
4336 <dict>
4337 <key>include</key>
4338 <string>#var-expr</string>
4339 </dict>
4340 <dict>
4341 <key>include</key>
4342 <string>#expression</string>
4343 </dict>
4344 <dict>
4345 <key>include</key>
4346 <string>#punctuation-semicolon</string>
4347 </dict>
4348 </array>
4349 </dict>
4350 </array>
4351 </dict>
4352 <key>if-statement</key>
4353 <dict>
4354 <key>patterns</key>
4355 <array>
4356 <dict>
4357 <key>begin</key>
4358 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?=\bif\s*(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))\s*(?!\{))</string>
4359 <key>end</key>
4360 <string>(?=;|$|\})</string>
4361 <key>patterns</key>
4362 <array>
4363 <dict>
4364 <key>include</key>
4365 <string>#comment</string>
4366 </dict>
4367 <dict>
4368 <key>begin</key>
4369 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(if)\s*(\()</string>
4370 <key>beginCaptures</key>
4371 <dict>
4372 <key>1</key>
4373 <dict>
4374 <key>name</key>
4375 <string>keyword.control.conditional.tsx</string>
4376 </dict>
4377 <key>2</key>
4378 <dict>
4379 <key>name</key>
4380 <string>meta.brace.round.tsx</string>
4381 </dict>
4382 </dict>
4383 <key>end</key>
4384 <string>\)</string>
4385 <key>endCaptures</key>
4386 <dict>
4387 <key>0</key>
4388 <dict>
4389 <key>name</key>
4390 <string>meta.brace.round.tsx</string>
4391 </dict>
4392 </dict>
4393 <key>patterns</key>
4394 <array>
4395 <dict>
4396 <key>include</key>
4397 <string>#expression</string>
4398 </dict>
4399 </array>
4400 </dict>
4401 <dict>
4402 <key>name</key>
4403 <string>string.regexp.tsx</string>
4404 <key>begin</key>
4405 <string>(?&lt;=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
4406 <key>beginCaptures</key>
4407 <dict>
4408 <key>0</key>
4409 <dict>
4410 <key>name</key>
4411 <string>punctuation.definition.string.begin.tsx</string>
4412 </dict>
4413 </dict>
4414 <key>end</key>
4415 <string>(/)([dgimsuvy]*)</string>
4416 <key>endCaptures</key>
4417 <dict>
4418 <key>1</key>
4419 <dict>
4420 <key>name</key>
4421 <string>punctuation.definition.string.end.tsx</string>
4422 </dict>
4423 <key>2</key>
4424 <dict>
4425 <key>name</key>
4426 <string>keyword.other.tsx</string>
4427 </dict>
4428 </dict>
4429 <key>patterns</key>
4430 <array>
4431 <dict>
4432 <key>include</key>
4433 <string>#regexp</string>
4434 </dict>
4435 </array>
4436 </dict>
4437 <dict>
4438 <key>include</key>
4439 <string>#statements</string>
4440 </dict>
4441 </array>
4442 </dict>
4443 </array>
4444 </dict>
4445 <key>decl-block</key>
4446 <dict>
4447 <key>name</key>
4448 <string>meta.block.tsx</string>
4449 <key>begin</key>
4450 <string>\{</string>
4451 <key>beginCaptures</key>
4452 <dict>
4453 <key>0</key>
4454 <dict>
4455 <key>name</key>
4456 <string>punctuation.definition.block.tsx</string>
4457 </dict>
4458 </dict>
4459 <key>end</key>
4460 <string>\}</string>
4461 <key>endCaptures</key>
4462 <dict>
4463 <key>0</key>
4464 <dict>
4465 <key>name</key>
4466 <string>punctuation.definition.block.tsx</string>
4467 </dict>
4468 </dict>
4469 <key>patterns</key>
4470 <array>
4471 <dict>
4472 <key>include</key>
4473 <string>#statements</string>
4474 </dict>
4475 </array>
4476 </dict>
4477 <key>after-operator-block-as-object-literal</key>
4478 <dict>
4479 <key>name</key>
4480 <string>meta.objectliteral.tsx</string>
4481 <key>begin</key>
4482 <string>(?&lt;!\+\+|--)(?&lt;=[:=(,\[?+!&gt;]|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^yield|[^\._$[:alnum:]]yield|^throw|[^\._$[:alnum:]]throw|^in|[^\._$[:alnum:]]in|^of|[^\._$[:alnum:]]of|^typeof|[^\._$[:alnum:]]typeof|&amp;&amp;|\|\||\*)\s*(\{)</string>
4483 <key>beginCaptures</key>
4484 <dict>
4485 <key>1</key>
4486 <dict>
4487 <key>name</key>
4488 <string>punctuation.definition.block.tsx</string>
4489 </dict>
4490 </dict>
4491 <key>end</key>
4492 <string>\}</string>
4493 <key>endCaptures</key>
4494 <dict>
4495 <key>0</key>
4496 <dict>
4497 <key>name</key>
4498 <string>punctuation.definition.block.tsx</string>
4499 </dict>
4500 </dict>
4501 <key>patterns</key>
4502 <array>
4503 <dict>
4504 <key>include</key>
4505 <string>#object-member</string>
4506 </dict>
4507 </array>
4508 </dict>
4509 <key>object-literal</key>
4510 <dict>
4511 <key>name</key>
4512 <string>meta.objectliteral.tsx</string>
4513 <key>begin</key>
4514 <string>\{</string>
4515 <key>beginCaptures</key>
4516 <dict>
4517 <key>0</key>
4518 <dict>
4519 <key>name</key>
4520 <string>punctuation.definition.block.tsx</string>
4521 </dict>
4522 </dict>
4523 <key>end</key>
4524 <string>\}</string>
4525 <key>endCaptures</key>
4526 <dict>
4527 <key>0</key>
4528 <dict>
4529 <key>name</key>
4530 <string>punctuation.definition.block.tsx</string>
4531 </dict>
4532 </dict>
4533 <key>patterns</key>
4534 <array>
4535 <dict>
4536 <key>include</key>
4537 <string>#object-member</string>
4538 </dict>
4539 </array>
4540 </dict>
4541 <key>object-member</key>
4542 <dict>
4543 <key>patterns</key>
4544 <array>
4545 <dict>
4546 <key>include</key>
4547 <string>#comment</string>
4548 </dict>
4549 <dict>
4550 <key>include</key>
4551 <string>#object-literal-method-declaration</string>
4552 </dict>
4553 <dict>
4554 <key>name</key>
4555 <string>meta.object.member.tsx meta.object-literal.key.tsx</string>
4556 <key>begin</key>
4557 <string>(?=\[)</string>
4558 <key>end</key>
4559 <string>(?=:)|((?&lt;=[\]])(?=\s*[\(\&lt;]))</string>
4560 <key>patterns</key>
4561 <array>
4562 <dict>
4563 <key>include</key>
4564 <string>#comment</string>
4565 </dict>
4566 <dict>
4567 <key>include</key>
4568 <string>#array-literal</string>
4569 </dict>
4570 </array>
4571 </dict>
4572 <dict>
4573 <key>name</key>
4574 <string>meta.object.member.tsx meta.object-literal.key.tsx</string>
4575 <key>begin</key>
4576 <string>(?=[\'\"\`])</string>
4577 <key>end</key>
4578 <string>(?=:)|((?&lt;=[\'\"\`])(?=((\s*[\(\&lt;,}])|(\s+(as|satisifies)\s+))))</string>
4579 <key>patterns</key>
4580 <array>
4581 <dict>
4582 <key>include</key>
4583 <string>#comment</string>
4584 </dict>
4585 <dict>
4586 <key>include</key>
4587 <string>#string</string>
4588 </dict>
4589 </array>
4590 </dict>
4591 <dict>
4592 <key>name</key>
4593 <string>meta.object.member.tsx meta.object-literal.key.tsx</string>
4594 <key>begin</key>
4595 <string>(?x)(?=(\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
4596 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
4597 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
4598 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
4599 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
4600 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
4601 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
4602 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
4603 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
4604)(?!\$)))</string>
4605 <key>end</key>
4606 <string>(?=:)|(?=\s*([\(\&lt;,}])|(\s+as|satisifies\s+))</string>
4607 <key>patterns</key>
4608 <array>
4609 <dict>
4610 <key>include</key>
4611 <string>#comment</string>
4612 </dict>
4613 <dict>
4614 <key>include</key>
4615 <string>#numeric-literal</string>
4616 </dict>
4617 </array>
4618 </dict>
4619 <dict>
4620 <key>name</key>
4621 <string>meta.method.declaration.tsx</string>
4622 <key>begin</key>
4623 <string>(?&lt;=[\]\'\"\`])(?=\s*[\(\&lt;])</string>
4624 <key>end</key>
4625 <string>(?=\}|;|,)|(?&lt;=\})</string>
4626 <key>patterns</key>
4627 <array>
4628 <dict>
4629 <key>include</key>
4630 <string>#function-body</string>
4631 </dict>
4632 </array>
4633 </dict>
4634 <dict>
4635 <key>name</key>
4636 <string>meta.object.member.tsx</string>
4637 <key>match</key>
4638 <string>(?![_$[:alpha:]])([[:digit:]]+)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)</string>
4639 <key>captures</key>
4640 <dict>
4641 <key>0</key>
4642 <dict>
4643 <key>name</key>
4644 <string>meta.object-literal.key.tsx</string>
4645 </dict>
4646 <key>1</key>
4647 <dict>
4648 <key>name</key>
4649 <string>constant.numeric.decimal.tsx</string>
4650 </dict>
4651 </dict>
4652 </dict>
4653 <dict>
4654 <key>name</key>
4655 <string>meta.object.member.tsx</string>
4656 <key>match</key>
4657 <string>(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:(\s*\/\*([^\*]|(\*[^\/]))*\*\/)*\s*(
4658 ((async\s+)?(
4659 (function\s*[(&lt;*]) |
4660 (function\s+) |
4661 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
4662 )) |
4663 ((async\s*)?(
4664 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
4665 # sure shot arrow functions even if =&gt; is on new line
4666(
4667 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
4668 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
4669 (
4670 ([)]\s*:) | # ():
4671 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
4672 )
4673) |
4674(
4675 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
4676) |
4677# arrow function possible to detect only with =&gt; on same line
4678(
4679 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
4680 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
4681 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
4682 \s*=&gt; # arrow operator
4683)
4684 ))
4685)))</string>
4686 <key>captures</key>
4687 <dict>
4688 <key>0</key>
4689 <dict>
4690 <key>name</key>
4691 <string>meta.object-literal.key.tsx</string>
4692 </dict>
4693 <key>1</key>
4694 <dict>
4695 <key>name</key>
4696 <string>entity.name.function.tsx</string>
4697 </dict>
4698 </dict>
4699 </dict>
4700 <dict>
4701 <key>name</key>
4702 <string>meta.object.member.tsx</string>
4703 <key>match</key>
4704 <string>(?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)</string>
4705 <key>captures</key>
4706 <dict>
4707 <key>0</key>
4708 <dict>
4709 <key>name</key>
4710 <string>meta.object-literal.key.tsx</string>
4711 </dict>
4712 </dict>
4713 </dict>
4714 <dict>
4715 <key>name</key>
4716 <string>meta.object.member.tsx</string>
4717 <key>begin</key>
4718 <string>\.\.\.</string>
4719 <key>beginCaptures</key>
4720 <dict>
4721 <key>0</key>
4722 <dict>
4723 <key>name</key>
4724 <string>keyword.operator.spread.tsx</string>
4725 </dict>
4726 </dict>
4727 <key>end</key>
4728 <string>(?=,|\})</string>
4729 <key>patterns</key>
4730 <array>
4731 <dict>
4732 <key>include</key>
4733 <string>#expression</string>
4734 </dict>
4735 </array>
4736 </dict>
4737 <dict>
4738 <key>name</key>
4739 <string>meta.object.member.tsx</string>
4740 <key>match</key>
4741 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\}|$|\/\/|\/\*)</string>
4742 <key>captures</key>
4743 <dict>
4744 <key>1</key>
4745 <dict>
4746 <key>name</key>
4747 <string>variable.other.readwrite.tsx</string>
4748 </dict>
4749 </dict>
4750 </dict>
4751 <dict>
4752 <key>name</key>
4753 <string>meta.object.member.tsx</string>
4754 <key>match</key>
4755 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as)\s+(const)(?=\s*([,}]|$))</string>
4756 <key>captures</key>
4757 <dict>
4758 <key>1</key>
4759 <dict>
4760 <key>name</key>
4761 <string>keyword.control.as.tsx</string>
4762 </dict>
4763 <key>2</key>
4764 <dict>
4765 <key>name</key>
4766 <string>storage.modifier.tsx</string>
4767 </dict>
4768 </dict>
4769 </dict>
4770 <dict>
4771 <key>name</key>
4772 <string>meta.object.member.tsx</string>
4773 <key>begin</key>
4774 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(as)|(satisfies))\s+</string>
4775 <key>beginCaptures</key>
4776 <dict>
4777 <key>1</key>
4778 <dict>
4779 <key>name</key>
4780 <string>keyword.control.as.tsx</string>
4781 </dict>
4782 <key>2</key>
4783 <dict>
4784 <key>name</key>
4785 <string>keyword.control.satisfies.tsx</string>
4786 </dict>
4787 </dict>
4788 <key>end</key>
4789 <string>(?=[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|^|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as|satisifies)\s+))</string>
4790 <key>patterns</key>
4791 <array>
4792 <dict>
4793 <key>include</key>
4794 <string>#type</string>
4795 </dict>
4796 </array>
4797 </dict>
4798 <dict>
4799 <key>name</key>
4800 <string>meta.object.member.tsx</string>
4801 <key>begin</key>
4802 <string>(?=[_$[:alpha:]][_$[:alnum:]]*\s*=)</string>
4803 <key>end</key>
4804 <string>(?=,|\}|$|\/\/|\/\*)</string>
4805 <key>patterns</key>
4806 <array>
4807 <dict>
4808 <key>include</key>
4809 <string>#expression</string>
4810 </dict>
4811 </array>
4812 </dict>
4813 <dict>
4814 <key>name</key>
4815 <string>meta.object.member.tsx</string>
4816 <key>begin</key>
4817 <string>:</string>
4818 <key>beginCaptures</key>
4819 <dict>
4820 <key>0</key>
4821 <dict>
4822 <key>name</key>
4823 <string>meta.object-literal.key.tsx punctuation.separator.key-value.tsx</string>
4824 </dict>
4825 </dict>
4826 <key>end</key>
4827 <string>(?=,|\})</string>
4828 <key>patterns</key>
4829 <array>
4830 <dict>
4831 <key>begin</key>
4832 <string>(?&lt;=:)\s*(async)?(?=\s*(&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
4833 <key>beginCaptures</key>
4834 <dict>
4835 <key>1</key>
4836 <dict>
4837 <key>name</key>
4838 <string>storage.modifier.async.tsx</string>
4839 </dict>
4840 </dict>
4841 <key>end</key>
4842 <string>(?&lt;=\))</string>
4843 <key>patterns</key>
4844 <array>
4845 <dict>
4846 <key>include</key>
4847 <string>#type-parameters</string>
4848 </dict>
4849 <dict>
4850 <key>begin</key>
4851 <string>\(</string>
4852 <key>beginCaptures</key>
4853 <dict>
4854 <key>0</key>
4855 <dict>
4856 <key>name</key>
4857 <string>meta.brace.round.tsx</string>
4858 </dict>
4859 </dict>
4860 <key>end</key>
4861 <string>\)</string>
4862 <key>endCaptures</key>
4863 <dict>
4864 <key>0</key>
4865 <dict>
4866 <key>name</key>
4867 <string>meta.brace.round.tsx</string>
4868 </dict>
4869 </dict>
4870 <key>patterns</key>
4871 <array>
4872 <dict>
4873 <key>include</key>
4874 <string>#expression-inside-possibly-arrow-parens</string>
4875 </dict>
4876 </array>
4877 </dict>
4878 </array>
4879 </dict>
4880 <dict>
4881 <key>begin</key>
4882 <string>(?&lt;=:)\s*(async)?\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
4883 <key>beginCaptures</key>
4884 <dict>
4885 <key>1</key>
4886 <dict>
4887 <key>name</key>
4888 <string>storage.modifier.async.tsx</string>
4889 </dict>
4890 <key>2</key>
4891 <dict>
4892 <key>name</key>
4893 <string>meta.brace.round.tsx</string>
4894 </dict>
4895 </dict>
4896 <key>end</key>
4897 <string>\)</string>
4898 <key>endCaptures</key>
4899 <dict>
4900 <key>0</key>
4901 <dict>
4902 <key>name</key>
4903 <string>meta.brace.round.tsx</string>
4904 </dict>
4905 </dict>
4906 <key>patterns</key>
4907 <array>
4908 <dict>
4909 <key>include</key>
4910 <string>#expression-inside-possibly-arrow-parens</string>
4911 </dict>
4912 </array>
4913 </dict>
4914 <dict>
4915 <key>begin</key>
4916 <string>(?&lt;=:)\s*(async)?\s*(?=\&lt;\s*$)</string>
4917 <key>beginCaptures</key>
4918 <dict>
4919 <key>1</key>
4920 <dict>
4921 <key>name</key>
4922 <string>storage.modifier.async.tsx</string>
4923 </dict>
4924 </dict>
4925 <key>end</key>
4926 <string>(?&lt;=\&gt;)</string>
4927 <key>patterns</key>
4928 <array>
4929 <dict>
4930 <key>include</key>
4931 <string>#type-parameters</string>
4932 </dict>
4933 </array>
4934 </dict>
4935 <dict>
4936 <key>begin</key>
4937 <string>(?&lt;=\&gt;)\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
4938 <key>beginCaptures</key>
4939 <dict>
4940 <key>1</key>
4941 <dict>
4942 <key>name</key>
4943 <string>meta.brace.round.tsx</string>
4944 </dict>
4945 </dict>
4946 <key>end</key>
4947 <string>\)</string>
4948 <key>endCaptures</key>
4949 <dict>
4950 <key>0</key>
4951 <dict>
4952 <key>name</key>
4953 <string>meta.brace.round.tsx</string>
4954 </dict>
4955 </dict>
4956 <key>patterns</key>
4957 <array>
4958 <dict>
4959 <key>include</key>
4960 <string>#expression-inside-possibly-arrow-parens</string>
4961 </dict>
4962 </array>
4963 </dict>
4964 <dict>
4965 <key>include</key>
4966 <string>#possibly-arrow-return-type</string>
4967 </dict>
4968 <dict>
4969 <key>include</key>
4970 <string>#expression</string>
4971 </dict>
4972 </array>
4973 </dict>
4974 <dict>
4975 <key>include</key>
4976 <string>#punctuation-comma</string>
4977 </dict>
4978 <dict>
4979 <key>include</key>
4980 <string>#decl-block</string>
4981 </dict>
4982 </array>
4983 </dict>
4984 <key>ternary-expression</key>
4985 <dict>
4986 <key>begin</key>
4987 <string>(?!\?\.\s*[^[:digit:]])(\?)(?!\?)</string>
4988 <key>beginCaptures</key>
4989 <dict>
4990 <key>1</key>
4991 <dict>
4992 <key>name</key>
4993 <string>keyword.operator.ternary.tsx</string>
4994 </dict>
4995 </dict>
4996 <key>end</key>
4997 <string>\s*(:)</string>
4998 <key>endCaptures</key>
4999 <dict>
5000 <key>1</key>
5001 <dict>
5002 <key>name</key>
5003 <string>keyword.operator.ternary.tsx</string>
5004 </dict>
5005 </dict>
5006 <key>patterns</key>
5007 <array>
5008 <dict>
5009 <key>include</key>
5010 <string>#expression</string>
5011 </dict>
5012 </array>
5013 </dict>
5014 <key>function-call</key>
5015 <dict>
5016 <key>patterns</key>
5017 <array>
5018 <dict>
5019 <key>begin</key>
5020 <string>(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))\s*(?:(\?\.\s*)|(\!))?((&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?\())</string>
5021 <key>end</key>
5022 <string>(?&lt;=\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))\s*(?:(\?\.\s*)|(\!))?((&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?\())</string>
5023 <key>patterns</key>
5024 <array>
5025 <dict>
5026 <key>name</key>
5027 <string>meta.function-call.tsx</string>
5028 <key>begin</key>
5029 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))</string>
5030 <key>end</key>
5031 <string>(?=\s*(?:(\?\.\s*)|(\!))?((&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?\())</string>
5032 <key>patterns</key>
5033 <array>
5034 <dict>
5035 <key>include</key>
5036 <string>#function-call-target</string>
5037 </dict>
5038 </array>
5039 </dict>
5040 <dict>
5041 <key>include</key>
5042 <string>#comment</string>
5043 </dict>
5044 <dict>
5045 <key>include</key>
5046 <string>#function-call-optionals</string>
5047 </dict>
5048 <dict>
5049 <key>include</key>
5050 <string>#type-arguments</string>
5051 </dict>
5052 <dict>
5053 <key>include</key>
5054 <string>#paren-expression</string>
5055 </dict>
5056 </array>
5057 </dict>
5058 <dict>
5059 <key>begin</key>
5060 <string>(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))(&lt;\s*[\{\[\(]\s*$))</string>
5061 <key>end</key>
5062 <string>(?&lt;=\&gt;)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))(&lt;\s*[\{\[\(]\s*$))</string>
5063 <key>patterns</key>
5064 <array>
5065 <dict>
5066 <key>name</key>
5067 <string>meta.function-call.tsx</string>
5068 <key>begin</key>
5069 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))</string>
5070 <key>end</key>
5071 <string>(?=(&lt;\s*[\{\[\(]\s*$))</string>
5072 <key>patterns</key>
5073 <array>
5074 <dict>
5075 <key>include</key>
5076 <string>#function-call-target</string>
5077 </dict>
5078 </array>
5079 </dict>
5080 <dict>
5081 <key>include</key>
5082 <string>#comment</string>
5083 </dict>
5084 <dict>
5085 <key>include</key>
5086 <string>#function-call-optionals</string>
5087 </dict>
5088 <dict>
5089 <key>include</key>
5090 <string>#type-arguments</string>
5091 </dict>
5092 </array>
5093 </dict>
5094 </array>
5095 </dict>
5096 <key>function-call-target</key>
5097 <dict>
5098 <key>patterns</key>
5099 <array>
5100 <dict>
5101 <key>include</key>
5102 <string>#support-function-call-identifiers</string>
5103 </dict>
5104 <dict>
5105 <key>name</key>
5106 <string>entity.name.function.tsx</string>
5107 <key>match</key>
5108 <string>(\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
5109 </dict>
5110 </array>
5111 </dict>
5112 <key>function-call-optionals</key>
5113 <dict>
5114 <key>patterns</key>
5115 <array>
5116 <dict>
5117 <key>name</key>
5118 <string>meta.function-call.tsx punctuation.accessor.optional.tsx</string>
5119 <key>match</key>
5120 <string>\?\.</string>
5121 </dict>
5122 <dict>
5123 <key>name</key>
5124 <string>meta.function-call.tsx keyword.operator.definiteassignment.tsx</string>
5125 <key>match</key>
5126 <string>\!</string>
5127 </dict>
5128 </array>
5129 </dict>
5130 <key>support-function-call-identifiers</key>
5131 <dict>
5132 <key>patterns</key>
5133 <array>
5134 <dict>
5135 <key>include</key>
5136 <string>#literal</string>
5137 </dict>
5138 <dict>
5139 <key>include</key>
5140 <string>#support-objects</string>
5141 </dict>
5142 <dict>
5143 <key>include</key>
5144 <string>#object-identifiers</string>
5145 </dict>
5146 <dict>
5147 <key>include</key>
5148 <string>#punctuation-accessor</string>
5149 </dict>
5150 <dict>
5151 <key>name</key>
5152 <string>keyword.operator.expression.import.tsx</string>
5153 <key>match</key>
5154 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))import(?=\s*[\(]\s*[\"\'\`]))</string>
5155 </dict>
5156 </array>
5157 </dict>
5158 <key>new-expr</key>
5159 <dict>
5160 <key>name</key>
5161 <string>new.expr.tsx</string>
5162 <key>begin</key>
5163 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(new)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5164 <key>beginCaptures</key>
5165 <dict>
5166 <key>1</key>
5167 <dict>
5168 <key>name</key>
5169 <string>keyword.operator.new.tsx</string>
5170 </dict>
5171 </dict>
5172 <key>end</key>
5173 <string>(?&lt;=\))|(?=[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))</string>
5174 <key>patterns</key>
5175 <array>
5176 <dict>
5177 <key>include</key>
5178 <string>#expression</string>
5179 </dict>
5180 </array>
5181 </dict>
5182 <key>instanceof-expr</key>
5183 <dict>
5184 <key>begin</key>
5185 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(instanceof)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5186 <key>beginCaptures</key>
5187 <dict>
5188 <key>1</key>
5189 <dict>
5190 <key>name</key>
5191 <string>keyword.operator.expression.instanceof.tsx</string>
5192 </dict>
5193 </dict>
5194 <key>end</key>
5195 <string>(?&lt;=\))|(?=[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|(===|!==|==|!=)|(([\&amp;\~\^\|]\s*)?[_$[:alpha:]][_$[:alnum:]]*\s+instanceof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))</string>
5196 <key>patterns</key>
5197 <array>
5198 <dict>
5199 <key>include</key>
5200 <string>#type</string>
5201 </dict>
5202 </array>
5203 </dict>
5204 <key>paren-expression-possibly-arrow</key>
5205 <dict>
5206 <key>patterns</key>
5207 <array>
5208 <dict>
5209 <key>begin</key>
5210 <string>(?&lt;=[(=,])\s*(async)?(?=\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
5211 <key>beginCaptures</key>
5212 <dict>
5213 <key>1</key>
5214 <dict>
5215 <key>name</key>
5216 <string>storage.modifier.async.tsx</string>
5217 </dict>
5218 </dict>
5219 <key>end</key>
5220 <string>(?&lt;=\))</string>
5221 <key>patterns</key>
5222 <array>
5223 <dict>
5224 <key>include</key>
5225 <string>#paren-expression-possibly-arrow-with-typeparameters</string>
5226 </dict>
5227 </array>
5228 </dict>
5229 <dict>
5230 <key>begin</key>
5231 <string>(?&lt;=[(=,]|=&gt;|^return|[^\._$[:alnum:]]return)\s*(async)?(?=\s*((((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?\()|(&lt;)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)))\s*$)</string>
5232 <key>beginCaptures</key>
5233 <dict>
5234 <key>1</key>
5235 <dict>
5236 <key>name</key>
5237 <string>storage.modifier.async.tsx</string>
5238 </dict>
5239 </dict>
5240 <key>end</key>
5241 <string>(?&lt;=\))</string>
5242 <key>patterns</key>
5243 <array>
5244 <dict>
5245 <key>include</key>
5246 <string>#paren-expression-possibly-arrow-with-typeparameters</string>
5247 </dict>
5248 </array>
5249 </dict>
5250 <dict>
5251 <key>include</key>
5252 <string>#possibly-arrow-return-type</string>
5253 </dict>
5254 </array>
5255 </dict>
5256 <key>paren-expression-possibly-arrow-with-typeparameters</key>
5257 <dict>
5258 <key>patterns</key>
5259 <array>
5260 <dict>
5261 <key>include</key>
5262 <string>#type-parameters</string>
5263 </dict>
5264 <dict>
5265 <key>begin</key>
5266 <string>\(</string>
5267 <key>beginCaptures</key>
5268 <dict>
5269 <key>0</key>
5270 <dict>
5271 <key>name</key>
5272 <string>meta.brace.round.tsx</string>
5273 </dict>
5274 </dict>
5275 <key>end</key>
5276 <string>\)</string>
5277 <key>endCaptures</key>
5278 <dict>
5279 <key>0</key>
5280 <dict>
5281 <key>name</key>
5282 <string>meta.brace.round.tsx</string>
5283 </dict>
5284 </dict>
5285 <key>patterns</key>
5286 <array>
5287 <dict>
5288 <key>include</key>
5289 <string>#expression-inside-possibly-arrow-parens</string>
5290 </dict>
5291 </array>
5292 </dict>
5293 </array>
5294 </dict>
5295 <key>expression-inside-possibly-arrow-parens</key>
5296 <dict>
5297 <key>patterns</key>
5298 <array>
5299 <dict>
5300 <key>include</key>
5301 <string>#expressionWithoutIdentifiers</string>
5302 </dict>
5303 <dict>
5304 <key>include</key>
5305 <string>#comment</string>
5306 </dict>
5307 <dict>
5308 <key>include</key>
5309 <string>#string</string>
5310 </dict>
5311 <dict>
5312 <key>include</key>
5313 <string>#decorator</string>
5314 </dict>
5315 <dict>
5316 <key>include</key>
5317 <string>#destructuring-parameter</string>
5318 </dict>
5319 <dict>
5320 <key>match</key>
5321 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+)</string>
5322 <key>captures</key>
5323 <dict>
5324 <key>1</key>
5325 <dict>
5326 <key>name</key>
5327 <string>storage.modifier.tsx</string>
5328 </dict>
5329 </dict>
5330 </dict>
5331 <dict>
5332 <key>match</key>
5333 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
5334# function assignment |
5335(=\s*(
5336 ((async\s+)?(
5337 (function\s*[(&lt;*]) |
5338 (function\s+) |
5339 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
5340 )) |
5341 ((async\s*)?(
5342 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
5343 # sure shot arrow functions even if =&gt; is on new line
5344(
5345 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
5346 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
5347 (
5348 ([)]\s*:) | # ():
5349 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
5350 )
5351) |
5352(
5353 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
5354) |
5355# arrow function possible to detect only with =&gt; on same line
5356(
5357 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
5358 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
5359 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
5360 \s*=&gt; # arrow operator
5361)
5362 ))
5363)) |
5364# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
5365(:\s*(
5366 (&lt;) |
5367 ([(]\s*(
5368 ([)]) |
5369 (\.\.\.) |
5370 ([_$[:alnum:]]+\s*(
5371 ([:,?=])|
5372 ([)]\s*=&gt;)
5373 ))
5374 ))
5375)) |
5376(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
5377(:\s*((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
5378(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
5379 ((async\s+)?(
5380 (function\s*[(&lt;*]) |
5381 (function\s+) |
5382 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
5383 )) |
5384 ((async\s*)?(
5385 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
5386 # sure shot arrow functions even if =&gt; is on new line
5387(
5388 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
5389 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
5390 (
5391 ([)]\s*:) | # ():
5392 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
5393 )
5394) |
5395(
5396 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
5397) |
5398# arrow function possible to detect only with =&gt; on same line
5399(
5400 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
5401 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
5402 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
5403 \s*=&gt; # arrow operator
5404)
5405 ))
5406)))</string>
5407 <key>captures</key>
5408 <dict>
5409 <key>1</key>
5410 <dict>
5411 <key>name</key>
5412 <string>storage.modifier.tsx</string>
5413 </dict>
5414 <key>2</key>
5415 <dict>
5416 <key>name</key>
5417 <string>keyword.operator.rest.tsx</string>
5418 </dict>
5419 <key>3</key>
5420 <dict>
5421 <key>name</key>
5422 <string>entity.name.function.tsx variable.language.this.tsx</string>
5423 </dict>
5424 <key>4</key>
5425 <dict>
5426 <key>name</key>
5427 <string>entity.name.function.tsx</string>
5428 </dict>
5429 <key>5</key>
5430 <dict>
5431 <key>name</key>
5432 <string>keyword.operator.optional.tsx</string>
5433 </dict>
5434 </dict>
5435 </dict>
5436 <dict>
5437 <key>match</key>
5438 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*[:,]|$)</string>
5439 <key>captures</key>
5440 <dict>
5441 <key>1</key>
5442 <dict>
5443 <key>name</key>
5444 <string>storage.modifier.tsx</string>
5445 </dict>
5446 <key>2</key>
5447 <dict>
5448 <key>name</key>
5449 <string>keyword.operator.rest.tsx</string>
5450 </dict>
5451 <key>3</key>
5452 <dict>
5453 <key>name</key>
5454 <string>variable.parameter.tsx variable.language.this.tsx</string>
5455 </dict>
5456 <key>4</key>
5457 <dict>
5458 <key>name</key>
5459 <string>variable.parameter.tsx</string>
5460 </dict>
5461 <key>5</key>
5462 <dict>
5463 <key>name</key>
5464 <string>keyword.operator.optional.tsx</string>
5465 </dict>
5466 </dict>
5467 </dict>
5468 <dict>
5469 <key>include</key>
5470 <string>#type-annotation</string>
5471 </dict>
5472 <dict>
5473 <key>include</key>
5474 <string>#variable-initializer</string>
5475 </dict>
5476 <dict>
5477 <key>name</key>
5478 <string>punctuation.separator.parameter.tsx</string>
5479 <key>match</key>
5480 <string>,</string>
5481 </dict>
5482 <dict>
5483 <key>include</key>
5484 <string>#identifiers</string>
5485 </dict>
5486 <dict>
5487 <key>include</key>
5488 <string>#expressionPunctuations</string>
5489 </dict>
5490 </array>
5491 </dict>
5492 <key>paren-expression</key>
5493 <dict>
5494 <key>begin</key>
5495 <string>\(</string>
5496 <key>beginCaptures</key>
5497 <dict>
5498 <key>0</key>
5499 <dict>
5500 <key>name</key>
5501 <string>meta.brace.round.tsx</string>
5502 </dict>
5503 </dict>
5504 <key>end</key>
5505 <string>\)</string>
5506 <key>endCaptures</key>
5507 <dict>
5508 <key>0</key>
5509 <dict>
5510 <key>name</key>
5511 <string>meta.brace.round.tsx</string>
5512 </dict>
5513 </dict>
5514 <key>patterns</key>
5515 <array>
5516 <dict>
5517 <key>include</key>
5518 <string>#expression</string>
5519 </dict>
5520 </array>
5521 </dict>
5522 <key>cast</key>
5523 <dict>
5524 <key>patterns</key>
5525 <array>
5526 <dict>
5527 <key>include</key>
5528 <string>#jsx</string>
5529 </dict>
5530 </array>
5531 </dict>
5532 <key>expression-operators</key>
5533 <dict>
5534 <key>patterns</key>
5535 <array>
5536 <dict>
5537 <key>name</key>
5538 <string>keyword.control.flow.tsx</string>
5539 <key>match</key>
5540 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(await)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5541 </dict>
5542 <dict>
5543 <key>begin</key>
5544 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(yield)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?=\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*\*)</string>
5545 <key>beginCaptures</key>
5546 <dict>
5547 <key>1</key>
5548 <dict>
5549 <key>name</key>
5550 <string>keyword.control.flow.tsx</string>
5551 </dict>
5552 </dict>
5553 <key>end</key>
5554 <string>\*</string>
5555 <key>endCaptures</key>
5556 <dict>
5557 <key>0</key>
5558 <dict>
5559 <key>name</key>
5560 <string>keyword.generator.asterisk.tsx</string>
5561 </dict>
5562 </dict>
5563 <key>patterns</key>
5564 <array>
5565 <dict>
5566 <key>include</key>
5567 <string>#comment</string>
5568 </dict>
5569 </array>
5570 </dict>
5571 <dict>
5572 <key>match</key>
5573 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(yield)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?:\s*(\*))?</string>
5574 <key>captures</key>
5575 <dict>
5576 <key>1</key>
5577 <dict>
5578 <key>name</key>
5579 <string>keyword.control.flow.tsx</string>
5580 </dict>
5581 <key>2</key>
5582 <dict>
5583 <key>name</key>
5584 <string>keyword.generator.asterisk.tsx</string>
5585 </dict>
5586 </dict>
5587 </dict>
5588 <dict>
5589 <key>name</key>
5590 <string>keyword.operator.expression.delete.tsx</string>
5591 <key>match</key>
5592 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))delete(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5593 </dict>
5594 <dict>
5595 <key>name</key>
5596 <string>keyword.operator.expression.in.tsx</string>
5597 <key>match</key>
5598 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))in(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?!\()</string>
5599 </dict>
5600 <dict>
5601 <key>name</key>
5602 <string>keyword.operator.expression.of.tsx</string>
5603 <key>match</key>
5604 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))of(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?!\()</string>
5605 </dict>
5606 <dict>
5607 <key>name</key>
5608 <string>keyword.operator.expression.instanceof.tsx</string>
5609 <key>match</key>
5610 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))instanceof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5611 </dict>
5612 <dict>
5613 <key>name</key>
5614 <string>keyword.operator.new.tsx</string>
5615 <key>match</key>
5616 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5617 </dict>
5618 <dict>
5619 <key>include</key>
5620 <string>#typeof-operator</string>
5621 </dict>
5622 <dict>
5623 <key>name</key>
5624 <string>keyword.operator.expression.void.tsx</string>
5625 <key>match</key>
5626 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))void(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5627 </dict>
5628 <dict>
5629 <key>match</key>
5630 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as)\s+(const)(?=\s*($|[;,:})\]]))</string>
5631 <key>captures</key>
5632 <dict>
5633 <key>1</key>
5634 <dict>
5635 <key>name</key>
5636 <string>keyword.control.as.tsx</string>
5637 </dict>
5638 <key>2</key>
5639 <dict>
5640 <key>name</key>
5641 <string>storage.modifier.tsx</string>
5642 </dict>
5643 </dict>
5644 </dict>
5645 <dict>
5646 <key>begin</key>
5647 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(as)|(satisfies))\s+</string>
5648 <key>beginCaptures</key>
5649 <dict>
5650 <key>1</key>
5651 <dict>
5652 <key>name</key>
5653 <string>keyword.control.as.tsx</string>
5654 </dict>
5655 <key>2</key>
5656 <dict>
5657 <key>name</key>
5658 <string>keyword.control.satisfies.tsx</string>
5659 </dict>
5660 </dict>
5661 <key>end</key>
5662 <string>(?=^|[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as|satisfies)\s+)|(\s+\&lt;))</string>
5663 <key>patterns</key>
5664 <array>
5665 <dict>
5666 <key>include</key>
5667 <string>#type</string>
5668 </dict>
5669 </array>
5670 </dict>
5671 <dict>
5672 <key>name</key>
5673 <string>keyword.operator.spread.tsx</string>
5674 <key>match</key>
5675 <string>\.\.\.</string>
5676 </dict>
5677 <dict>
5678 <key>name</key>
5679 <string>keyword.operator.assignment.compound.tsx</string>
5680 <key>match</key>
5681 <string>\*=|(?&lt;!\()/=|%=|\+=|\-=</string>
5682 </dict>
5683 <dict>
5684 <key>name</key>
5685 <string>keyword.operator.assignment.compound.bitwise.tsx</string>
5686 <key>match</key>
5687 <string>\&amp;=|\^=|&lt;&lt;=|&gt;&gt;=|&gt;&gt;&gt;=|\|=</string>
5688 </dict>
5689 <dict>
5690 <key>name</key>
5691 <string>keyword.operator.bitwise.shift.tsx</string>
5692 <key>match</key>
5693 <string>&lt;&lt;|&gt;&gt;&gt;|&gt;&gt;</string>
5694 </dict>
5695 <dict>
5696 <key>name</key>
5697 <string>keyword.operator.comparison.tsx</string>
5698 <key>match</key>
5699 <string>===|!==|==|!=</string>
5700 </dict>
5701 <dict>
5702 <key>name</key>
5703 <string>keyword.operator.relational.tsx</string>
5704 <key>match</key>
5705 <string>&lt;=|&gt;=|&lt;&gt;|&lt;|&gt;</string>
5706 </dict>
5707 <dict>
5708 <key>match</key>
5709 <string>(?&lt;=[_$[:alnum:]])(\!)\s*(?:(/=)|(?:(/)(?![/*])))</string>
5710 <key>captures</key>
5711 <dict>
5712 <key>1</key>
5713 <dict>
5714 <key>name</key>
5715 <string>keyword.operator.logical.tsx</string>
5716 </dict>
5717 <key>2</key>
5718 <dict>
5719 <key>name</key>
5720 <string>keyword.operator.assignment.compound.tsx</string>
5721 </dict>
5722 <key>3</key>
5723 <dict>
5724 <key>name</key>
5725 <string>keyword.operator.arithmetic.tsx</string>
5726 </dict>
5727 </dict>
5728 </dict>
5729 <dict>
5730 <key>name</key>
5731 <string>keyword.operator.logical.tsx</string>
5732 <key>match</key>
5733 <string>\!|&amp;&amp;|\|\||\?\?</string>
5734 </dict>
5735 <dict>
5736 <key>name</key>
5737 <string>keyword.operator.bitwise.tsx</string>
5738 <key>match</key>
5739 <string>\&amp;|~|\^|\|</string>
5740 </dict>
5741 <dict>
5742 <key>name</key>
5743 <string>keyword.operator.assignment.tsx</string>
5744 <key>match</key>
5745 <string>\=</string>
5746 </dict>
5747 <dict>
5748 <key>name</key>
5749 <string>keyword.operator.decrement.tsx</string>
5750 <key>match</key>
5751 <string>--</string>
5752 </dict>
5753 <dict>
5754 <key>name</key>
5755 <string>keyword.operator.increment.tsx</string>
5756 <key>match</key>
5757 <string>\+\+</string>
5758 </dict>
5759 <dict>
5760 <key>name</key>
5761 <string>keyword.operator.arithmetic.tsx</string>
5762 <key>match</key>
5763 <string>%|\*|/|-|\+</string>
5764 </dict>
5765 <dict>
5766 <key>begin</key>
5767 <string>(?&lt;=[_$[:alnum:])\]])\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)+(?:(/=)|(?:(/)(?![/*]))))</string>
5768 <key>end</key>
5769 <string>(?:(/=)|(?:(/)(?!\*([^\*]|(\*[^\/]))*\*\/)))</string>
5770 <key>endCaptures</key>
5771 <dict>
5772 <key>1</key>
5773 <dict>
5774 <key>name</key>
5775 <string>keyword.operator.assignment.compound.tsx</string>
5776 </dict>
5777 <key>2</key>
5778 <dict>
5779 <key>name</key>
5780 <string>keyword.operator.arithmetic.tsx</string>
5781 </dict>
5782 </dict>
5783 <key>patterns</key>
5784 <array>
5785 <dict>
5786 <key>include</key>
5787 <string>#comment</string>
5788 </dict>
5789 </array>
5790 </dict>
5791 <dict>
5792 <key>match</key>
5793 <string>(?&lt;=[_$[:alnum:])\]])\s*(?:(/=)|(?:(/)(?![/*])))</string>
5794 <key>captures</key>
5795 <dict>
5796 <key>1</key>
5797 <dict>
5798 <key>name</key>
5799 <string>keyword.operator.assignment.compound.tsx</string>
5800 </dict>
5801 <key>2</key>
5802 <dict>
5803 <key>name</key>
5804 <string>keyword.operator.arithmetic.tsx</string>
5805 </dict>
5806 </dict>
5807 </dict>
5808 </array>
5809 </dict>
5810 <key>typeof-operator</key>
5811 <dict>
5812 <key>begin</key>
5813 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))typeof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5814 <key>beginCaptures</key>
5815 <dict>
5816 <key>0</key>
5817 <dict>
5818 <key>name</key>
5819 <string>keyword.operator.expression.typeof.tsx</string>
5820 </dict>
5821 </dict>
5822 <key>end</key>
5823 <string>(?=[,);}\]=&gt;:&amp;|{\?]|(extends\s+)|$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
5824 <key>patterns</key>
5825 <array>
5826 <dict>
5827 <key>include</key>
5828 <string>#type-arguments</string>
5829 </dict>
5830 <dict>
5831 <key>include</key>
5832 <string>#expression</string>
5833 </dict>
5834 </array>
5835 </dict>
5836 <key>literal</key>
5837 <dict>
5838 <key>patterns</key>
5839 <array>
5840 <dict>
5841 <key>include</key>
5842 <string>#numeric-literal</string>
5843 </dict>
5844 <dict>
5845 <key>include</key>
5846 <string>#boolean-literal</string>
5847 </dict>
5848 <dict>
5849 <key>include</key>
5850 <string>#null-literal</string>
5851 </dict>
5852 <dict>
5853 <key>include</key>
5854 <string>#undefined-literal</string>
5855 </dict>
5856 <dict>
5857 <key>include</key>
5858 <string>#numericConstant-literal</string>
5859 </dict>
5860 <dict>
5861 <key>include</key>
5862 <string>#array-literal</string>
5863 </dict>
5864 <dict>
5865 <key>include</key>
5866 <string>#this-literal</string>
5867 </dict>
5868 <dict>
5869 <key>include</key>
5870 <string>#super-literal</string>
5871 </dict>
5872 </array>
5873 </dict>
5874 <key>array-literal</key>
5875 <dict>
5876 <key>name</key>
5877 <string>meta.array.literal.tsx</string>
5878 <key>begin</key>
5879 <string>\s*(\[)</string>
5880 <key>beginCaptures</key>
5881 <dict>
5882 <key>1</key>
5883 <dict>
5884 <key>name</key>
5885 <string>meta.brace.square.tsx</string>
5886 </dict>
5887 </dict>
5888 <key>end</key>
5889 <string>\]</string>
5890 <key>endCaptures</key>
5891 <dict>
5892 <key>0</key>
5893 <dict>
5894 <key>name</key>
5895 <string>meta.brace.square.tsx</string>
5896 </dict>
5897 </dict>
5898 <key>patterns</key>
5899 <array>
5900 <dict>
5901 <key>include</key>
5902 <string>#expression</string>
5903 </dict>
5904 <dict>
5905 <key>include</key>
5906 <string>#punctuation-comma</string>
5907 </dict>
5908 </array>
5909 </dict>
5910 <key>numeric-literal</key>
5911 <dict>
5912 <key>patterns</key>
5913 <array>
5914 <dict>
5915 <key>name</key>
5916 <string>constant.numeric.hex.tsx</string>
5917 <key>match</key>
5918 <string>\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$)</string>
5919 <key>captures</key>
5920 <dict>
5921 <key>1</key>
5922 <dict>
5923 <key>name</key>
5924 <string>storage.type.numeric.bigint.tsx</string>
5925 </dict>
5926 </dict>
5927 </dict>
5928 <dict>
5929 <key>name</key>
5930 <string>constant.numeric.binary.tsx</string>
5931 <key>match</key>
5932 <string>\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$)</string>
5933 <key>captures</key>
5934 <dict>
5935 <key>1</key>
5936 <dict>
5937 <key>name</key>
5938 <string>storage.type.numeric.bigint.tsx</string>
5939 </dict>
5940 </dict>
5941 </dict>
5942 <dict>
5943 <key>name</key>
5944 <string>constant.numeric.octal.tsx</string>
5945 <key>match</key>
5946 <string>\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$)</string>
5947 <key>captures</key>
5948 <dict>
5949 <key>1</key>
5950 <dict>
5951 <key>name</key>
5952 <string>storage.type.numeric.bigint.tsx</string>
5953 </dict>
5954 </dict>
5955 </dict>
5956 <dict>
5957 <key>match</key>
5958 <string>(?x)
5959(?&lt;!\$)(?:
5960 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
5961 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
5962 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
5963 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
5964 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
5965 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
5966 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
5967 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
5968)(?!\$)</string>
5969 <key>captures</key>
5970 <dict>
5971 <key>0</key>
5972 <dict>
5973 <key>name</key>
5974 <string>constant.numeric.decimal.tsx</string>
5975 </dict>
5976 <key>1</key>
5977 <dict>
5978 <key>name</key>
5979 <string>meta.delimiter.decimal.period.tsx</string>
5980 </dict>
5981 <key>2</key>
5982 <dict>
5983 <key>name</key>
5984 <string>storage.type.numeric.bigint.tsx</string>
5985 </dict>
5986 <key>3</key>
5987 <dict>
5988 <key>name</key>
5989 <string>meta.delimiter.decimal.period.tsx</string>
5990 </dict>
5991 <key>4</key>
5992 <dict>
5993 <key>name</key>
5994 <string>storage.type.numeric.bigint.tsx</string>
5995 </dict>
5996 <key>5</key>
5997 <dict>
5998 <key>name</key>
5999 <string>meta.delimiter.decimal.period.tsx</string>
6000 </dict>
6001 <key>6</key>
6002 <dict>
6003 <key>name</key>
6004 <string>storage.type.numeric.bigint.tsx</string>
6005 </dict>
6006 <key>7</key>
6007 <dict>
6008 <key>name</key>
6009 <string>storage.type.numeric.bigint.tsx</string>
6010 </dict>
6011 <key>8</key>
6012 <dict>
6013 <key>name</key>
6014 <string>meta.delimiter.decimal.period.tsx</string>
6015 </dict>
6016 <key>9</key>
6017 <dict>
6018 <key>name</key>
6019 <string>storage.type.numeric.bigint.tsx</string>
6020 </dict>
6021 <key>10</key>
6022 <dict>
6023 <key>name</key>
6024 <string>meta.delimiter.decimal.period.tsx</string>
6025 </dict>
6026 <key>11</key>
6027 <dict>
6028 <key>name</key>
6029 <string>storage.type.numeric.bigint.tsx</string>
6030 </dict>
6031 <key>12</key>
6032 <dict>
6033 <key>name</key>
6034 <string>meta.delimiter.decimal.period.tsx</string>
6035 </dict>
6036 <key>13</key>
6037 <dict>
6038 <key>name</key>
6039 <string>storage.type.numeric.bigint.tsx</string>
6040 </dict>
6041 <key>14</key>
6042 <dict>
6043 <key>name</key>
6044 <string>storage.type.numeric.bigint.tsx</string>
6045 </dict>
6046 </dict>
6047 </dict>
6048 </array>
6049 </dict>
6050 <key>boolean-literal</key>
6051 <dict>
6052 <key>patterns</key>
6053 <array>
6054 <dict>
6055 <key>name</key>
6056 <string>constant.language.boolean.true.tsx</string>
6057 <key>match</key>
6058 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))true(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6059 </dict>
6060 <dict>
6061 <key>name</key>
6062 <string>constant.language.boolean.false.tsx</string>
6063 <key>match</key>
6064 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))false(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6065 </dict>
6066 </array>
6067 </dict>
6068 <key>null-literal</key>
6069 <dict>
6070 <key>name</key>
6071 <string>constant.language.null.tsx</string>
6072 <key>match</key>
6073 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))null(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6074 </dict>
6075 <key>this-literal</key>
6076 <dict>
6077 <key>name</key>
6078 <string>variable.language.this.tsx</string>
6079 <key>match</key>
6080 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))this\b(?!\$)</string>
6081 </dict>
6082 <key>super-literal</key>
6083 <dict>
6084 <key>name</key>
6085 <string>variable.language.super.tsx</string>
6086 <key>match</key>
6087 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))super\b(?!\$)</string>
6088 </dict>
6089 <key>undefined-literal</key>
6090 <dict>
6091 <key>name</key>
6092 <string>constant.language.undefined.tsx</string>
6093 <key>match</key>
6094 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))undefined(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6095 </dict>
6096 <key>numericConstant-literal</key>
6097 <dict>
6098 <key>patterns</key>
6099 <array>
6100 <dict>
6101 <key>name</key>
6102 <string>constant.language.nan.tsx</string>
6103 <key>match</key>
6104 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))NaN(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6105 </dict>
6106 <dict>
6107 <key>name</key>
6108 <string>constant.language.infinity.tsx</string>
6109 <key>match</key>
6110 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Infinity(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6111 </dict>
6112 </array>
6113 </dict>
6114 <key>support-objects</key>
6115 <dict>
6116 <key>patterns</key>
6117 <array>
6118 <dict>
6119 <key>name</key>
6120 <string>variable.language.arguments.tsx</string>
6121 <key>match</key>
6122 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(arguments)\b(?!\$)</string>
6123 </dict>
6124 <dict>
6125 <key>name</key>
6126 <string>support.class.builtin.tsx</string>
6127 <key>match</key>
6128 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Array|ArrayBuffer|Atomics|BigInt|BigInt64Array|BigUint64Array|Boolean|DataView|Date|Float32Array
6129 |Float64Array|Function|Generator|GeneratorFunction|Int8Array|Int16Array|Int32Array|Intl|Map|Number|Object|Proxy
6130 |Reflect|RegExp|Set|SharedArrayBuffer|SIMD|String|Symbol|TypedArray
6131 |Uint8Array|Uint16Array|Uint32Array|Uint8ClampedArray|WeakMap|WeakSet)\b(?!\$)</string>
6132 </dict>
6133 <dict>
6134 <key>name</key>
6135 <string>support.class.error.tsx</string>
6136 <key>match</key>
6137 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))((Eval|Internal|Range|Reference|Syntax|Type|URI)?Error)\b(?!\$)</string>
6138 </dict>
6139 <dict>
6140 <key>name</key>
6141 <string>support.class.promise.tsx</string>
6142 <key>match</key>
6143 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Promise)\b(?!\$)</string>
6144 </dict>
6145 <dict>
6146 <key>name</key>
6147 <string>support.function.tsx</string>
6148 <key>match</key>
6149 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(clear(Interval|Timeout)|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|
6150 isFinite|isNaN|parseFloat|parseInt|require|set(Interval|Timeout)|super|unescape|uneval)(?=\s*\()</string>
6151 </dict>
6152 <dict>
6153 <key>match</key>
6154 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Math)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?:
6155 (abs|acos|acosh|asin|asinh|atan|atan2|atanh|cbrt|ceil|clz32|cos|cosh|exp|
6156 expm1|floor|fround|hypot|imul|log|log10|log1p|log2|max|min|pow|random|
6157 round|sign|sin|sinh|sqrt|tan|tanh|trunc)
6158 |
6159 (E|LN10|LN2|LOG10E|LOG2E|PI|SQRT1_2|SQRT2)))?\b(?!\$)</string>
6160 <key>captures</key>
6161 <dict>
6162 <key>1</key>
6163 <dict>
6164 <key>name</key>
6165 <string>support.constant.math.tsx</string>
6166 </dict>
6167 <key>2</key>
6168 <dict>
6169 <key>name</key>
6170 <string>punctuation.accessor.tsx</string>
6171 </dict>
6172 <key>3</key>
6173 <dict>
6174 <key>name</key>
6175 <string>punctuation.accessor.optional.tsx</string>
6176 </dict>
6177 <key>4</key>
6178 <dict>
6179 <key>name</key>
6180 <string>support.function.math.tsx</string>
6181 </dict>
6182 <key>5</key>
6183 <dict>
6184 <key>name</key>
6185 <string>support.constant.property.math.tsx</string>
6186 </dict>
6187 </dict>
6188 </dict>
6189 <dict>
6190 <key>match</key>
6191 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(console)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(
6192 assert|clear|count|debug|dir|error|group|groupCollapsed|groupEnd|info|log
6193 |profile|profileEnd|table|time|timeEnd|timeStamp|trace|warn))?\b(?!\$)</string>
6194 <key>captures</key>
6195 <dict>
6196 <key>1</key>
6197 <dict>
6198 <key>name</key>
6199 <string>support.class.console.tsx</string>
6200 </dict>
6201 <key>2</key>
6202 <dict>
6203 <key>name</key>
6204 <string>punctuation.accessor.tsx</string>
6205 </dict>
6206 <key>3</key>
6207 <dict>
6208 <key>name</key>
6209 <string>punctuation.accessor.optional.tsx</string>
6210 </dict>
6211 <key>4</key>
6212 <dict>
6213 <key>name</key>
6214 <string>support.function.console.tsx</string>
6215 </dict>
6216 </dict>
6217 </dict>
6218 <dict>
6219 <key>match</key>
6220 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(JSON)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(parse|stringify))?\b(?!\$)</string>
6221 <key>captures</key>
6222 <dict>
6223 <key>1</key>
6224 <dict>
6225 <key>name</key>
6226 <string>support.constant.json.tsx</string>
6227 </dict>
6228 <key>2</key>
6229 <dict>
6230 <key>name</key>
6231 <string>punctuation.accessor.tsx</string>
6232 </dict>
6233 <key>3</key>
6234 <dict>
6235 <key>name</key>
6236 <string>punctuation.accessor.optional.tsx</string>
6237 </dict>
6238 <key>4</key>
6239 <dict>
6240 <key>name</key>
6241 <string>support.function.json.tsx</string>
6242 </dict>
6243 </dict>
6244 </dict>
6245 <dict>
6246 <key>match</key>
6247 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(import)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(meta)\b(?!\$)</string>
6248 <key>captures</key>
6249 <dict>
6250 <key>1</key>
6251 <dict>
6252 <key>name</key>
6253 <string>keyword.control.import.tsx</string>
6254 </dict>
6255 <key>2</key>
6256 <dict>
6257 <key>name</key>
6258 <string>punctuation.accessor.tsx</string>
6259 </dict>
6260 <key>3</key>
6261 <dict>
6262 <key>name</key>
6263 <string>punctuation.accessor.optional.tsx</string>
6264 </dict>
6265 <key>4</key>
6266 <dict>
6267 <key>name</key>
6268 <string>support.variable.property.importmeta.tsx</string>
6269 </dict>
6270 </dict>
6271 </dict>
6272 <dict>
6273 <key>match</key>
6274 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(new)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(target)\b(?!\$)</string>
6275 <key>captures</key>
6276 <dict>
6277 <key>1</key>
6278 <dict>
6279 <key>name</key>
6280 <string>keyword.operator.new.tsx</string>
6281 </dict>
6282 <key>2</key>
6283 <dict>
6284 <key>name</key>
6285 <string>punctuation.accessor.tsx</string>
6286 </dict>
6287 <key>3</key>
6288 <dict>
6289 <key>name</key>
6290 <string>punctuation.accessor.optional.tsx</string>
6291 </dict>
6292 <key>4</key>
6293 <dict>
6294 <key>name</key>
6295 <string>support.variable.property.target.tsx</string>
6296 </dict>
6297 </dict>
6298 </dict>
6299 <dict>
6300 <key>match</key>
6301 <string>(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:
6302 (?:(constructor|length|prototype|__proto__)\b(?!\$|\s*(&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?\())
6303 |
6304 (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\b(?!\$)))</string>
6305 <key>captures</key>
6306 <dict>
6307 <key>1</key>
6308 <dict>
6309 <key>name</key>
6310 <string>punctuation.accessor.tsx</string>
6311 </dict>
6312 <key>2</key>
6313 <dict>
6314 <key>name</key>
6315 <string>punctuation.accessor.optional.tsx</string>
6316 </dict>
6317 <key>3</key>
6318 <dict>
6319 <key>name</key>
6320 <string>support.variable.property.tsx</string>
6321 </dict>
6322 <key>4</key>
6323 <dict>
6324 <key>name</key>
6325 <string>support.constant.tsx</string>
6326 </dict>
6327 </dict>
6328 </dict>
6329 <dict>
6330 <key>match</key>
6331 <string>(?x) (?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.)) \b (?:
6332 (document|event|navigator|performance|screen|window)
6333 |
6334 (AnalyserNode|ArrayBufferView|Attr|AudioBuffer|AudioBufferSourceNode|AudioContext|AudioDestinationNode|AudioListener
6335 |AudioNode|AudioParam|BatteryManager|BeforeUnloadEvent|BiquadFilterNode|Blob|BufferSource|ByteString|CSS|CSSConditionRule
6336 |CSSCounterStyleRule|CSSGroupingRule|CSSMatrix|CSSMediaRule|CSSPageRule|CSSPrimitiveValue|CSSRule|CSSRuleList|CSSStyleDeclaration
6337 |CSSStyleRule|CSSStyleSheet|CSSSupportsRule|CSSValue|CSSValueList|CanvasGradient|CanvasImageSource|CanvasPattern
6338 |CanvasRenderingContext2D|ChannelMergerNode|ChannelSplitterNode|CharacterData|ChromeWorker|CloseEvent|Comment|CompositionEvent
6339 |Console|ConvolverNode|Coordinates|Credential|CredentialsContainer|Crypto|CryptoKey|CustomEvent|DOMError|DOMException
6340 |DOMHighResTimeStamp|DOMImplementation|DOMString|DOMStringList|DOMStringMap|DOMTimeStamp|DOMTokenList|DataTransfer
6341 |DataTransferItem|DataTransferItemList|DedicatedWorkerGlobalScope|DelayNode|DeviceProximityEvent|DirectoryEntry
6342 |DirectoryEntrySync|DirectoryReader|DirectoryReaderSync|Document|DocumentFragment|DocumentTouch|DocumentType|DragEvent
6343 |DynamicsCompressorNode|Element|Entry|EntrySync|ErrorEvent|Event|EventListener|EventSource|EventTarget|FederatedCredential
6344 |FetchEvent|File|FileEntry|FileEntrySync|FileException|FileList|FileReader|FileReaderSync|FileSystem|FileSystemSync
6345 |FontFace|FormData|GainNode|Gamepad|GamepadButton|GamepadEvent|Geolocation|GlobalEventHandlers|HTMLAnchorElement
6346 |HTMLAreaElement|HTMLAudioElement|HTMLBRElement|HTMLBaseElement|HTMLBodyElement|HTMLButtonElement|HTMLCanvasElement
6347 |HTMLCollection|HTMLContentElement|HTMLDListElement|HTMLDataElement|HTMLDataListElement|HTMLDialogElement|HTMLDivElement
6348 |HTMLDocument|HTMLElement|HTMLEmbedElement|HTMLFieldSetElement|HTMLFontElement|HTMLFormControlsCollection|HTMLFormElement
6349 |HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLIFrameElement|HTMLImageElement|HTMLInputElement
6350 |HTMLKeygenElement|HTMLLIElement|HTMLLabelElement|HTMLLegendElement|HTMLLinkElement|HTMLMapElement|HTMLMediaElement
6351 |HTMLMetaElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLObjectElement|HTMLOptGroupElement|HTMLOptionElement
6352 |HTMLOptionsCollection|HTMLOutputElement|HTMLParagraphElement|HTMLParamElement|HTMLPreElement|HTMLProgressElement
6353 |HTMLQuoteElement|HTMLScriptElement|HTMLSelectElement|HTMLShadowElement|HTMLSourceElement|HTMLSpanElement|HTMLStyleElement
6354 |HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement
6355 |HTMLTableRowElement|HTMLTableSectionElement|HTMLTextAreaElement|HTMLTimeElement|HTMLTitleElement|HTMLTrackElement
6356 |HTMLUListElement|HTMLUnknownElement|HTMLVideoElement|HashChangeEvent|History|IDBCursor|IDBCursorWithValue|IDBDatabase
6357 |IDBEnvironment|IDBFactory|IDBIndex|IDBKeyRange|IDBMutableFile|IDBObjectStore|IDBOpenDBRequest|IDBRequest|IDBTransaction
6358 |IDBVersionChangeEvent|IIRFilterNode|IdentityManager|ImageBitmap|ImageBitmapFactories|ImageData|Index|InputDeviceCapabilities
6359 |InputEvent|InstallEvent|InstallTrigger|KeyboardEvent|LinkStyle|LocalFileSystem|LocalFileSystemSync|Location|MIDIAccess
6360 |MIDIConnectionEvent|MIDIInput|MIDIInputMap|MIDIOutputMap|MediaElementAudioSourceNode|MediaError|MediaKeyMessageEvent
6361 |MediaKeySession|MediaKeyStatusMap|MediaKeySystemAccess|MediaKeySystemConfiguration|MediaKeys|MediaRecorder|MediaStream
6362 |MediaStreamAudioDestinationNode|MediaStreamAudioSourceNode|MessageChannel|MessageEvent|MessagePort|MouseEvent
6363 |MutationObserver|MutationRecord|NamedNodeMap|Navigator|NavigatorConcurrentHardware|NavigatorGeolocation|NavigatorID
6364 |NavigatorLanguage|NavigatorOnLine|Node|NodeFilter|NodeIterator|NodeList|NonDocumentTypeChildNode|Notification
6365 |OfflineAudioCompletionEvent|OfflineAudioContext|OscillatorNode|PageTransitionEvent|PannerNode|ParentNode|PasswordCredential
6366 |Path2D|PaymentAddress|PaymentRequest|PaymentResponse|Performance|PerformanceEntry|PerformanceFrameTiming|PerformanceMark
6367 |PerformanceMeasure|PerformanceNavigation|PerformanceNavigationTiming|PerformanceObserver|PerformanceObserverEntryList
6368 |PerformanceResourceTiming|PerformanceTiming|PeriodicSyncEvent|PeriodicWave|Plugin|Point|PointerEvent|PopStateEvent
6369 |PortCollection|Position|PositionError|PositionOptions|PresentationConnectionClosedEvent|PresentationConnectionList
6370 |PresentationReceiver|ProcessingInstruction|ProgressEvent|PromiseRejectionEvent|PushEvent|PushRegistrationManager
6371 |RTCCertificate|RTCConfiguration|RTCPeerConnection|RTCSessionDescriptionCallback|RTCStatsReport|RadioNodeList|RandomSource
6372 |Range|ReadableByteStream|RenderingContext|SVGAElement|SVGAngle|SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement
6373 |SVGAnimateTransformElement|SVGAnimatedAngle|SVGAnimatedBoolean|SVGAnimatedEnumeration|SVGAnimatedInteger|SVGAnimatedLength
6374 |SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedPoints|SVGAnimatedPreserveAspectRatio
6375 |SVGAnimatedRect|SVGAnimatedString|SVGAnimatedTransformList|SVGAnimationElement|SVGCircleElement|SVGClipPathElement
6376 |SVGCursorElement|SVGDefsElement|SVGDescElement|SVGElement|SVGEllipseElement|SVGEvent|SVGFilterElement|SVGFontElement
6377 |SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement
6378 |SVGForeignObjectElement|SVGGElement|SVGGlyphElement|SVGGradientElement|SVGHKernElement|SVGImageElement|SVGLength
6379 |SVGLengthList|SVGLineElement|SVGLinearGradientElement|SVGMPathElement|SVGMaskElement|SVGMatrix|SVGMissingGlyphElement
6380 |SVGNumber|SVGNumberList|SVGPathElement|SVGPatternElement|SVGPoint|SVGPolygonElement|SVGPolylineElement|SVGPreserveAspectRatio
6381 |SVGRadialGradientElement|SVGRect|SVGRectElement|SVGSVGElement|SVGScriptElement|SVGSetElement|SVGStopElement|SVGStringList
6382 |SVGStylable|SVGStyleElement|SVGSwitchElement|SVGSymbolElement|SVGTRefElement|SVGTSpanElement|SVGTests|SVGTextElement
6383 |SVGTextPositioningElement|SVGTitleElement|SVGTransform|SVGTransformList|SVGTransformable|SVGUseElement|SVGVKernElement
6384 |SVGViewElement|ServiceWorker|ServiceWorkerContainer|ServiceWorkerGlobalScope|ServiceWorkerRegistration|ServiceWorkerState
6385 |ShadowRoot|SharedWorker|SharedWorkerGlobalScope|SourceBufferList|StereoPannerNode|Storage|StorageEvent|StyleSheet
6386 |StyleSheetList|SubtleCrypto|SyncEvent|Text|TextMetrics|TimeEvent|TimeRanges|Touch|TouchEvent|TouchList|Transferable
6387 |TreeWalker|UIEvent|USVString|VRDisplayCapabilities|ValidityState|WaveShaperNode|WebGL|WebGLActiveInfo|WebGLBuffer
6388 |WebGLContextEvent|WebGLFramebuffer|WebGLProgram|WebGLRenderbuffer|WebGLRenderingContext|WebGLShader|WebGLShaderPrecisionFormat
6389 |WebGLTexture|WebGLTimerQueryEXT|WebGLTransformFeedback|WebGLUniformLocation|WebGLVertexArrayObject|WebGLVertexArrayObjectOES
6390 |WebSocket|WebSockets|WebVTT|WheelEvent|Window|WindowBase64|WindowEventHandlers|WindowTimers|Worker|WorkerGlobalScope
6391 |WorkerLocation|WorkerNavigator|XMLHttpRequest|XMLHttpRequestEventTarget|XMLSerializer|XPathExpression|XPathResult
6392 |XSLTProcessor))\b(?!\$)</string>
6393 <key>captures</key>
6394 <dict>
6395 <key>1</key>
6396 <dict>
6397 <key>name</key>
6398 <string>support.variable.dom.tsx</string>
6399 </dict>
6400 <key>2</key>
6401 <dict>
6402 <key>name</key>
6403 <string>support.class.dom.tsx</string>
6404 </dict>
6405 </dict>
6406 </dict>
6407 <dict>
6408 <key>match</key>
6409 <string>(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:
6410 (ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE
6411 |DOMSTRING_SIZE_ERR|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|HIERARCHY_REQUEST_ERR|INDEX_SIZE_ERR
6412 |INUSE_ATTRIBUTE_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR
6413 |NOT_SUPPORTED_ERR|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|WRONG_DOCUMENT_ERR)
6414 |
6415 (_content|[xyz]|abbr|above|accept|acceptCharset|accessKey|action|align|[av]Link(?:color)?|all|alt|anchors|appCodeName
6416 |appCore|applets|appMinorVersion|appName|appVersion|archive|areas|arguments|attributes|availHeight|availLeft|availTop
6417 |availWidth|axis|background|backgroundColor|backgroundImage|below|bgColor|body|border|borderBottomWidth|borderColor
6418 |borderLeftWidth|borderRightWidth|borderStyle|borderTopWidth|borderWidth|bottom|bufferDepth|callee|caller|caption
6419 |cellPadding|cells|cellSpacing|ch|characterSet|charset|checked|childNodes|chOff|cite|classes|className|clear
6420 |clientInformation|clip|clipBoardData|closed|code|codeBase|codeType|color|colorDepth|cols|colSpan|compact|complete
6421 |components|content|controllers|cookie|cookieEnabled|cords|cpuClass|crypto|current|data|dateTime|declare|defaultCharset
6422 |defaultChecked|defaultSelected|defaultStatus|defaultValue|defaultView|defer|description|dialogArguments|dialogHeight
6423 |dialogLeft|dialogTop|dialogWidth|dir|directories|disabled|display|docmain|doctype|documentElement|elements|embeds
6424 |enabledPlugin|encoding|enctype|entities|event|expando|external|face|fgColor|filename|firstChild|fontFamily|fontSize
6425 |fontWeight|form|formName|forms|frame|frameBorder|frameElement|frames|hasFocus|hash|headers|height|history|host
6426 |hostname|href|hreflang|hspace|htmlFor|httpEquiv|id|ids|ignoreCase|images|implementation|index|innerHeight|innerWidth
6427 |input|isMap|label|lang|language|lastChild|lastIndex|lastMatch|lastModified|lastParen|layer[sXY]|left|leftContext
6428 |lineHeight|link|linkColor|links|listStyleType|localName|location|locationbar|longDesc|lowsrc|lowSrc|marginBottom
6429 |marginHeight|marginLeft|marginRight|marginTop|marginWidth|maxLength|media|menubar|method|mimeTypes|multiline|multiple
6430 |name|nameProp|namespaces|namespaceURI|next|nextSibling|nodeName|nodeType|nodeValue|noHref|noResize|noShade|notationName
6431 |notations|noWrap|object|offscreenBuffering|onLine|onreadystatechange|opener|opsProfile|options|oscpu|outerHeight
6432 |outerWidth|ownerDocument|paddingBottom|paddingLeft|paddingRight|paddingTop|page[XY]|page[XY]Offset|parent|parentLayer
6433 |parentNode|parentWindow|pathname|personalbar|pixelDepth|pkcs11|platform|plugins|port|prefix|previous|previousDibling
6434 |product|productSub|profile|profileend|prompt|prompter|protocol|publicId|readOnly|readyState|referrer|rel|responseText
6435 |responseXML|rev|right|rightContext|rowIndex|rows|rowSpan|rules|scheme|scope|screen[XY]|screenLeft|screenTop|scripts
6436 |scrollbars|scrolling|sectionRowIndex|security|securityPolicy|selected|selectedIndex|selection|self|shape|siblingAbove
6437 |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary
6438 |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead
6439 |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile
6440 |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\b(?!\$|\s*(&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?\()</string>
6441 <key>captures</key>
6442 <dict>
6443 <key>1</key>
6444 <dict>
6445 <key>name</key>
6446 <string>punctuation.accessor.tsx</string>
6447 </dict>
6448 <key>2</key>
6449 <dict>
6450 <key>name</key>
6451 <string>punctuation.accessor.optional.tsx</string>
6452 </dict>
6453 <key>3</key>
6454 <dict>
6455 <key>name</key>
6456 <string>support.constant.dom.tsx</string>
6457 </dict>
6458 <key>4</key>
6459 <dict>
6460 <key>name</key>
6461 <string>support.variable.property.dom.tsx</string>
6462 </dict>
6463 </dict>
6464 </dict>
6465 <dict>
6466 <key>name</key>
6467 <string>support.class.node.tsx</string>
6468 <key>match</key>
6469 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream
6470 |Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b(?!\$)</string>
6471 </dict>
6472 <dict>
6473 <key>match</key>
6474 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(process)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))(?:
6475 (arch|argv|config|connected|env|execArgv|execPath|exitCode|mainModule|pid|platform|release|stderr|stdin|stdout|title|version|versions)
6476 |
6477 (abort|chdir|cwd|disconnect|exit|[sg]ete?[gu]id|send|[sg]etgroups|initgroups|kill|memoryUsage|nextTick|umask|uptime|hrtime)
6478))?\b(?!\$)</string>
6479 <key>captures</key>
6480 <dict>
6481 <key>1</key>
6482 <dict>
6483 <key>name</key>
6484 <string>support.variable.object.process.tsx</string>
6485 </dict>
6486 <key>2</key>
6487 <dict>
6488 <key>name</key>
6489 <string>punctuation.accessor.tsx</string>
6490 </dict>
6491 <key>3</key>
6492 <dict>
6493 <key>name</key>
6494 <string>punctuation.accessor.optional.tsx</string>
6495 </dict>
6496 <key>4</key>
6497 <dict>
6498 <key>name</key>
6499 <string>support.variable.property.process.tsx</string>
6500 </dict>
6501 <key>5</key>
6502 <dict>
6503 <key>name</key>
6504 <string>support.function.process.tsx</string>
6505 </dict>
6506 </dict>
6507 </dict>
6508 <dict>
6509 <key>match</key>
6510 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(exports)|(module)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\b(?!\$)</string>
6511 <key>captures</key>
6512 <dict>
6513 <key>1</key>
6514 <dict>
6515 <key>name</key>
6516 <string>support.type.object.module.tsx</string>
6517 </dict>
6518 <key>2</key>
6519 <dict>
6520 <key>name</key>
6521 <string>support.type.object.module.tsx</string>
6522 </dict>
6523 <key>3</key>
6524 <dict>
6525 <key>name</key>
6526 <string>punctuation.accessor.tsx</string>
6527 </dict>
6528 <key>4</key>
6529 <dict>
6530 <key>name</key>
6531 <string>punctuation.accessor.optional.tsx</string>
6532 </dict>
6533 <key>5</key>
6534 <dict>
6535 <key>name</key>
6536 <string>support.type.object.module.tsx</string>
6537 </dict>
6538 </dict>
6539 </dict>
6540 <dict>
6541 <key>name</key>
6542 <string>support.variable.object.node.tsx</string>
6543 <key>match</key>
6544 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(global|GLOBAL|root|__dirname|__filename)\b(?!\$)</string>
6545 </dict>
6546 <dict>
6547 <key>match</key>
6548 <string>(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s*
6549(?:
6550 (on(?:Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset|
6551 Readystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove|
6552 Before(?:cut|deactivate|unload|update|paste|print|editfocus|activate)|
6553 Blur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help|
6554 Change|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate|
6555 Datasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover|
6556 Dragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error|
6557 Errorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort)
6558 ) |
6559 (shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|
6560 scrollByLines|scrollY|scrollTo|stop|strike|sizeToContent|sidebar|signText|sort|
6561 sup|sub|substr|substring|splice|split|send|set(?:Milliseconds|Seconds|Minutes|Hours|
6562 Month|Year|FullYear|Date|UTC(?:Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|
6563 Time|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|slice|
6564 savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat|
6565 contextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup|
6566 createEventObject|to(?:GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|
6567 test|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|
6568 untaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse|
6569 print|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file|
6570 fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|
6571 forward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert|
6572 abort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|
6573 releaseCapture|releaseEvents|go|get(?:Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|
6574 Time|Date|TimezoneOffset|UTC(?:Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|
6575 Attention|Selection|ResponseHeader|AllResponseHeaders)|moveBy|moveBelow|moveTo|
6576 moveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back
6577 ) |
6578 (acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append|
6579 appendChild|appendData|before|blur|canPlayType|captureStream|
6580 caretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click|
6581 cloneContents|cloneNode|cloneRange|close|closest|collapse|
6582 compareBoundaryPoints|compareDocumentPosition|comparePoint|contains|
6583 convertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute|
6584 createAttributeNS|createCaption|createCDATASection|createComment|
6585 createContextualFragment|createDocument|createDocumentFragment|
6586 createDocumentType|createElement|createElementNS|createEntityReference|
6587 createEvent|createExpression|createHTMLDocument|createNodeIterator|
6588 createNSResolver|createProcessingInstruction|createRange|createShadowRoot|
6589 createTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete|
6590 deleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot|
6591 deleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint|
6592 enableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen|
6593 exitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get|
6594 getAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode|
6595 getAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads|
6596 getClientRects|getContext|getDestinationInsertionPoints|getElementById|
6597 getElementsByClassName|getElementsByName|getElementsByTagName|
6598 getElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate|
6599 getVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes|
6600 hasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement|
6601 insertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData|
6602 insertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode|
6603 isPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI|
6604 lookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild|
6605 moveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open|
6606 parentNode|pause|play|postMessage|prepend|preventDefault|previousNode|
6607 previousSibling|probablySupportsContext|queryCommandEnabled|
6608 queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue|
6609 querySelector|querySelectorAll|registerContentHandler|registerElement|
6610 registerProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute|
6611 removeAttributeNode|removeAttributeNS|removeChild|removeEventListener|
6612 removeItem|replace|replaceChild|replaceData|replaceWith|reportValidity|
6613 requestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView|
6614 scrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute|
6615 setAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture|
6616 setCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem|
6617 setRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore|
6618 slice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation|
6619 submit|substringData|supports|surroundContents|takeRecords|terminate|toBlob|
6620 toDataURL|toggle|toString|values|write|writeln
6621 ) |
6622 (all|catch|finally|race|reject|resolve|then
6623 )
6624)(?=\s*\()</string>
6625 <key>captures</key>
6626 <dict>
6627 <key>1</key>
6628 <dict>
6629 <key>name</key>
6630 <string>punctuation.accessor.tsx</string>
6631 </dict>
6632 <key>2</key>
6633 <dict>
6634 <key>name</key>
6635 <string>punctuation.accessor.optional.tsx</string>
6636 </dict>
6637 <key>3</key>
6638 <dict>
6639 <key>name</key>
6640 <string>support.function.event-handler.tsx</string>
6641 </dict>
6642 <key>4</key>
6643 <dict>
6644 <key>name</key>
6645 <string>support.function.tsx</string>
6646 </dict>
6647 <key>5</key>
6648 <dict>
6649 <key>name</key>
6650 <string>support.function.dom.tsx</string>
6651 </dict>
6652 <key>6</key>
6653 <dict>
6654 <key>name</key>
6655 <string>support.function.promise.tsx</string>
6656 </dict>
6657 </dict>
6658 </dict>
6659 </array>
6660 </dict>
6661 <key>identifiers</key>
6662 <dict>
6663 <key>patterns</key>
6664 <array>
6665 <dict>
6666 <key>include</key>
6667 <string>#object-identifiers</string>
6668 </dict>
6669 <dict>
6670 <key>match</key>
6671 <string>(?x)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\s*=\s*(
6672 ((async\s+)?(
6673 (function\s*[(&lt;*]) |
6674 (function\s+) |
6675 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
6676 )) |
6677 ((async\s*)?(
6678 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
6679 # sure shot arrow functions even if =&gt; is on new line
6680(
6681 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
6682 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
6683 (
6684 ([)]\s*:) | # ():
6685 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
6686 )
6687) |
6688(
6689 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
6690) |
6691# arrow function possible to detect only with =&gt; on same line
6692(
6693 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
6694 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
6695 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
6696 \s*=&gt; # arrow operator
6697)
6698 ))
6699))</string>
6700 <key>captures</key>
6701 <dict>
6702 <key>1</key>
6703 <dict>
6704 <key>name</key>
6705 <string>punctuation.accessor.tsx</string>
6706 </dict>
6707 <key>2</key>
6708 <dict>
6709 <key>name</key>
6710 <string>punctuation.accessor.optional.tsx</string>
6711 </dict>
6712 <key>3</key>
6713 <dict>
6714 <key>name</key>
6715 <string>entity.name.function.tsx</string>
6716 </dict>
6717 </dict>
6718 </dict>
6719 <dict>
6720 <key>match</key>
6721 <string>(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])</string>
6722 <key>captures</key>
6723 <dict>
6724 <key>1</key>
6725 <dict>
6726 <key>name</key>
6727 <string>punctuation.accessor.tsx</string>
6728 </dict>
6729 <key>2</key>
6730 <dict>
6731 <key>name</key>
6732 <string>punctuation.accessor.optional.tsx</string>
6733 </dict>
6734 <key>3</key>
6735 <dict>
6736 <key>name</key>
6737 <string>variable.other.constant.property.tsx</string>
6738 </dict>
6739 </dict>
6740 </dict>
6741 <dict>
6742 <key>match</key>
6743 <string>(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
6744 <key>captures</key>
6745 <dict>
6746 <key>1</key>
6747 <dict>
6748 <key>name</key>
6749 <string>punctuation.accessor.tsx</string>
6750 </dict>
6751 <key>2</key>
6752 <dict>
6753 <key>name</key>
6754 <string>punctuation.accessor.optional.tsx</string>
6755 </dict>
6756 <key>3</key>
6757 <dict>
6758 <key>name</key>
6759 <string>variable.other.property.tsx</string>
6760 </dict>
6761 </dict>
6762 </dict>
6763 <dict>
6764 <key>name</key>
6765 <string>variable.other.constant.tsx</string>
6766 <key>match</key>
6767 <string>([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])</string>
6768 </dict>
6769 <dict>
6770 <key>name</key>
6771 <string>variable.other.readwrite.tsx</string>
6772 <key>match</key>
6773 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
6774 </dict>
6775 </array>
6776 </dict>
6777 <key>object-identifiers</key>
6778 <dict>
6779 <key>patterns</key>
6780 <array>
6781 <dict>
6782 <key>name</key>
6783 <string>support.class.tsx</string>
6784 <key>match</key>
6785 <string>([_$[:alpha:]][_$[:alnum:]]*)(?=\s*\??\.\s*prototype\b(?!\$))</string>
6786 </dict>
6787 <dict>
6788 <key>match</key>
6789 <string>(?x)(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?:
6790 (\#?[[:upper:]][_$[:digit:][:upper:]]*) |
6791 (\#?[_$[:alpha:]][_$[:alnum:]]*)
6792)(?=\s*\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
6793 <key>captures</key>
6794 <dict>
6795 <key>1</key>
6796 <dict>
6797 <key>name</key>
6798 <string>punctuation.accessor.tsx</string>
6799 </dict>
6800 <key>2</key>
6801 <dict>
6802 <key>name</key>
6803 <string>punctuation.accessor.optional.tsx</string>
6804 </dict>
6805 <key>3</key>
6806 <dict>
6807 <key>name</key>
6808 <string>variable.other.constant.object.property.tsx</string>
6809 </dict>
6810 <key>4</key>
6811 <dict>
6812 <key>name</key>
6813 <string>variable.other.object.property.tsx</string>
6814 </dict>
6815 </dict>
6816 </dict>
6817 <dict>
6818 <key>match</key>
6819 <string>(?x)(?:
6820 ([[:upper:]][_$[:digit:][:upper:]]*) |
6821 ([_$[:alpha:]][_$[:alnum:]]*)
6822)(?=\s*\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
6823 <key>captures</key>
6824 <dict>
6825 <key>1</key>
6826 <dict>
6827 <key>name</key>
6828 <string>variable.other.constant.object.tsx</string>
6829 </dict>
6830 <key>2</key>
6831 <dict>
6832 <key>name</key>
6833 <string>variable.other.object.tsx</string>
6834 </dict>
6835 </dict>
6836 </dict>
6837 </array>
6838 </dict>
6839 <key>type-annotation</key>
6840 <dict>
6841 <key>patterns</key>
6842 <array>
6843 <dict>
6844 <key>name</key>
6845 <string>meta.type.annotation.tsx</string>
6846 <key>begin</key>
6847 <string>(:)(?=\s*\S)</string>
6848 <key>beginCaptures</key>
6849 <dict>
6850 <key>1</key>
6851 <dict>
6852 <key>name</key>
6853 <string>keyword.operator.type.annotation.tsx</string>
6854 </dict>
6855 </dict>
6856 <key>end</key>
6857 <string>(?&lt;![:|&amp;])(?!\s*[|&amp;]\s+)((?=^|[,);\}\]]|//)|(?==[^&gt;])|((?&lt;=[\}&gt;\]\)]|[_$[:alpha:]])\s*(?=\{)))</string>
6858 <key>patterns</key>
6859 <array>
6860 <dict>
6861 <key>include</key>
6862 <string>#type</string>
6863 </dict>
6864 </array>
6865 </dict>
6866 <dict>
6867 <key>name</key>
6868 <string>meta.type.annotation.tsx</string>
6869 <key>begin</key>
6870 <string>(:)</string>
6871 <key>beginCaptures</key>
6872 <dict>
6873 <key>1</key>
6874 <dict>
6875 <key>name</key>
6876 <string>keyword.operator.type.annotation.tsx</string>
6877 </dict>
6878 </dict>
6879 <key>end</key>
6880 <string>(?&lt;![:|&amp;])((?=[,);\}\]]|\/\/)|(?==[^&gt;])|(?=^\s*$)|((?&lt;=[\}&gt;\]\)]|[_$[:alpha:]])\s*(?=\{)))</string>
6881 <key>patterns</key>
6882 <array>
6883 <dict>
6884 <key>include</key>
6885 <string>#type</string>
6886 </dict>
6887 </array>
6888 </dict>
6889 </array>
6890 </dict>
6891 <key>parameter-type-annotation</key>
6892 <dict>
6893 <key>patterns</key>
6894 <array>
6895 <dict>
6896 <key>name</key>
6897 <string>meta.type.annotation.tsx</string>
6898 <key>begin</key>
6899 <string>(:)</string>
6900 <key>beginCaptures</key>
6901 <dict>
6902 <key>1</key>
6903 <dict>
6904 <key>name</key>
6905 <string>keyword.operator.type.annotation.tsx</string>
6906 </dict>
6907 </dict>
6908 <key>end</key>
6909 <string>(?=[,)])|(?==[^&gt;])</string>
6910 <key>patterns</key>
6911 <array>
6912 <dict>
6913 <key>include</key>
6914 <string>#type</string>
6915 </dict>
6916 </array>
6917 </dict>
6918 </array>
6919 </dict>
6920 <key>return-type</key>
6921 <dict>
6922 <key>patterns</key>
6923 <array>
6924 <dict>
6925 <key>name</key>
6926 <string>meta.return.type.tsx</string>
6927 <key>begin</key>
6928 <string>(?&lt;=\))\s*(:)(?=\s*\S)</string>
6929 <key>beginCaptures</key>
6930 <dict>
6931 <key>1</key>
6932 <dict>
6933 <key>name</key>
6934 <string>keyword.operator.type.annotation.tsx</string>
6935 </dict>
6936 </dict>
6937 <key>end</key>
6938 <string>(?&lt;![:|&amp;])(?=$|^|[{};,]|//)</string>
6939 <key>patterns</key>
6940 <array>
6941 <dict>
6942 <key>include</key>
6943 <string>#return-type-core</string>
6944 </dict>
6945 </array>
6946 </dict>
6947 <dict>
6948 <key>name</key>
6949 <string>meta.return.type.tsx</string>
6950 <key>begin</key>
6951 <string>(?&lt;=\))\s*(:)</string>
6952 <key>beginCaptures</key>
6953 <dict>
6954 <key>1</key>
6955 <dict>
6956 <key>name</key>
6957 <string>keyword.operator.type.annotation.tsx</string>
6958 </dict>
6959 </dict>
6960 <key>end</key>
6961 <string>(?&lt;![:|&amp;])((?=[{};,]|//|^\s*$)|((?&lt;=\S)(?=\s*$)))</string>
6962 <key>patterns</key>
6963 <array>
6964 <dict>
6965 <key>include</key>
6966 <string>#return-type-core</string>
6967 </dict>
6968 </array>
6969 </dict>
6970 </array>
6971 </dict>
6972 <key>return-type-core</key>
6973 <dict>
6974 <key>patterns</key>
6975 <array>
6976 <dict>
6977 <key>include</key>
6978 <string>#comment</string>
6979 </dict>
6980 <dict>
6981 <key>begin</key>
6982 <string>(?&lt;=[:|&amp;])(?=\s*\{)</string>
6983 <key>end</key>
6984 <string>(?&lt;=\})</string>
6985 <key>patterns</key>
6986 <array>
6987 <dict>
6988 <key>include</key>
6989 <string>#type-object</string>
6990 </dict>
6991 </array>
6992 </dict>
6993 <dict>
6994 <key>include</key>
6995 <string>#type-predicate-operator</string>
6996 </dict>
6997 <dict>
6998 <key>include</key>
6999 <string>#type</string>
7000 </dict>
7001 </array>
7002 </dict>
7003 <key>arrow-return-type</key>
7004 <dict>
7005 <key>name</key>
7006 <string>meta.return.type.arrow.tsx</string>
7007 <key>begin</key>
7008 <string>(?&lt;=\))\s*(:)</string>
7009 <key>beginCaptures</key>
7010 <dict>
7011 <key>1</key>
7012 <dict>
7013 <key>name</key>
7014 <string>keyword.operator.type.annotation.tsx</string>
7015 </dict>
7016 </dict>
7017 <key>end</key>
7018 <string>(?==&gt;|\{|(^\s*(export|function|class|interface|let|var|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|const|import|enum|namespace|module|type|abstract|declare)\s+))</string>
7019 <key>patterns</key>
7020 <array>
7021 <dict>
7022 <key>include</key>
7023 <string>#arrow-return-type-body</string>
7024 </dict>
7025 </array>
7026 </dict>
7027 <key>possibly-arrow-return-type</key>
7028 <dict>
7029 <key>begin</key>
7030 <string>(?&lt;=\)|^)\s*(:)(?=\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=&gt;)</string>
7031 <key>beginCaptures</key>
7032 <dict>
7033 <key>1</key>
7034 <dict>
7035 <key>name</key>
7036 <string>meta.arrow.tsx meta.return.type.arrow.tsx keyword.operator.type.annotation.tsx</string>
7037 </dict>
7038 </dict>
7039 <key>end</key>
7040 <string>(?==&gt;|\{|(^\s*(export|function|class|interface|let|var|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|const|import|enum|namespace|module|type|abstract|declare)\s+))</string>
7041 <key>contentName</key>
7042 <string>meta.arrow.tsx meta.return.type.arrow.tsx</string>
7043 <key>patterns</key>
7044 <array>
7045 <dict>
7046 <key>include</key>
7047 <string>#arrow-return-type-body</string>
7048 </dict>
7049 </array>
7050 </dict>
7051 <key>arrow-return-type-body</key>
7052 <dict>
7053 <key>patterns</key>
7054 <array>
7055 <dict>
7056 <key>begin</key>
7057 <string>(?&lt;=[:])(?=\s*\{)</string>
7058 <key>end</key>
7059 <string>(?&lt;=\})</string>
7060 <key>patterns</key>
7061 <array>
7062 <dict>
7063 <key>include</key>
7064 <string>#type-object</string>
7065 </dict>
7066 </array>
7067 </dict>
7068 <dict>
7069 <key>include</key>
7070 <string>#type-predicate-operator</string>
7071 </dict>
7072 <dict>
7073 <key>include</key>
7074 <string>#type</string>
7075 </dict>
7076 </array>
7077 </dict>
7078 <key>type-parameters</key>
7079 <dict>
7080 <key>name</key>
7081 <string>meta.type.parameters.tsx</string>
7082 <key>begin</key>
7083 <string>(&lt;)</string>
7084 <key>beginCaptures</key>
7085 <dict>
7086 <key>1</key>
7087 <dict>
7088 <key>name</key>
7089 <string>punctuation.definition.typeparameters.begin.tsx</string>
7090 </dict>
7091 </dict>
7092 <key>end</key>
7093 <string>(&gt;)</string>
7094 <key>endCaptures</key>
7095 <dict>
7096 <key>1</key>
7097 <dict>
7098 <key>name</key>
7099 <string>punctuation.definition.typeparameters.end.tsx</string>
7100 </dict>
7101 </dict>
7102 <key>patterns</key>
7103 <array>
7104 <dict>
7105 <key>include</key>
7106 <string>#comment</string>
7107 </dict>
7108 <dict>
7109 <key>name</key>
7110 <string>storage.modifier.tsx</string>
7111 <key>match</key>
7112 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(extends|in|out|const)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7113 </dict>
7114 <dict>
7115 <key>include</key>
7116 <string>#type</string>
7117 </dict>
7118 <dict>
7119 <key>include</key>
7120 <string>#punctuation-comma</string>
7121 </dict>
7122 <dict>
7123 <key>name</key>
7124 <string>keyword.operator.assignment.tsx</string>
7125 <key>match</key>
7126 <string>(=)(?!&gt;)</string>
7127 </dict>
7128 </array>
7129 </dict>
7130 <key>type-arguments</key>
7131 <dict>
7132 <key>name</key>
7133 <string>meta.type.parameters.tsx</string>
7134 <key>begin</key>
7135 <string>\&lt;</string>
7136 <key>beginCaptures</key>
7137 <dict>
7138 <key>0</key>
7139 <dict>
7140 <key>name</key>
7141 <string>punctuation.definition.typeparameters.begin.tsx</string>
7142 </dict>
7143 </dict>
7144 <key>end</key>
7145 <string>\&gt;</string>
7146 <key>endCaptures</key>
7147 <dict>
7148 <key>0</key>
7149 <dict>
7150 <key>name</key>
7151 <string>punctuation.definition.typeparameters.end.tsx</string>
7152 </dict>
7153 </dict>
7154 <key>patterns</key>
7155 <array>
7156 <dict>
7157 <key>include</key>
7158 <string>#type-arguments-body</string>
7159 </dict>
7160 </array>
7161 </dict>
7162 <key>type-arguments-body</key>
7163 <dict>
7164 <key>patterns</key>
7165 <array>
7166 <dict>
7167 <key>match</key>
7168 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(_)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7169 <key>captures</key>
7170 <dict>
7171 <key>0</key>
7172 <dict>
7173 <key>name</key>
7174 <string>keyword.operator.type.tsx</string>
7175 </dict>
7176 </dict>
7177 </dict>
7178 <dict>
7179 <key>include</key>
7180 <string>#type</string>
7181 </dict>
7182 <dict>
7183 <key>include</key>
7184 <string>#punctuation-comma</string>
7185 </dict>
7186 </array>
7187 </dict>
7188 <key>type</key>
7189 <dict>
7190 <key>patterns</key>
7191 <array>
7192 <dict>
7193 <key>include</key>
7194 <string>#comment</string>
7195 </dict>
7196 <dict>
7197 <key>include</key>
7198 <string>#type-string</string>
7199 </dict>
7200 <dict>
7201 <key>include</key>
7202 <string>#numeric-literal</string>
7203 </dict>
7204 <dict>
7205 <key>include</key>
7206 <string>#type-primitive</string>
7207 </dict>
7208 <dict>
7209 <key>include</key>
7210 <string>#type-builtin-literals</string>
7211 </dict>
7212 <dict>
7213 <key>include</key>
7214 <string>#type-parameters</string>
7215 </dict>
7216 <dict>
7217 <key>include</key>
7218 <string>#type-tuple</string>
7219 </dict>
7220 <dict>
7221 <key>include</key>
7222 <string>#type-object</string>
7223 </dict>
7224 <dict>
7225 <key>include</key>
7226 <string>#type-operators</string>
7227 </dict>
7228 <dict>
7229 <key>include</key>
7230 <string>#type-conditional</string>
7231 </dict>
7232 <dict>
7233 <key>include</key>
7234 <string>#type-fn-type-parameters</string>
7235 </dict>
7236 <dict>
7237 <key>include</key>
7238 <string>#type-paren-or-function-parameters</string>
7239 </dict>
7240 <dict>
7241 <key>include</key>
7242 <string>#type-function-return-type</string>
7243 </dict>
7244 <dict>
7245 <key>match</key>
7246 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
7247 <key>captures</key>
7248 <dict>
7249 <key>1</key>
7250 <dict>
7251 <key>name</key>
7252 <string>storage.modifier.tsx</string>
7253 </dict>
7254 </dict>
7255 </dict>
7256 <dict>
7257 <key>include</key>
7258 <string>#type-name</string>
7259 </dict>
7260 </array>
7261 </dict>
7262 <key>type-primitive</key>
7263 <dict>
7264 <key>name</key>
7265 <string>support.type.primitive.tsx</string>
7266 <key>match</key>
7267 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7268 </dict>
7269 <key>type-builtin-literals</key>
7270 <dict>
7271 <key>name</key>
7272 <string>support.type.builtin.tsx</string>
7273 <key>match</key>
7274 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7275 </dict>
7276 <key>type-tuple</key>
7277 <dict>
7278 <key>name</key>
7279 <string>meta.type.tuple.tsx</string>
7280 <key>begin</key>
7281 <string>\[</string>
7282 <key>beginCaptures</key>
7283 <dict>
7284 <key>0</key>
7285 <dict>
7286 <key>name</key>
7287 <string>meta.brace.square.tsx</string>
7288 </dict>
7289 </dict>
7290 <key>end</key>
7291 <string>\]</string>
7292 <key>endCaptures</key>
7293 <dict>
7294 <key>0</key>
7295 <dict>
7296 <key>name</key>
7297 <string>meta.brace.square.tsx</string>
7298 </dict>
7299 </dict>
7300 <key>patterns</key>
7301 <array>
7302 <dict>
7303 <key>name</key>
7304 <string>keyword.operator.rest.tsx</string>
7305 <key>match</key>
7306 <string>\.\.\.</string>
7307 </dict>
7308 <dict>
7309 <key>match</key>
7310 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))([_$[:alpha:]][_$[:alnum:]]*)\s*(\?)?\s*(:)</string>
7311 <key>captures</key>
7312 <dict>
7313 <key>1</key>
7314 <dict>
7315 <key>name</key>
7316 <string>entity.name.label.tsx</string>
7317 </dict>
7318 <key>2</key>
7319 <dict>
7320 <key>name</key>
7321 <string>keyword.operator.optional.tsx</string>
7322 </dict>
7323 <key>3</key>
7324 <dict>
7325 <key>name</key>
7326 <string>punctuation.separator.label.tsx</string>
7327 </dict>
7328 </dict>
7329 </dict>
7330 <dict>
7331 <key>include</key>
7332 <string>#type</string>
7333 </dict>
7334 <dict>
7335 <key>include</key>
7336 <string>#punctuation-comma</string>
7337 </dict>
7338 </array>
7339 </dict>
7340 <key>type-object</key>
7341 <dict>
7342 <key>name</key>
7343 <string>meta.object.type.tsx</string>
7344 <key>begin</key>
7345 <string>\{</string>
7346 <key>beginCaptures</key>
7347 <dict>
7348 <key>0</key>
7349 <dict>
7350 <key>name</key>
7351 <string>punctuation.definition.block.tsx</string>
7352 </dict>
7353 </dict>
7354 <key>end</key>
7355 <string>\}</string>
7356 <key>endCaptures</key>
7357 <dict>
7358 <key>0</key>
7359 <dict>
7360 <key>name</key>
7361 <string>punctuation.definition.block.tsx</string>
7362 </dict>
7363 </dict>
7364 <key>patterns</key>
7365 <array>
7366 <dict>
7367 <key>include</key>
7368 <string>#comment</string>
7369 </dict>
7370 <dict>
7371 <key>include</key>
7372 <string>#method-declaration</string>
7373 </dict>
7374 <dict>
7375 <key>include</key>
7376 <string>#indexer-declaration</string>
7377 </dict>
7378 <dict>
7379 <key>include</key>
7380 <string>#indexer-mapped-type-declaration</string>
7381 </dict>
7382 <dict>
7383 <key>include</key>
7384 <string>#field-declaration</string>
7385 </dict>
7386 <dict>
7387 <key>include</key>
7388 <string>#type-annotation</string>
7389 </dict>
7390 <dict>
7391 <key>begin</key>
7392 <string>\.\.\.</string>
7393 <key>beginCaptures</key>
7394 <dict>
7395 <key>0</key>
7396 <dict>
7397 <key>name</key>
7398 <string>keyword.operator.spread.tsx</string>
7399 </dict>
7400 </dict>
7401 <key>end</key>
7402 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
7403 <key>patterns</key>
7404 <array>
7405 <dict>
7406 <key>include</key>
7407 <string>#type</string>
7408 </dict>
7409 </array>
7410 </dict>
7411 <dict>
7412 <key>include</key>
7413 <string>#punctuation-comma</string>
7414 </dict>
7415 <dict>
7416 <key>include</key>
7417 <string>#punctuation-semicolon</string>
7418 </dict>
7419 <dict>
7420 <key>include</key>
7421 <string>#type</string>
7422 </dict>
7423 </array>
7424 </dict>
7425 <key>type-conditional</key>
7426 <dict>
7427 <key>patterns</key>
7428 <array>
7429 <dict>
7430 <key>begin</key>
7431 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(extends)\s+</string>
7432 <key>beginCaptures</key>
7433 <dict>
7434 <key>1</key>
7435 <dict>
7436 <key>name</key>
7437 <string>storage.modifier.tsx</string>
7438 </dict>
7439 </dict>
7440 <key>end</key>
7441 <string>(?&lt;=:)</string>
7442 <key>patterns</key>
7443 <array>
7444 <dict>
7445 <key>begin</key>
7446 <string>\?</string>
7447 <key>beginCaptures</key>
7448 <dict>
7449 <key>0</key>
7450 <dict>
7451 <key>name</key>
7452 <string>keyword.operator.ternary.tsx</string>
7453 </dict>
7454 </dict>
7455 <key>end</key>
7456 <string>:</string>
7457 <key>endCaptures</key>
7458 <dict>
7459 <key>0</key>
7460 <dict>
7461 <key>name</key>
7462 <string>keyword.operator.ternary.tsx</string>
7463 </dict>
7464 </dict>
7465 <key>patterns</key>
7466 <array>
7467 <dict>
7468 <key>include</key>
7469 <string>#type</string>
7470 </dict>
7471 </array>
7472 </dict>
7473 <dict>
7474 <key>include</key>
7475 <string>#type</string>
7476 </dict>
7477 </array>
7478 </dict>
7479 </array>
7480 </dict>
7481 <key>type-paren-or-function-parameters</key>
7482 <dict>
7483 <key>name</key>
7484 <string>meta.type.paren.cover.tsx</string>
7485 <key>begin</key>
7486 <string>\(</string>
7487 <key>beginCaptures</key>
7488 <dict>
7489 <key>0</key>
7490 <dict>
7491 <key>name</key>
7492 <string>meta.brace.round.tsx</string>
7493 </dict>
7494 </dict>
7495 <key>end</key>
7496 <string>\)</string>
7497 <key>endCaptures</key>
7498 <dict>
7499 <key>0</key>
7500 <dict>
7501 <key>name</key>
7502 <string>meta.brace.round.tsx</string>
7503 </dict>
7504 </dict>
7505 <key>patterns</key>
7506 <array>
7507 <dict>
7508 <key>match</key>
7509 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=\s*(:\s*(
7510 (&lt;) |
7511 ([(]\s*(
7512 ([)]) |
7513 (\.\.\.) |
7514 ([_$[:alnum:]]+\s*(
7515 ([:,?=])|
7516 ([)]\s*=&gt;)
7517 ))
7518 ))
7519)) |
7520(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
7521(:\s*((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))))</string>
7522 <key>captures</key>
7523 <dict>
7524 <key>1</key>
7525 <dict>
7526 <key>name</key>
7527 <string>storage.modifier.tsx</string>
7528 </dict>
7529 <key>2</key>
7530 <dict>
7531 <key>name</key>
7532 <string>keyword.operator.rest.tsx</string>
7533 </dict>
7534 <key>3</key>
7535 <dict>
7536 <key>name</key>
7537 <string>entity.name.function.tsx variable.language.this.tsx</string>
7538 </dict>
7539 <key>4</key>
7540 <dict>
7541 <key>name</key>
7542 <string>entity.name.function.tsx</string>
7543 </dict>
7544 <key>5</key>
7545 <dict>
7546 <key>name</key>
7547 <string>keyword.operator.optional.tsx</string>
7548 </dict>
7549 </dict>
7550 </dict>
7551 <dict>
7552 <key>match</key>
7553 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=:)</string>
7554 <key>captures</key>
7555 <dict>
7556 <key>1</key>
7557 <dict>
7558 <key>name</key>
7559 <string>storage.modifier.tsx</string>
7560 </dict>
7561 <key>2</key>
7562 <dict>
7563 <key>name</key>
7564 <string>keyword.operator.rest.tsx</string>
7565 </dict>
7566 <key>3</key>
7567 <dict>
7568 <key>name</key>
7569 <string>variable.parameter.tsx variable.language.this.tsx</string>
7570 </dict>
7571 <key>4</key>
7572 <dict>
7573 <key>name</key>
7574 <string>variable.parameter.tsx</string>
7575 </dict>
7576 <key>5</key>
7577 <dict>
7578 <key>name</key>
7579 <string>keyword.operator.optional.tsx</string>
7580 </dict>
7581 </dict>
7582 </dict>
7583 <dict>
7584 <key>include</key>
7585 <string>#type-annotation</string>
7586 </dict>
7587 <dict>
7588 <key>name</key>
7589 <string>punctuation.separator.parameter.tsx</string>
7590 <key>match</key>
7591 <string>,</string>
7592 </dict>
7593 <dict>
7594 <key>include</key>
7595 <string>#type</string>
7596 </dict>
7597 </array>
7598 </dict>
7599 <key>type-fn-type-parameters</key>
7600 <dict>
7601 <key>patterns</key>
7602 <array>
7603 <dict>
7604 <key>begin</key>
7605 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(new)\b(?=\s*\&lt;)</string>
7606 <key>beginCaptures</key>
7607 <dict>
7608 <key>1</key>
7609 <dict>
7610 <key>name</key>
7611 <string>meta.type.constructor.tsx storage.modifier.tsx</string>
7612 </dict>
7613 <key>2</key>
7614 <dict>
7615 <key>name</key>
7616 <string>meta.type.constructor.tsx keyword.control.new.tsx</string>
7617 </dict>
7618 </dict>
7619 <key>end</key>
7620 <string>(?&lt;=&gt;)</string>
7621 <key>patterns</key>
7622 <array>
7623 <dict>
7624 <key>include</key>
7625 <string>#comment</string>
7626 </dict>
7627 <dict>
7628 <key>include</key>
7629 <string>#type-parameters</string>
7630 </dict>
7631 </array>
7632 </dict>
7633 <dict>
7634 <key>name</key>
7635 <string>meta.type.constructor.tsx</string>
7636 <key>begin</key>
7637 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(new)\b\s*(?=\()</string>
7638 <key>beginCaptures</key>
7639 <dict>
7640 <key>1</key>
7641 <dict>
7642 <key>name</key>
7643 <string>storage.modifier.tsx</string>
7644 </dict>
7645 <key>2</key>
7646 <dict>
7647 <key>name</key>
7648 <string>keyword.control.new.tsx</string>
7649 </dict>
7650 </dict>
7651 <key>end</key>
7652 <string>(?&lt;=\))</string>
7653 <key>patterns</key>
7654 <array>
7655 <dict>
7656 <key>include</key>
7657 <string>#function-parameters</string>
7658 </dict>
7659 </array>
7660 </dict>
7661 <dict>
7662 <key>name</key>
7663 <string>meta.type.function.tsx</string>
7664 <key>begin</key>
7665 <string>(?x)(
7666 (?=
7667 [(]\s*(
7668 ([)]) |
7669 (\.\.\.) |
7670 ([_$[:alnum:]]+\s*(
7671 ([:,?=])|
7672 ([)]\s*=&gt;)
7673 ))
7674 )
7675 )
7676)</string>
7677 <key>end</key>
7678 <string>(?&lt;=\))</string>
7679 <key>patterns</key>
7680 <array>
7681 <dict>
7682 <key>include</key>
7683 <string>#function-parameters</string>
7684 </dict>
7685 </array>
7686 </dict>
7687 </array>
7688 </dict>
7689 <key>type-function-return-type</key>
7690 <dict>
7691 <key>patterns</key>
7692 <array>
7693 <dict>
7694 <key>name</key>
7695 <string>meta.type.function.return.tsx</string>
7696 <key>begin</key>
7697 <string>(=&gt;)(?=\s*\S)</string>
7698 <key>beginCaptures</key>
7699 <dict>
7700 <key>1</key>
7701 <dict>
7702 <key>name</key>
7703 <string>storage.type.function.arrow.tsx</string>
7704 </dict>
7705 </dict>
7706 <key>end</key>
7707 <string>(?&lt;!=&gt;)(?&lt;![|&amp;])(?=[,\]\)\{\}=;&gt;:\?]|//|$)</string>
7708 <key>patterns</key>
7709 <array>
7710 <dict>
7711 <key>include</key>
7712 <string>#type-function-return-type-core</string>
7713 </dict>
7714 </array>
7715 </dict>
7716 <dict>
7717 <key>name</key>
7718 <string>meta.type.function.return.tsx</string>
7719 <key>begin</key>
7720 <string>=&gt;</string>
7721 <key>beginCaptures</key>
7722 <dict>
7723 <key>0</key>
7724 <dict>
7725 <key>name</key>
7726 <string>storage.type.function.arrow.tsx</string>
7727 </dict>
7728 </dict>
7729 <key>end</key>
7730 <string>(?&lt;!=&gt;)(?&lt;![|&amp;])((?=[,\]\)\{\}=;:\?&gt;]|//|^\s*$)|((?&lt;=\S)(?=\s*$)))</string>
7731 <key>patterns</key>
7732 <array>
7733 <dict>
7734 <key>include</key>
7735 <string>#type-function-return-type-core</string>
7736 </dict>
7737 </array>
7738 </dict>
7739 </array>
7740 </dict>
7741 <key>type-function-return-type-core</key>
7742 <dict>
7743 <key>patterns</key>
7744 <array>
7745 <dict>
7746 <key>include</key>
7747 <string>#comment</string>
7748 </dict>
7749 <dict>
7750 <key>begin</key>
7751 <string>(?&lt;==&gt;)(?=\s*\{)</string>
7752 <key>end</key>
7753 <string>(?&lt;=\})</string>
7754 <key>patterns</key>
7755 <array>
7756 <dict>
7757 <key>include</key>
7758 <string>#type-object</string>
7759 </dict>
7760 </array>
7761 </dict>
7762 <dict>
7763 <key>include</key>
7764 <string>#type-predicate-operator</string>
7765 </dict>
7766 <dict>
7767 <key>include</key>
7768 <string>#type</string>
7769 </dict>
7770 </array>
7771 </dict>
7772 <key>type-operators</key>
7773 <dict>
7774 <key>patterns</key>
7775 <array>
7776 <dict>
7777 <key>include</key>
7778 <string>#typeof-operator</string>
7779 </dict>
7780 <dict>
7781 <key>include</key>
7782 <string>#type-infer</string>
7783 </dict>
7784 <dict>
7785 <key>begin</key>
7786 <string>([&amp;|])(?=\s*\{)</string>
7787 <key>beginCaptures</key>
7788 <dict>
7789 <key>0</key>
7790 <dict>
7791 <key>name</key>
7792 <string>keyword.operator.type.tsx</string>
7793 </dict>
7794 </dict>
7795 <key>end</key>
7796 <string>(?&lt;=\})</string>
7797 <key>patterns</key>
7798 <array>
7799 <dict>
7800 <key>include</key>
7801 <string>#type-object</string>
7802 </dict>
7803 </array>
7804 </dict>
7805 <dict>
7806 <key>begin</key>
7807 <string>[&amp;|]</string>
7808 <key>beginCaptures</key>
7809 <dict>
7810 <key>0</key>
7811 <dict>
7812 <key>name</key>
7813 <string>keyword.operator.type.tsx</string>
7814 </dict>
7815 </dict>
7816 <key>end</key>
7817 <string>(?=\S)</string>
7818 </dict>
7819 <dict>
7820 <key>name</key>
7821 <string>keyword.operator.expression.keyof.tsx</string>
7822 <key>match</key>
7823 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))keyof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7824 </dict>
7825 <dict>
7826 <key>name</key>
7827 <string>keyword.operator.ternary.tsx</string>
7828 <key>match</key>
7829 <string>(\?|\:)</string>
7830 </dict>
7831 <dict>
7832 <key>name</key>
7833 <string>keyword.operator.expression.import.tsx</string>
7834 <key>match</key>
7835 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))import(?=\s*\()</string>
7836 </dict>
7837 </array>
7838 </dict>
7839 <key>type-infer</key>
7840 <dict>
7841 <key>patterns</key>
7842 <array>
7843 <dict>
7844 <key>match</key>
7845 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(infer)\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?:\s+(extends)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))?</string>
7846 <key>name</key>
7847 <string>meta.type.infer.tsx</string>
7848 <key>captures</key>
7849 <dict>
7850 <key>1</key>
7851 <dict>
7852 <key>name</key>
7853 <string>keyword.operator.expression.infer.tsx</string>
7854 </dict>
7855 <key>2</key>
7856 <dict>
7857 <key>name</key>
7858 <string>entity.name.type.tsx</string>
7859 </dict>
7860 <key>3</key>
7861 <dict>
7862 <key>name</key>
7863 <string>keyword.operator.expression.extends.tsx</string>
7864 </dict>
7865 </dict>
7866 </dict>
7867 </array>
7868 </dict>
7869 <key>type-predicate-operator</key>
7870 <dict>
7871 <key>patterns</key>
7872 <array>
7873 <dict>
7874 <key>match</key>
7875 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(asserts)\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s(is)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7876 <key>captures</key>
7877 <dict>
7878 <key>1</key>
7879 <dict>
7880 <key>name</key>
7881 <string>keyword.operator.type.asserts.tsx</string>
7882 </dict>
7883 <key>2</key>
7884 <dict>
7885 <key>name</key>
7886 <string>variable.parameter.tsx variable.language.this.tsx</string>
7887 </dict>
7888 <key>3</key>
7889 <dict>
7890 <key>name</key>
7891 <string>variable.parameter.tsx</string>
7892 </dict>
7893 <key>4</key>
7894 <dict>
7895 <key>name</key>
7896 <string>keyword.operator.expression.is.tsx</string>
7897 </dict>
7898 </dict>
7899 </dict>
7900 <dict>
7901 <key>match</key>
7902 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(asserts)\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7903 <key>captures</key>
7904 <dict>
7905 <key>1</key>
7906 <dict>
7907 <key>name</key>
7908 <string>keyword.operator.type.asserts.tsx</string>
7909 </dict>
7910 <key>2</key>
7911 <dict>
7912 <key>name</key>
7913 <string>variable.parameter.tsx variable.language.this.tsx</string>
7914 </dict>
7915 <key>3</key>
7916 <dict>
7917 <key>name</key>
7918 <string>variable.parameter.tsx</string>
7919 </dict>
7920 </dict>
7921 </dict>
7922 <dict>
7923 <key>name</key>
7924 <string>keyword.operator.type.asserts.tsx</string>
7925 <key>match</key>
7926 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))asserts(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7927 </dict>
7928 <dict>
7929 <key>name</key>
7930 <string>keyword.operator.expression.is.tsx</string>
7931 <key>match</key>
7932 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))is(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7933 </dict>
7934 </array>
7935 </dict>
7936 <key>type-name</key>
7937 <dict>
7938 <key>patterns</key>
7939 <array>
7940 <dict>
7941 <key>begin</key>
7942 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(&lt;)</string>
7943 <key>captures</key>
7944 <dict>
7945 <key>1</key>
7946 <dict>
7947 <key>name</key>
7948 <string>entity.name.type.module.tsx</string>
7949 </dict>
7950 <key>2</key>
7951 <dict>
7952 <key>name</key>
7953 <string>punctuation.accessor.tsx</string>
7954 </dict>
7955 <key>3</key>
7956 <dict>
7957 <key>name</key>
7958 <string>punctuation.accessor.optional.tsx</string>
7959 </dict>
7960 <key>4</key>
7961 <dict>
7962 <key>name</key>
7963 <string>meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx</string>
7964 </dict>
7965 </dict>
7966 <key>end</key>
7967 <string>(&gt;)</string>
7968 <key>endCaptures</key>
7969 <dict>
7970 <key>1</key>
7971 <dict>
7972 <key>name</key>
7973 <string>meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx</string>
7974 </dict>
7975 </dict>
7976 <key>contentName</key>
7977 <string>meta.type.parameters.tsx</string>
7978 <key>patterns</key>
7979 <array>
7980 <dict>
7981 <key>include</key>
7982 <string>#type-arguments-body</string>
7983 </dict>
7984 </array>
7985 </dict>
7986 <dict>
7987 <key>begin</key>
7988 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;)</string>
7989 <key>beginCaptures</key>
7990 <dict>
7991 <key>1</key>
7992 <dict>
7993 <key>name</key>
7994 <string>entity.name.type.tsx</string>
7995 </dict>
7996 <key>2</key>
7997 <dict>
7998 <key>name</key>
7999 <string>meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx</string>
8000 </dict>
8001 </dict>
8002 <key>end</key>
8003 <string>(&gt;)</string>
8004 <key>endCaptures</key>
8005 <dict>
8006 <key>1</key>
8007 <dict>
8008 <key>name</key>
8009 <string>meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx</string>
8010 </dict>
8011 </dict>
8012 <key>contentName</key>
8013 <string>meta.type.parameters.tsx</string>
8014 <key>patterns</key>
8015 <array>
8016 <dict>
8017 <key>include</key>
8018 <string>#type-arguments-body</string>
8019 </dict>
8020 </array>
8021 </dict>
8022 <dict>
8023 <key>match</key>
8024 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))</string>
8025 <key>captures</key>
8026 <dict>
8027 <key>1</key>
8028 <dict>
8029 <key>name</key>
8030 <string>entity.name.type.module.tsx</string>
8031 </dict>
8032 <key>2</key>
8033 <dict>
8034 <key>name</key>
8035 <string>punctuation.accessor.tsx</string>
8036 </dict>
8037 <key>3</key>
8038 <dict>
8039 <key>name</key>
8040 <string>punctuation.accessor.optional.tsx</string>
8041 </dict>
8042 </dict>
8043 </dict>
8044 <dict>
8045 <key>name</key>
8046 <string>entity.name.type.tsx</string>
8047 <key>match</key>
8048 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
8049 </dict>
8050 </array>
8051 </dict>
8052 <key>punctuation-comma</key>
8053 <dict>
8054 <key>name</key>
8055 <string>punctuation.separator.comma.tsx</string>
8056 <key>match</key>
8057 <string>,</string>
8058 </dict>
8059 <key>punctuation-semicolon</key>
8060 <dict>
8061 <key>name</key>
8062 <string>punctuation.terminator.statement.tsx</string>
8063 <key>match</key>
8064 <string>;</string>
8065 </dict>
8066 <key>punctuation-accessor</key>
8067 <dict>
8068 <key>match</key>
8069 <string>(?:(\.)|(\?\.(?!\s*[[:digit:]])))</string>
8070 <key>captures</key>
8071 <dict>
8072 <key>1</key>
8073 <dict>
8074 <key>name</key>
8075 <string>punctuation.accessor.tsx</string>
8076 </dict>
8077 <key>2</key>
8078 <dict>
8079 <key>name</key>
8080 <string>punctuation.accessor.optional.tsx</string>
8081 </dict>
8082 </dict>
8083 </dict>
8084 <key>string</key>
8085 <dict>
8086 <key>patterns</key>
8087 <array>
8088 <dict>
8089 <key>include</key>
8090 <string>#qstring-single</string>
8091 </dict>
8092 <dict>
8093 <key>include</key>
8094 <string>#qstring-double</string>
8095 </dict>
8096 <dict>
8097 <key>include</key>
8098 <string>#template</string>
8099 </dict>
8100 </array>
8101 </dict>
8102 <key>qstring-double</key>
8103 <dict>
8104 <key>name</key>
8105 <string>string.quoted.double.tsx</string>
8106 <key>begin</key>
8107 <string>"</string>
8108 <key>beginCaptures</key>
8109 <dict>
8110 <key>0</key>
8111 <dict>
8112 <key>name</key>
8113 <string>punctuation.definition.string.begin.tsx</string>
8114 </dict>
8115 </dict>
8116 <key>end</key>
8117 <string>(")|((?:[^\\\n])$)</string>
8118 <key>endCaptures</key>
8119 <dict>
8120 <key>1</key>
8121 <dict>
8122 <key>name</key>
8123 <string>punctuation.definition.string.end.tsx</string>
8124 </dict>
8125 <key>2</key>
8126 <dict>
8127 <key>name</key>
8128 <string>invalid.illegal.newline.tsx</string>
8129 </dict>
8130 </dict>
8131 <key>patterns</key>
8132 <array>
8133 <dict>
8134 <key>include</key>
8135 <string>#string-character-escape</string>
8136 </dict>
8137 </array>
8138 </dict>
8139 <key>qstring-single</key>
8140 <dict>
8141 <key>name</key>
8142 <string>string.quoted.single.tsx</string>
8143 <key>begin</key>
8144 <string>'</string>
8145 <key>beginCaptures</key>
8146 <dict>
8147 <key>0</key>
8148 <dict>
8149 <key>name</key>
8150 <string>punctuation.definition.string.begin.tsx</string>
8151 </dict>
8152 </dict>
8153 <key>end</key>
8154 <string>(\')|((?:[^\\\n])$)</string>
8155 <key>endCaptures</key>
8156 <dict>
8157 <key>1</key>
8158 <dict>
8159 <key>name</key>
8160 <string>punctuation.definition.string.end.tsx</string>
8161 </dict>
8162 <key>2</key>
8163 <dict>
8164 <key>name</key>
8165 <string>invalid.illegal.newline.tsx</string>
8166 </dict>
8167 </dict>
8168 <key>patterns</key>
8169 <array>
8170 <dict>
8171 <key>include</key>
8172 <string>#string-character-escape</string>
8173 </dict>
8174 </array>
8175 </dict>
8176 <key>string-character-escape</key>
8177 <dict>
8178 <key>name</key>
8179 <string>constant.character.escape.tsx</string>
8180 <key>match</key>
8181 <string>\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\{[0-9A-Fa-f]+\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)</string>
8182 </dict>
8183 <key>template</key>
8184 <dict>
8185 <key>patterns</key>
8186 <array>
8187 <dict>
8188 <key>include</key>
8189 <string>#template-call</string>
8190 </dict>
8191 <dict>
8192 <key>contentName</key>
8193 <string>string.template.tsx</string>
8194 <key>begin</key>
8195 <string>([_$[:alpha:]][_$[:alnum:]]*)?(`)</string>
8196 <key>beginCaptures</key>
8197 <dict>
8198 <key>1</key>
8199 <dict>
8200 <key>name</key>
8201 <string>entity.name.function.tagged-template.tsx</string>
8202 </dict>
8203 <key>2</key>
8204 <dict>
8205 <key>name</key>
8206 <string>string.template.tsx punctuation.definition.string.template.begin.tsx</string>
8207 </dict>
8208 </dict>
8209 <key>end</key>
8210 <string>`</string>
8211 <key>endCaptures</key>
8212 <dict>
8213 <key>0</key>
8214 <dict>
8215 <key>name</key>
8216 <string>string.template.tsx punctuation.definition.string.template.end.tsx</string>
8217 </dict>
8218 </dict>
8219 <key>patterns</key>
8220 <array>
8221 <dict>
8222 <key>include</key>
8223 <string>#template-substitution-element</string>
8224 </dict>
8225 <dict>
8226 <key>include</key>
8227 <string>#string-character-escape</string>
8228 </dict>
8229 </array>
8230 </dict>
8231 </array>
8232 </dict>
8233 <key>template-call</key>
8234 <dict>
8235 <key>patterns</key>
8236 <array>
8237 <dict>
8238 <key>begin</key>
8239 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?`)</string>
8240 <key>end</key>
8241 <string>(?=`)</string>
8242 <key>patterns</key>
8243 <array>
8244 <dict>
8245 <key>begin</key>
8246 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))</string>
8247 <key>end</key>
8248 <string>(?=(&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?`)</string>
8249 <key>patterns</key>
8250 <array>
8251 <dict>
8252 <key>include</key>
8253 <string>#support-function-call-identifiers</string>
8254 </dict>
8255 <dict>
8256 <key>name</key>
8257 <string>entity.name.function.tagged-template.tsx</string>
8258 <key>match</key>
8259 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
8260 </dict>
8261 </array>
8262 </dict>
8263 <dict>
8264 <key>include</key>
8265 <string>#type-arguments</string>
8266 </dict>
8267 </array>
8268 </dict>
8269 <dict>
8270 <key>begin</key>
8271 <string>([_$[:alpha:]][_$[:alnum:]]*)?\s*(?=(&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)`)</string>
8272 <key>beginCaptures</key>
8273 <dict>
8274 <key>1</key>
8275 <dict>
8276 <key>name</key>
8277 <string>entity.name.function.tagged-template.tsx</string>
8278 </dict>
8279 </dict>
8280 <key>end</key>
8281 <string>(?=`)</string>
8282 <key>patterns</key>
8283 <array>
8284 <dict>
8285 <key>include</key>
8286 <string>#type-arguments</string>
8287 </dict>
8288 </array>
8289 </dict>
8290 </array>
8291 </dict>
8292 <key>template-substitution-element</key>
8293 <dict>
8294 <key>name</key>
8295 <string>meta.template.expression.tsx</string>
8296 <key>begin</key>
8297 <string>\$\{</string>
8298 <key>beginCaptures</key>
8299 <dict>
8300 <key>0</key>
8301 <dict>
8302 <key>name</key>
8303 <string>punctuation.definition.template-expression.begin.tsx</string>
8304 </dict>
8305 </dict>
8306 <key>end</key>
8307 <string>\}</string>
8308 <key>endCaptures</key>
8309 <dict>
8310 <key>0</key>
8311 <dict>
8312 <key>name</key>
8313 <string>punctuation.definition.template-expression.end.tsx</string>
8314 </dict>
8315 </dict>
8316 <key>patterns</key>
8317 <array>
8318 <dict>
8319 <key>include</key>
8320 <string>#expression</string>
8321 </dict>
8322 </array>
8323 <key>contentName</key>
8324 <string>meta.embedded.line.tsx</string>
8325 </dict>
8326 <key>type-string</key>
8327 <dict>
8328 <key>patterns</key>
8329 <array>
8330 <dict>
8331 <key>include</key>
8332 <string>#qstring-single</string>
8333 </dict>
8334 <dict>
8335 <key>include</key>
8336 <string>#qstring-double</string>
8337 </dict>
8338 <dict>
8339 <key>include</key>
8340 <string>#template-type</string>
8341 </dict>
8342 </array>
8343 </dict>
8344 <key>template-type</key>
8345 <dict>
8346 <key>patterns</key>
8347 <array>
8348 <dict>
8349 <key>include</key>
8350 <string>#template-call</string>
8351 </dict>
8352 <dict>
8353 <key>contentName</key>
8354 <string>string.template.tsx</string>
8355 <key>begin</key>
8356 <string>([_$[:alpha:]][_$[:alnum:]]*)?(`)</string>
8357 <key>beginCaptures</key>
8358 <dict>
8359 <key>1</key>
8360 <dict>
8361 <key>name</key>
8362 <string>entity.name.function.tagged-template.tsx</string>
8363 </dict>
8364 <key>2</key>
8365 <dict>
8366 <key>name</key>
8367 <string>string.template.tsx punctuation.definition.string.template.begin.tsx</string>
8368 </dict>
8369 </dict>
8370 <key>end</key>
8371 <string>`</string>
8372 <key>endCaptures</key>
8373 <dict>
8374 <key>0</key>
8375 <dict>
8376 <key>name</key>
8377 <string>string.template.tsx punctuation.definition.string.template.end.tsx</string>
8378 </dict>
8379 </dict>
8380 <key>patterns</key>
8381 <array>
8382 <dict>
8383 <key>include</key>
8384 <string>#template-type-substitution-element</string>
8385 </dict>
8386 <dict>
8387 <key>include</key>
8388 <string>#string-character-escape</string>
8389 </dict>
8390 </array>
8391 </dict>
8392 </array>
8393 </dict>
8394 <key>template-type-substitution-element</key>
8395 <dict>
8396 <key>name</key>
8397 <string>meta.template.expression.tsx</string>
8398 <key>begin</key>
8399 <string>\$\{</string>
8400 <key>beginCaptures</key>
8401 <dict>
8402 <key>0</key>
8403 <dict>
8404 <key>name</key>
8405 <string>punctuation.definition.template-expression.begin.tsx</string>
8406 </dict>
8407 </dict>
8408 <key>end</key>
8409 <string>\}</string>
8410 <key>endCaptures</key>
8411 <dict>
8412 <key>0</key>
8413 <dict>
8414 <key>name</key>
8415 <string>punctuation.definition.template-expression.end.tsx</string>
8416 </dict>
8417 </dict>
8418 <key>patterns</key>
8419 <array>
8420 <dict>
8421 <key>include</key>
8422 <string>#type</string>
8423 </dict>
8424 </array>
8425 <key>contentName</key>
8426 <string>meta.embedded.line.tsx</string>
8427 </dict>
8428 <key>regex</key>
8429 <dict>
8430 <key>patterns</key>
8431 <array>
8432 <dict>
8433 <key>name</key>
8434 <string>string.regexp.tsx</string>
8435 <key>begin</key>
8436 <string>(?&lt;!\+\+|--|})(?&lt;=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
8437 <key>beginCaptures</key>
8438 <dict>
8439 <key>1</key>
8440 <dict>
8441 <key>name</key>
8442 <string>punctuation.definition.string.begin.tsx</string>
8443 </dict>
8444 </dict>
8445 <key>end</key>
8446 <string>(/)([dgimsuvy]*)</string>
8447 <key>endCaptures</key>
8448 <dict>
8449 <key>1</key>
8450 <dict>
8451 <key>name</key>
8452 <string>punctuation.definition.string.end.tsx</string>
8453 </dict>
8454 <key>2</key>
8455 <dict>
8456 <key>name</key>
8457 <string>keyword.other.tsx</string>
8458 </dict>
8459 </dict>
8460 <key>patterns</key>
8461 <array>
8462 <dict>
8463 <key>include</key>
8464 <string>#regexp</string>
8465 </dict>
8466 </array>
8467 </dict>
8468 <dict>
8469 <key>name</key>
8470 <string>string.regexp.tsx</string>
8471 <key>begin</key>
8472 <string>((?&lt;![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?&lt;=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
8473 <key>beginCaptures</key>
8474 <dict>
8475 <key>0</key>
8476 <dict>
8477 <key>name</key>
8478 <string>punctuation.definition.string.begin.tsx</string>
8479 </dict>
8480 </dict>
8481 <key>end</key>
8482 <string>(/)([dgimsuvy]*)</string>
8483 <key>endCaptures</key>
8484 <dict>
8485 <key>1</key>
8486 <dict>
8487 <key>name</key>
8488 <string>punctuation.definition.string.end.tsx</string>
8489 </dict>
8490 <key>2</key>
8491 <dict>
8492 <key>name</key>
8493 <string>keyword.other.tsx</string>
8494 </dict>
8495 </dict>
8496 <key>patterns</key>
8497 <array>
8498 <dict>
8499 <key>include</key>
8500 <string>#regexp</string>
8501 </dict>
8502 </array>
8503 </dict>
8504 </array>
8505 </dict>
8506 <key>regexp</key>
8507 <dict>
8508 <key>patterns</key>
8509 <array>
8510 <dict>
8511 <key>name</key>
8512 <string>keyword.control.anchor.regexp</string>
8513 <key>match</key>
8514 <string>\\[bB]|\^|\$</string>
8515 </dict>
8516 <dict>
8517 <key>match</key>
8518 <string>\\[1-9]\d*|\\k&lt;([a-zA-Z_$][\w$]*)&gt;</string>
8519 <key>captures</key>
8520 <dict>
8521 <key>0</key>
8522 <dict>
8523 <key>name</key>
8524 <string>keyword.other.back-reference.regexp</string>
8525 </dict>
8526 <key>1</key>
8527 <dict>
8528 <key>name</key>
8529 <string>variable.other.regexp</string>
8530 </dict>
8531 </dict>
8532 </dict>
8533 <dict>
8534 <key>name</key>
8535 <string>keyword.operator.quantifier.regexp</string>
8536 <key>match</key>
8537 <string>[?+*]|\{(\d+,\d+|\d+,|,\d+|\d+)\}\??</string>
8538 </dict>
8539 <dict>
8540 <key>name</key>
8541 <string>keyword.operator.or.regexp</string>
8542 <key>match</key>
8543 <string>\|</string>
8544 </dict>
8545 <dict>
8546 <key>name</key>
8547 <string>meta.group.assertion.regexp</string>
8548 <key>begin</key>
8549 <string>(\()((\?=)|(\?!)|(\?&lt;=)|(\?&lt;!))</string>
8550 <key>beginCaptures</key>
8551 <dict>
8552 <key>1</key>
8553 <dict>
8554 <key>name</key>
8555 <string>punctuation.definition.group.regexp</string>
8556 </dict>
8557 <key>2</key>
8558 <dict>
8559 <key>name</key>
8560 <string>punctuation.definition.group.assertion.regexp</string>
8561 </dict>
8562 <key>3</key>
8563 <dict>
8564 <key>name</key>
8565 <string>meta.assertion.look-ahead.regexp</string>
8566 </dict>
8567 <key>4</key>
8568 <dict>
8569 <key>name</key>
8570 <string>meta.assertion.negative-look-ahead.regexp</string>
8571 </dict>
8572 <key>5</key>
8573 <dict>
8574 <key>name</key>
8575 <string>meta.assertion.look-behind.regexp</string>
8576 </dict>
8577 <key>6</key>
8578 <dict>
8579 <key>name</key>
8580 <string>meta.assertion.negative-look-behind.regexp</string>
8581 </dict>
8582 </dict>
8583 <key>end</key>
8584 <string>(\))</string>
8585 <key>endCaptures</key>
8586 <dict>
8587 <key>1</key>
8588 <dict>
8589 <key>name</key>
8590 <string>punctuation.definition.group.regexp</string>
8591 </dict>
8592 </dict>
8593 <key>patterns</key>
8594 <array>
8595 <dict>
8596 <key>include</key>
8597 <string>#regexp</string>
8598 </dict>
8599 </array>
8600 </dict>
8601 <dict>
8602 <key>name</key>
8603 <string>meta.group.regexp</string>
8604 <key>begin</key>
8605 <string>\((?:(\?:)|(?:\?&lt;([a-zA-Z_$][\w$]*)&gt;))?</string>
8606 <key>beginCaptures</key>
8607 <dict>
8608 <key>0</key>
8609 <dict>
8610 <key>name</key>
8611 <string>punctuation.definition.group.regexp</string>
8612 </dict>
8613 <key>1</key>
8614 <dict>
8615 <key>name</key>
8616 <string>punctuation.definition.group.no-capture.regexp</string>
8617 </dict>
8618 <key>2</key>
8619 <dict>
8620 <key>name</key>
8621 <string>variable.other.regexp</string>
8622 </dict>
8623 </dict>
8624 <key>end</key>
8625 <string>\)</string>
8626 <key>endCaptures</key>
8627 <dict>
8628 <key>0</key>
8629 <dict>
8630 <key>name</key>
8631 <string>punctuation.definition.group.regexp</string>
8632 </dict>
8633 </dict>
8634 <key>patterns</key>
8635 <array>
8636 <dict>
8637 <key>include</key>
8638 <string>#regexp</string>
8639 </dict>
8640 </array>
8641 </dict>
8642 <dict>
8643 <key>name</key>
8644 <string>constant.other.character-class.set.regexp</string>
8645 <key>begin</key>
8646 <string>(\[)(\^)?</string>
8647 <key>beginCaptures</key>
8648 <dict>
8649 <key>1</key>
8650 <dict>
8651 <key>name</key>
8652 <string>punctuation.definition.character-class.regexp</string>
8653 </dict>
8654 <key>2</key>
8655 <dict>
8656 <key>name</key>
8657 <string>keyword.operator.negation.regexp</string>
8658 </dict>
8659 </dict>
8660 <key>end</key>
8661 <string>(\])</string>
8662 <key>endCaptures</key>
8663 <dict>
8664 <key>1</key>
8665 <dict>
8666 <key>name</key>
8667 <string>punctuation.definition.character-class.regexp</string>
8668 </dict>
8669 </dict>
8670 <key>patterns</key>
8671 <array>
8672 <dict>
8673 <key>name</key>
8674 <string>constant.other.character-class.range.regexp</string>
8675 <key>match</key>
8676 <string>(?:.|(\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\c[A-Z])|(\\.))\-(?:[^\]\\]|(\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\c[A-Z])|(\\.))</string>
8677 <key>captures</key>
8678 <dict>
8679 <key>1</key>
8680 <dict>
8681 <key>name</key>
8682 <string>constant.character.numeric.regexp</string>
8683 </dict>
8684 <key>2</key>
8685 <dict>
8686 <key>name</key>
8687 <string>constant.character.control.regexp</string>
8688 </dict>
8689 <key>3</key>
8690 <dict>
8691 <key>name</key>
8692 <string>constant.character.escape.backslash.regexp</string>
8693 </dict>
8694 <key>4</key>
8695 <dict>
8696 <key>name</key>
8697 <string>constant.character.numeric.regexp</string>
8698 </dict>
8699 <key>5</key>
8700 <dict>
8701 <key>name</key>
8702 <string>constant.character.control.regexp</string>
8703 </dict>
8704 <key>6</key>
8705 <dict>
8706 <key>name</key>
8707 <string>constant.character.escape.backslash.regexp</string>
8708 </dict>
8709 </dict>
8710 </dict>
8711 <dict>
8712 <key>include</key>
8713 <string>#regex-character-class</string>
8714 </dict>
8715 </array>
8716 </dict>
8717 <dict>
8718 <key>include</key>
8719 <string>#regex-character-class</string>
8720 </dict>
8721 </array>
8722 </dict>
8723 <key>regex-character-class</key>
8724 <dict>
8725 <key>patterns</key>
8726 <array>
8727 <dict>
8728 <key>name</key>
8729 <string>constant.other.character-class.regexp</string>
8730 <key>match</key>
8731 <string>\\[wWsSdDtrnvf]|\.</string>
8732 </dict>
8733 <dict>
8734 <key>name</key>
8735 <string>constant.character.numeric.regexp</string>
8736 <key>match</key>
8737 <string>\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})</string>
8738 </dict>
8739 <dict>
8740 <key>name</key>
8741 <string>constant.character.control.regexp</string>
8742 <key>match</key>
8743 <string>\\c[A-Z]</string>
8744 </dict>
8745 <dict>
8746 <key>name</key>
8747 <string>constant.character.escape.backslash.regexp</string>
8748 <key>match</key>
8749 <string>\\.</string>
8750 </dict>
8751 </array>
8752 </dict>
8753 <key>comment</key>
8754 <dict>
8755 <key>patterns</key>
8756 <array>
8757 <dict>
8758 <key>name</key>
8759 <string>comment.block.documentation.tsx</string>
8760 <key>begin</key>
8761 <string>/\*\*(?!/)</string>
8762 <key>beginCaptures</key>
8763 <dict>
8764 <key>0</key>
8765 <dict>
8766 <key>name</key>
8767 <string>punctuation.definition.comment.tsx</string>
8768 </dict>
8769 </dict>
8770 <key>end</key>
8771 <string>\*/</string>
8772 <key>endCaptures</key>
8773 <dict>
8774 <key>0</key>
8775 <dict>
8776 <key>name</key>
8777 <string>punctuation.definition.comment.tsx</string>
8778 </dict>
8779 </dict>
8780 <key>patterns</key>
8781 <array>
8782 <dict>
8783 <key>include</key>
8784 <string>#docblock</string>
8785 </dict>
8786 </array>
8787 </dict>
8788 <dict>
8789 <key>name</key>
8790 <string>comment.block.tsx</string>
8791 <key>begin</key>
8792 <string>(/\*)(?:\s*((@)internal)(?=\s|(\*/)))?</string>
8793 <key>beginCaptures</key>
8794 <dict>
8795 <key>1</key>
8796 <dict>
8797 <key>name</key>
8798 <string>punctuation.definition.comment.tsx</string>
8799 </dict>
8800 <key>2</key>
8801 <dict>
8802 <key>name</key>
8803 <string>storage.type.internaldeclaration.tsx</string>
8804 </dict>
8805 <key>3</key>
8806 <dict>
8807 <key>name</key>
8808 <string>punctuation.decorator.internaldeclaration.tsx</string>
8809 </dict>
8810 </dict>
8811 <key>end</key>
8812 <string>\*/</string>
8813 <key>endCaptures</key>
8814 <dict>
8815 <key>0</key>
8816 <dict>
8817 <key>name</key>
8818 <string>punctuation.definition.comment.tsx</string>
8819 </dict>
8820 </dict>
8821 </dict>
8822 <dict>
8823 <key>begin</key>
8824 <string>(^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?)</string>
8825 <key>beginCaptures</key>
8826 <dict>
8827 <key>1</key>
8828 <dict>
8829 <key>name</key>
8830 <string>punctuation.whitespace.comment.leading.tsx</string>
8831 </dict>
8832 <key>2</key>
8833 <dict>
8834 <key>name</key>
8835 <string>comment.line.double-slash.tsx</string>
8836 </dict>
8837 <key>3</key>
8838 <dict>
8839 <key>name</key>
8840 <string>punctuation.definition.comment.tsx</string>
8841 </dict>
8842 <key>4</key>
8843 <dict>
8844 <key>name</key>
8845 <string>storage.type.internaldeclaration.tsx</string>
8846 </dict>
8847 <key>5</key>
8848 <dict>
8849 <key>name</key>
8850 <string>punctuation.decorator.internaldeclaration.tsx</string>
8851 </dict>
8852 </dict>
8853 <key>end</key>
8854 <string>(?=$)</string>
8855 <key>contentName</key>
8856 <string>comment.line.double-slash.tsx</string>
8857 </dict>
8858 </array>
8859 </dict>
8860 <key>single-line-comment-consuming-line-ending</key>
8861 <dict>
8862 <key>begin</key>
8863 <string>(^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?)</string>
8864 <key>beginCaptures</key>
8865 <dict>
8866 <key>1</key>
8867 <dict>
8868 <key>name</key>
8869 <string>punctuation.whitespace.comment.leading.tsx</string>
8870 </dict>
8871 <key>2</key>
8872 <dict>
8873 <key>name</key>
8874 <string>comment.line.double-slash.tsx</string>
8875 </dict>
8876 <key>3</key>
8877 <dict>
8878 <key>name</key>
8879 <string>punctuation.definition.comment.tsx</string>
8880 </dict>
8881 <key>4</key>
8882 <dict>
8883 <key>name</key>
8884 <string>storage.type.internaldeclaration.tsx</string>
8885 </dict>
8886 <key>5</key>
8887 <dict>
8888 <key>name</key>
8889 <string>punctuation.decorator.internaldeclaration.tsx</string>
8890 </dict>
8891 </dict>
8892 <key>end</key>
8893 <string>(?=^)</string>
8894 <key>contentName</key>
8895 <string>comment.line.double-slash.tsx</string>
8896 </dict>
8897 <key>directives</key>
8898 <dict>
8899 <key>name</key>
8900 <string>comment.line.triple-slash.directive.tsx</string>
8901 <key>begin</key>
8902 <string>^(///)\s*(?=&lt;(reference|amd-dependency|amd-module)(\s+(path|types|no-default-lib|lib|name|resolution-mode)\s*=\s*((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))+\s*/&gt;\s*$)</string>
8903 <key>beginCaptures</key>
8904 <dict>
8905 <key>1</key>
8906 <dict>
8907 <key>name</key>
8908 <string>punctuation.definition.comment.tsx</string>
8909 </dict>
8910 </dict>
8911 <key>end</key>
8912 <string>(?=$)</string>
8913 <key>patterns</key>
8914 <array>
8915 <dict>
8916 <key>name</key>
8917 <string>meta.tag.tsx</string>
8918 <key>begin</key>
8919 <string>(&lt;)(reference|amd-dependency|amd-module)</string>
8920 <key>beginCaptures</key>
8921 <dict>
8922 <key>1</key>
8923 <dict>
8924 <key>name</key>
8925 <string>punctuation.definition.tag.directive.tsx</string>
8926 </dict>
8927 <key>2</key>
8928 <dict>
8929 <key>name</key>
8930 <string>entity.name.tag.directive.tsx</string>
8931 </dict>
8932 </dict>
8933 <key>end</key>
8934 <string>/&gt;</string>
8935 <key>endCaptures</key>
8936 <dict>
8937 <key>0</key>
8938 <dict>
8939 <key>name</key>
8940 <string>punctuation.definition.tag.directive.tsx</string>
8941 </dict>
8942 </dict>
8943 <key>patterns</key>
8944 <array>
8945 <dict>
8946 <key>name</key>
8947 <string>entity.other.attribute-name.directive.tsx</string>
8948 <key>match</key>
8949 <string>path|types|no-default-lib|lib|name|resolution-mode</string>
8950 </dict>
8951 <dict>
8952 <key>name</key>
8953 <string>keyword.operator.assignment.tsx</string>
8954 <key>match</key>
8955 <string>=</string>
8956 </dict>
8957 <dict>
8958 <key>include</key>
8959 <string>#string</string>
8960 </dict>
8961 </array>
8962 </dict>
8963 </array>
8964 </dict>
8965 <key>docblock</key>
8966 <dict>
8967 <key>patterns</key>
8968 <array>
8969 <dict>
8970 <key>match</key>
8971 <string>(?x)
8972((@)(?:access|api))
8973\s+
8974(private|protected|public)
8975\b</string>
8976 <key>captures</key>
8977 <dict>
8978 <key>1</key>
8979 <dict>
8980 <key>name</key>
8981 <string>storage.type.class.jsdoc</string>
8982 </dict>
8983 <key>2</key>
8984 <dict>
8985 <key>name</key>
8986 <string>punctuation.definition.block.tag.jsdoc</string>
8987 </dict>
8988 <key>3</key>
8989 <dict>
8990 <key>name</key>
8991 <string>constant.language.access-type.jsdoc</string>
8992 </dict>
8993 </dict>
8994 </dict>
8995 <dict>
8996 <key>match</key>
8997 <string>(?x)
8998((@)author)
8999\s+
9000(
9001 [^@\s&lt;&gt;*/]
9002 (?:[^@&lt;&gt;*/]|\*[^/])*
9003)
9004(?:
9005 \s*
9006 (&lt;)
9007 ([^&gt;\s]+)
9008 (&gt;)
9009)?</string>
9010 <key>captures</key>
9011 <dict>
9012 <key>1</key>
9013 <dict>
9014 <key>name</key>
9015 <string>storage.type.class.jsdoc</string>
9016 </dict>
9017 <key>2</key>
9018 <dict>
9019 <key>name</key>
9020 <string>punctuation.definition.block.tag.jsdoc</string>
9021 </dict>
9022 <key>3</key>
9023 <dict>
9024 <key>name</key>
9025 <string>entity.name.type.instance.jsdoc</string>
9026 </dict>
9027 <key>4</key>
9028 <dict>
9029 <key>name</key>
9030 <string>punctuation.definition.bracket.angle.begin.jsdoc</string>
9031 </dict>
9032 <key>5</key>
9033 <dict>
9034 <key>name</key>
9035 <string>constant.other.email.link.underline.jsdoc</string>
9036 </dict>
9037 <key>6</key>
9038 <dict>
9039 <key>name</key>
9040 <string>punctuation.definition.bracket.angle.end.jsdoc</string>
9041 </dict>
9042 </dict>
9043 </dict>
9044 <dict>
9045 <key>match</key>
9046 <string>(?x)
9047((@)borrows) \s+
9048((?:[^@\s*/]|\*[^/])+) # &lt;that namepath&gt;
9049\s+ (as) \s+ # as
9050((?:[^@\s*/]|\*[^/])+) # &lt;this namepath&gt;</string>
9051 <key>captures</key>
9052 <dict>
9053 <key>1</key>
9054 <dict>
9055 <key>name</key>
9056 <string>storage.type.class.jsdoc</string>
9057 </dict>
9058 <key>2</key>
9059 <dict>
9060 <key>name</key>
9061 <string>punctuation.definition.block.tag.jsdoc</string>
9062 </dict>
9063 <key>3</key>
9064 <dict>
9065 <key>name</key>
9066 <string>entity.name.type.instance.jsdoc</string>
9067 </dict>
9068 <key>4</key>
9069 <dict>
9070 <key>name</key>
9071 <string>keyword.operator.control.jsdoc</string>
9072 </dict>
9073 <key>5</key>
9074 <dict>
9075 <key>name</key>
9076 <string>entity.name.type.instance.jsdoc</string>
9077 </dict>
9078 </dict>
9079 </dict>
9080 <dict>
9081 <key>name</key>
9082 <string>meta.example.jsdoc</string>
9083 <key>begin</key>
9084 <string>((@)example)\s+</string>
9085 <key>end</key>
9086 <string>(?=@|\*/)</string>
9087 <key>beginCaptures</key>
9088 <dict>
9089 <key>1</key>
9090 <dict>
9091 <key>name</key>
9092 <string>storage.type.class.jsdoc</string>
9093 </dict>
9094 <key>2</key>
9095 <dict>
9096 <key>name</key>
9097 <string>punctuation.definition.block.tag.jsdoc</string>
9098 </dict>
9099 </dict>
9100 <key>patterns</key>
9101 <array>
9102 <dict>
9103 <key>match</key>
9104 <string>^\s\*\s+</string>
9105 </dict>
9106 <dict>
9107 <key>contentName</key>
9108 <string>constant.other.description.jsdoc</string>
9109 <key>begin</key>
9110 <string>\G(&lt;)caption(&gt;)</string>
9111 <key>beginCaptures</key>
9112 <dict>
9113 <key>0</key>
9114 <dict>
9115 <key>name</key>
9116 <string>entity.name.tag.inline.jsdoc</string>
9117 </dict>
9118 <key>1</key>
9119 <dict>
9120 <key>name</key>
9121 <string>punctuation.definition.bracket.angle.begin.jsdoc</string>
9122 </dict>
9123 <key>2</key>
9124 <dict>
9125 <key>name</key>
9126 <string>punctuation.definition.bracket.angle.end.jsdoc</string>
9127 </dict>
9128 </dict>
9129 <key>end</key>
9130 <string>(&lt;/)caption(&gt;)|(?=\*/)</string>
9131 <key>endCaptures</key>
9132 <dict>
9133 <key>0</key>
9134 <dict>
9135 <key>name</key>
9136 <string>entity.name.tag.inline.jsdoc</string>
9137 </dict>
9138 <key>1</key>
9139 <dict>
9140 <key>name</key>
9141 <string>punctuation.definition.bracket.angle.begin.jsdoc</string>
9142 </dict>
9143 <key>2</key>
9144 <dict>
9145 <key>name</key>
9146 <string>punctuation.definition.bracket.angle.end.jsdoc</string>
9147 </dict>
9148 </dict>
9149 </dict>
9150 <dict>
9151 <key>match</key>
9152 <string>[^\s@*](?:[^*]|\*[^/])*</string>
9153 <key>captures</key>
9154 <dict>
9155 <key>0</key>
9156 <dict>
9157 <key>name</key>
9158 <string>source.embedded.tsx</string>
9159 </dict>
9160 </dict>
9161 </dict>
9162 </array>
9163 </dict>
9164 <dict>
9165 <key>match</key>
9166 <string>(?x) ((@)kind) \s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \b</string>
9167 <key>captures</key>
9168 <dict>
9169 <key>1</key>
9170 <dict>
9171 <key>name</key>
9172 <string>storage.type.class.jsdoc</string>
9173 </dict>
9174 <key>2</key>
9175 <dict>
9176 <key>name</key>
9177 <string>punctuation.definition.block.tag.jsdoc</string>
9178 </dict>
9179 <key>3</key>
9180 <dict>
9181 <key>name</key>
9182 <string>constant.language.symbol-type.jsdoc</string>
9183 </dict>
9184 </dict>
9185 </dict>
9186 <dict>
9187 <key>match</key>
9188 <string>(?x)
9189((@)see)
9190\s+
9191(?:
9192 # URL
9193 (
9194 (?=https?://)
9195 (?:[^\s*]|\*[^/])+
9196 )
9197 |
9198 # JSDoc namepath
9199 (
9200 (?!
9201 # Avoid matching bare URIs (also acceptable as links)
9202 https?://
9203 |
9204 # Avoid matching {@inline tags}; we match those below
9205 (?:\[[^\[\]]*\])? # Possible description [preceding]{@tag}
9206 {@(?:link|linkcode|linkplain|tutorial)\b
9207 )
9208 # Matched namepath
9209 (?:[^@\s*/]|\*[^/])+
9210 )
9211)</string>
9212 <key>captures</key>
9213 <dict>
9214 <key>1</key>
9215 <dict>
9216 <key>name</key>
9217 <string>storage.type.class.jsdoc</string>
9218 </dict>
9219 <key>2</key>
9220 <dict>
9221 <key>name</key>
9222 <string>punctuation.definition.block.tag.jsdoc</string>
9223 </dict>
9224 <key>3</key>
9225 <dict>
9226 <key>name</key>
9227 <string>variable.other.link.underline.jsdoc</string>
9228 </dict>
9229 <key>4</key>
9230 <dict>
9231 <key>name</key>
9232 <string>entity.name.type.instance.jsdoc</string>
9233 </dict>
9234 </dict>
9235 </dict>
9236 <dict>
9237 <key>match</key>
9238 <string>(?x)
9239((@)template)
9240\s+
9241# One or more valid identifiers
9242(
9243 [A-Za-z_$] # First character: non-numeric word character
9244 [\w$.\[\]]* # Rest of identifier
9245 (?: # Possible list of additional identifiers
9246 \s* , \s*
9247 [A-Za-z_$]
9248 [\w$.\[\]]*
9249 )*
9250)</string>
9251 <key>captures</key>
9252 <dict>
9253 <key>1</key>
9254 <dict>
9255 <key>name</key>
9256 <string>storage.type.class.jsdoc</string>
9257 </dict>
9258 <key>2</key>
9259 <dict>
9260 <key>name</key>
9261 <string>punctuation.definition.block.tag.jsdoc</string>
9262 </dict>
9263 <key>3</key>
9264 <dict>
9265 <key>name</key>
9266 <string>variable.other.jsdoc</string>
9267 </dict>
9268 </dict>
9269 </dict>
9270 <dict>
9271 <key>begin</key>
9272 <string>(?x)((@)template)\s+(?={)</string>
9273 <key>beginCaptures</key>
9274 <dict>
9275 <key>1</key>
9276 <dict>
9277 <key>name</key>
9278 <string>storage.type.class.jsdoc</string>
9279 </dict>
9280 <key>2</key>
9281 <dict>
9282 <key>name</key>
9283 <string>punctuation.definition.block.tag.jsdoc</string>
9284 </dict>
9285 </dict>
9286 <key>end</key>
9287 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9288 <key>patterns</key>
9289 <array>
9290 <dict>
9291 <key>include</key>
9292 <string>#jsdoctype</string>
9293 </dict>
9294 <dict>
9295 <key>name</key>
9296 <string>variable.other.jsdoc</string>
9297 <key>match</key>
9298 <string>([A-Za-z_$][\w$.\[\]]*)</string>
9299 </dict>
9300 </array>
9301 </dict>
9302 <dict>
9303 <key>match</key>
9304 <string>(?x)
9305(
9306 (@)
9307 (?:arg|argument|const|constant|member|namespace|param|var)
9308)
9309\s+
9310(
9311 [A-Za-z_$]
9312 [\w$.\[\]]*
9313)</string>
9314 <key>captures</key>
9315 <dict>
9316 <key>1</key>
9317 <dict>
9318 <key>name</key>
9319 <string>storage.type.class.jsdoc</string>
9320 </dict>
9321 <key>2</key>
9322 <dict>
9323 <key>name</key>
9324 <string>punctuation.definition.block.tag.jsdoc</string>
9325 </dict>
9326 <key>3</key>
9327 <dict>
9328 <key>name</key>
9329 <string>variable.other.jsdoc</string>
9330 </dict>
9331 </dict>
9332 </dict>
9333 <dict>
9334 <key>begin</key>
9335 <string>((@)typedef)\s+(?={)</string>
9336 <key>beginCaptures</key>
9337 <dict>
9338 <key>1</key>
9339 <dict>
9340 <key>name</key>
9341 <string>storage.type.class.jsdoc</string>
9342 </dict>
9343 <key>2</key>
9344 <dict>
9345 <key>name</key>
9346 <string>punctuation.definition.block.tag.jsdoc</string>
9347 </dict>
9348 </dict>
9349 <key>end</key>
9350 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9351 <key>patterns</key>
9352 <array>
9353 <dict>
9354 <key>include</key>
9355 <string>#jsdoctype</string>
9356 </dict>
9357 <dict>
9358 <key>name</key>
9359 <string>entity.name.type.instance.jsdoc</string>
9360 <key>match</key>
9361 <string>(?:[^@\s*/]|\*[^/])+</string>
9362 </dict>
9363 </array>
9364 </dict>
9365 <dict>
9366 <key>begin</key>
9367 <string>((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\s+(?={)</string>
9368 <key>beginCaptures</key>
9369 <dict>
9370 <key>1</key>
9371 <dict>
9372 <key>name</key>
9373 <string>storage.type.class.jsdoc</string>
9374 </dict>
9375 <key>2</key>
9376 <dict>
9377 <key>name</key>
9378 <string>punctuation.definition.block.tag.jsdoc</string>
9379 </dict>
9380 </dict>
9381 <key>end</key>
9382 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9383 <key>patterns</key>
9384 <array>
9385 <dict>
9386 <key>include</key>
9387 <string>#jsdoctype</string>
9388 </dict>
9389 <dict>
9390 <key>name</key>
9391 <string>variable.other.jsdoc</string>
9392 <key>match</key>
9393 <string>([A-Za-z_$][\w$.\[\]]*)</string>
9394 </dict>
9395 <dict>
9396 <key>name</key>
9397 <string>variable.other.jsdoc</string>
9398 <key>match</key>
9399 <string>(?x)
9400(\[)\s*
9401[\w$]+
9402(?:
9403 (?:\[\])? # Foo[ ].bar properties within an array
9404 \. # Foo.Bar namespaced parameter
9405 [\w$]+
9406)*
9407(?:
9408 \s*
9409 (=) # [foo=bar] Default parameter value
9410 \s*
9411 (
9412 # The inner regexes are to stop the match early at */ and to not stop at escaped quotes
9413 (?&gt;
9414 "(?:(?:\*(?!/))|(?:\\(?!"))|[^*\\])*?" | # [foo="bar"] Double-quoted
9415 '(?:(?:\*(?!/))|(?:\\(?!'))|[^*\\])*?' | # [foo='bar'] Single-quoted
9416 \[ (?:(?:\*(?!/))|[^*])*? \] | # [foo=[1,2]] Array literal
9417 (?:(?:\*(?!/))|\s(?!\s*\])|\[.*?(?:\]|(?=\*/))|[^*\s\[\]])* # Everything else
9418 )*
9419 )
9420)?
9421\s*(?:(\])((?:[^*\s]|\*[^\s/])+)?|(?=\*/))</string>
9422 <key>captures</key>
9423 <dict>
9424 <key>1</key>
9425 <dict>
9426 <key>name</key>
9427 <string>punctuation.definition.optional-value.begin.bracket.square.jsdoc</string>
9428 </dict>
9429 <key>2</key>
9430 <dict>
9431 <key>name</key>
9432 <string>keyword.operator.assignment.jsdoc</string>
9433 </dict>
9434 <key>3</key>
9435 <dict>
9436 <key>name</key>
9437 <string>source.embedded.tsx</string>
9438 </dict>
9439 <key>4</key>
9440 <dict>
9441 <key>name</key>
9442 <string>punctuation.definition.optional-value.end.bracket.square.jsdoc</string>
9443 </dict>
9444 <key>5</key>
9445 <dict>
9446 <key>name</key>
9447 <string>invalid.illegal.syntax.jsdoc</string>
9448 </dict>
9449 </dict>
9450 </dict>
9451 </array>
9452 </dict>
9453 <dict>
9454 <key>begin</key>
9455 <string>(?x)
9456(
9457 (@)
9458 (?:define|enum|exception|export|extends|lends|implements|modifies
9459 |namespace|private|protected|returns?|satisfies|suppress|this|throws|type
9460 |yields?)
9461)
9462\s+(?={)</string>
9463 <key>beginCaptures</key>
9464 <dict>
9465 <key>1</key>
9466 <dict>
9467 <key>name</key>
9468 <string>storage.type.class.jsdoc</string>
9469 </dict>
9470 <key>2</key>
9471 <dict>
9472 <key>name</key>
9473 <string>punctuation.definition.block.tag.jsdoc</string>
9474 </dict>
9475 </dict>
9476 <key>end</key>
9477 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9478 <key>patterns</key>
9479 <array>
9480 <dict>
9481 <key>include</key>
9482 <string>#jsdoctype</string>
9483 </dict>
9484 </array>
9485 </dict>
9486 <dict>
9487 <key>match</key>
9488 <string>(?x)
9489(
9490 (@)
9491 (?:alias|augments|callback|constructs|emits|event|fires|exports?
9492 |extends|external|function|func|host|lends|listens|interface|memberof!?
9493 |method|module|mixes|mixin|name|requires|see|this|typedef|uses)
9494)
9495\s+
9496(
9497 (?:
9498 [^{}@\s*] | \*[^/]
9499 )+
9500)</string>
9501 <key>captures</key>
9502 <dict>
9503 <key>1</key>
9504 <dict>
9505 <key>name</key>
9506 <string>storage.type.class.jsdoc</string>
9507 </dict>
9508 <key>2</key>
9509 <dict>
9510 <key>name</key>
9511 <string>punctuation.definition.block.tag.jsdoc</string>
9512 </dict>
9513 <key>3</key>
9514 <dict>
9515 <key>name</key>
9516 <string>entity.name.type.instance.jsdoc</string>
9517 </dict>
9518 </dict>
9519 </dict>
9520 <dict>
9521 <key>contentName</key>
9522 <string>variable.other.jsdoc</string>
9523 <key>begin</key>
9524 <string>((@)(?:default(?:value)?|license|version))\s+(([''"]))</string>
9525 <key>beginCaptures</key>
9526 <dict>
9527 <key>1</key>
9528 <dict>
9529 <key>name</key>
9530 <string>storage.type.class.jsdoc</string>
9531 </dict>
9532 <key>2</key>
9533 <dict>
9534 <key>name</key>
9535 <string>punctuation.definition.block.tag.jsdoc</string>
9536 </dict>
9537 <key>3</key>
9538 <dict>
9539 <key>name</key>
9540 <string>variable.other.jsdoc</string>
9541 </dict>
9542 <key>4</key>
9543 <dict>
9544 <key>name</key>
9545 <string>punctuation.definition.string.begin.jsdoc</string>
9546 </dict>
9547 </dict>
9548 <key>end</key>
9549 <string>(\3)|(?=$|\*/)</string>
9550 <key>endCaptures</key>
9551 <dict>
9552 <key>0</key>
9553 <dict>
9554 <key>name</key>
9555 <string>variable.other.jsdoc</string>
9556 </dict>
9557 <key>1</key>
9558 <dict>
9559 <key>name</key>
9560 <string>punctuation.definition.string.end.jsdoc</string>
9561 </dict>
9562 </dict>
9563 </dict>
9564 <dict>
9565 <key>match</key>
9566 <string>((@)(?:default(?:value)?|license|tutorial|variation|version))\s+([^\s*]+)</string>
9567 <key>captures</key>
9568 <dict>
9569 <key>1</key>
9570 <dict>
9571 <key>name</key>
9572 <string>storage.type.class.jsdoc</string>
9573 </dict>
9574 <key>2</key>
9575 <dict>
9576 <key>name</key>
9577 <string>punctuation.definition.block.tag.jsdoc</string>
9578 </dict>
9579 <key>3</key>
9580 <dict>
9581 <key>name</key>
9582 <string>variable.other.jsdoc</string>
9583 </dict>
9584 </dict>
9585 </dict>
9586 <dict>
9587 <key>name</key>
9588 <string>storage.type.class.jsdoc</string>
9589 <key>match</key>
9590 <string>(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \b</string>
9591 <key>captures</key>
9592 <dict>
9593 <key>1</key>
9594 <dict>
9595 <key>name</key>
9596 <string>punctuation.definition.block.tag.jsdoc</string>
9597 </dict>
9598 </dict>
9599 </dict>
9600 <dict>
9601 <key>include</key>
9602 <string>#inline-tags</string>
9603 </dict>
9604 <dict>
9605 <key>match</key>
9606 <string>((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\s+)</string>
9607 <key>captures</key>
9608 <dict>
9609 <key>1</key>
9610 <dict>
9611 <key>name</key>
9612 <string>storage.type.class.jsdoc</string>
9613 </dict>
9614 <key>2</key>
9615 <dict>
9616 <key>name</key>
9617 <string>punctuation.definition.block.tag.jsdoc</string>
9618 </dict>
9619 </dict>
9620 </dict>
9621 </array>
9622 </dict>
9623 <key>brackets</key>
9624 <dict>
9625 <key>patterns</key>
9626 <array>
9627 <dict>
9628 <key>begin</key>
9629 <string>{</string>
9630 <key>end</key>
9631 <string>}|(?=\*/)</string>
9632 <key>patterns</key>
9633 <array>
9634 <dict>
9635 <key>include</key>
9636 <string>#brackets</string>
9637 </dict>
9638 </array>
9639 </dict>
9640 <dict>
9641 <key>begin</key>
9642 <string>\[</string>
9643 <key>end</key>
9644 <string>\]|(?=\*/)</string>
9645 <key>patterns</key>
9646 <array>
9647 <dict>
9648 <key>include</key>
9649 <string>#brackets</string>
9650 </dict>
9651 </array>
9652 </dict>
9653 </array>
9654 </dict>
9655 <key>inline-tags</key>
9656 <dict>
9657 <key>patterns</key>
9658 <array>
9659 <dict>
9660 <key>name</key>
9661 <string>constant.other.description.jsdoc</string>
9662 <key>match</key>
9663 <string>(\[)[^\]]+(\])(?={@(?:link|linkcode|linkplain|tutorial))</string>
9664 <key>captures</key>
9665 <dict>
9666 <key>1</key>
9667 <dict>
9668 <key>name</key>
9669 <string>punctuation.definition.bracket.square.begin.jsdoc</string>
9670 </dict>
9671 <key>2</key>
9672 <dict>
9673 <key>name</key>
9674 <string>punctuation.definition.bracket.square.end.jsdoc</string>
9675 </dict>
9676 </dict>
9677 </dict>
9678 <dict>
9679 <key>name</key>
9680 <string>entity.name.type.instance.jsdoc</string>
9681 <key>begin</key>
9682 <string>({)((@)(?:link(?:code|plain)?|tutorial))\s*</string>
9683 <key>beginCaptures</key>
9684 <dict>
9685 <key>1</key>
9686 <dict>
9687 <key>name</key>
9688 <string>punctuation.definition.bracket.curly.begin.jsdoc</string>
9689 </dict>
9690 <key>2</key>
9691 <dict>
9692 <key>name</key>
9693 <string>storage.type.class.jsdoc</string>
9694 </dict>
9695 <key>3</key>
9696 <dict>
9697 <key>name</key>
9698 <string>punctuation.definition.inline.tag.jsdoc</string>
9699 </dict>
9700 </dict>
9701 <key>end</key>
9702 <string>}|(?=\*/)</string>
9703 <key>endCaptures</key>
9704 <dict>
9705 <key>0</key>
9706 <dict>
9707 <key>name</key>
9708 <string>punctuation.definition.bracket.curly.end.jsdoc</string>
9709 </dict>
9710 </dict>
9711 <key>patterns</key>
9712 <array>
9713 <dict>
9714 <key>match</key>
9715 <string>\G((?=https?://)(?:[^|}\s*]|\*[/])+)(\|)?</string>
9716 <key>captures</key>
9717 <dict>
9718 <key>1</key>
9719 <dict>
9720 <key>name</key>
9721 <string>variable.other.link.underline.jsdoc</string>
9722 </dict>
9723 <key>2</key>
9724 <dict>
9725 <key>name</key>
9726 <string>punctuation.separator.pipe.jsdoc</string>
9727 </dict>
9728 </dict>
9729 </dict>
9730 <dict>
9731 <key>match</key>
9732 <string>\G((?:[^{}@\s|*]|\*[^/])+)(\|)?</string>
9733 <key>captures</key>
9734 <dict>
9735 <key>1</key>
9736 <dict>
9737 <key>name</key>
9738 <string>variable.other.description.jsdoc</string>
9739 </dict>
9740 <key>2</key>
9741 <dict>
9742 <key>name</key>
9743 <string>punctuation.separator.pipe.jsdoc</string>
9744 </dict>
9745 </dict>
9746 </dict>
9747 </array>
9748 </dict>
9749 </array>
9750 </dict>
9751 <key>jsdoctype</key>
9752 <dict>
9753 <key>patterns</key>
9754 <array>
9755 <dict>
9756 <key>name</key>
9757 <string>invalid.illegal.type.jsdoc</string>
9758 <key>match</key>
9759 <string>\G{(?:[^}*]|\*[^/}])+$</string>
9760 </dict>
9761 <dict>
9762 <key>contentName</key>
9763 <string>entity.name.type.instance.jsdoc</string>
9764 <key>begin</key>
9765 <string>\G({)</string>
9766 <key>beginCaptures</key>
9767 <dict>
9768 <key>0</key>
9769 <dict>
9770 <key>name</key>
9771 <string>entity.name.type.instance.jsdoc</string>
9772 </dict>
9773 <key>1</key>
9774 <dict>
9775 <key>name</key>
9776 <string>punctuation.definition.bracket.curly.begin.jsdoc</string>
9777 </dict>
9778 </dict>
9779 <key>end</key>
9780 <string>((}))\s*|(?=\*/)</string>
9781 <key>endCaptures</key>
9782 <dict>
9783 <key>1</key>
9784 <dict>
9785 <key>name</key>
9786 <string>entity.name.type.instance.jsdoc</string>
9787 </dict>
9788 <key>2</key>
9789 <dict>
9790 <key>name</key>
9791 <string>punctuation.definition.bracket.curly.end.jsdoc</string>
9792 </dict>
9793 </dict>
9794 <key>patterns</key>
9795 <array>
9796 <dict>
9797 <key>include</key>
9798 <string>#brackets</string>
9799 </dict>
9800 </array>
9801 </dict>
9802 </array>
9803 </dict>
9804 <key>jsx</key>
9805 <dict>
9806 <key>patterns</key>
9807 <array>
9808 <dict>
9809 <key>include</key>
9810 <string>#jsx-tag-without-attributes-in-expression</string>
9811 </dict>
9812 <dict>
9813 <key>include</key>
9814 <string>#jsx-tag-in-expression</string>
9815 </dict>
9816 </array>
9817 </dict>
9818 <key>jsx-tag-without-attributes-in-expression</key>
9819 <dict>
9820 <key>begin</key>
9821 <string>(?&lt;!\+\+|--)(?&lt;=[({\[,?=&gt;:*]|&amp;&amp;|\|\||\?|\*\/|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*(?=(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;))</string>
9822 <key>end</key>
9823 <string>(?!(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;))</string>
9824 <key>patterns</key>
9825 <array>
9826 <dict>
9827 <key>include</key>
9828 <string>#jsx-tag-without-attributes</string>
9829 </dict>
9830 </array>
9831 </dict>
9832 <key>jsx-tag-without-attributes</key>
9833 <dict>
9834 <key>name</key>
9835 <string>meta.tag.without-attributes.tsx</string>
9836 <key>begin</key>
9837 <string>(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;)</string>
9838 <key>end</key>
9839 <string>(&lt;/)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;)</string>
9840 <key>beginCaptures</key>
9841 <dict>
9842 <key>1</key>
9843 <dict>
9844 <key>name</key>
9845 <string>punctuation.definition.tag.begin.tsx</string>
9846 </dict>
9847 <key>2</key>
9848 <dict>
9849 <key>name</key>
9850 <string>entity.name.tag.namespace.tsx</string>
9851 </dict>
9852 <key>3</key>
9853 <dict>
9854 <key>name</key>
9855 <string>punctuation.separator.namespace.tsx</string>
9856 </dict>
9857 <key>4</key>
9858 <dict>
9859 <key>name</key>
9860 <string>entity.name.tag.tsx</string>
9861 </dict>
9862 <key>5</key>
9863 <dict>
9864 <key>name</key>
9865 <string>support.class.component.tsx</string>
9866 </dict>
9867 <key>6</key>
9868 <dict>
9869 <key>name</key>
9870 <string>punctuation.definition.tag.end.tsx</string>
9871 </dict>
9872 </dict>
9873 <key>endCaptures</key>
9874 <dict>
9875 <key>1</key>
9876 <dict>
9877 <key>name</key>
9878 <string>punctuation.definition.tag.begin.tsx</string>
9879 </dict>
9880 <key>2</key>
9881 <dict>
9882 <key>name</key>
9883 <string>entity.name.tag.namespace.tsx</string>
9884 </dict>
9885 <key>3</key>
9886 <dict>
9887 <key>name</key>
9888 <string>punctuation.separator.namespace.tsx</string>
9889 </dict>
9890 <key>4</key>
9891 <dict>
9892 <key>name</key>
9893 <string>entity.name.tag.tsx</string>
9894 </dict>
9895 <key>5</key>
9896 <dict>
9897 <key>name</key>
9898 <string>support.class.component.tsx</string>
9899 </dict>
9900 <key>6</key>
9901 <dict>
9902 <key>name</key>
9903 <string>punctuation.definition.tag.end.tsx</string>
9904 </dict>
9905 </dict>
9906 <key>contentName</key>
9907 <string>meta.jsx.children.tsx</string>
9908 <key>patterns</key>
9909 <array>
9910 <dict>
9911 <key>include</key>
9912 <string>#jsx-children</string>
9913 </dict>
9914 </array>
9915 </dict>
9916 <key>jsx-tag-in-expression</key>
9917 <dict>
9918 <key>begin</key>
9919 <string>(?x)
9920 (?&lt;!\+\+|--)(?&lt;=[({\[,?=&gt;:*]|&amp;&amp;|\|\||\?|\*\/|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*
9921 (?!&lt;\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=&gt;])|,)) # look ahead is not type parameter of arrow
9922 (?=(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;))</string>
9923 <key>end</key>
9924 <string>(?!(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;))</string>
9925 <key>patterns</key>
9926 <array>
9927 <dict>
9928 <key>include</key>
9929 <string>#jsx-tag</string>
9930 </dict>
9931 </array>
9932 </dict>
9933 <key>jsx-tag</key>
9934 <dict>
9935 <key>name</key>
9936 <string>meta.tag.tsx</string>
9937 <key>begin</key>
9938 <string>(?=(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;))</string>
9939 <key>end</key>
9940 <string>(/&gt;)|(?:(&lt;/)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;))</string>
9941 <key>endCaptures</key>
9942 <dict>
9943 <key>1</key>
9944 <dict>
9945 <key>name</key>
9946 <string>punctuation.definition.tag.end.tsx</string>
9947 </dict>
9948 <key>2</key>
9949 <dict>
9950 <key>name</key>
9951 <string>punctuation.definition.tag.begin.tsx</string>
9952 </dict>
9953 <key>3</key>
9954 <dict>
9955 <key>name</key>
9956 <string>entity.name.tag.namespace.tsx</string>
9957 </dict>
9958 <key>4</key>
9959 <dict>
9960 <key>name</key>
9961 <string>punctuation.separator.namespace.tsx</string>
9962 </dict>
9963 <key>5</key>
9964 <dict>
9965 <key>name</key>
9966 <string>entity.name.tag.tsx</string>
9967 </dict>
9968 <key>6</key>
9969 <dict>
9970 <key>name</key>
9971 <string>support.class.component.tsx</string>
9972 </dict>
9973 <key>7</key>
9974 <dict>
9975 <key>name</key>
9976 <string>punctuation.definition.tag.end.tsx</string>
9977 </dict>
9978 </dict>
9979 <key>patterns</key>
9980 <array>
9981 <dict>
9982 <key>begin</key>
9983 <string>(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;)</string>
9984 <key>beginCaptures</key>
9985 <dict>
9986 <key>1</key>
9987 <dict>
9988 <key>name</key>
9989 <string>punctuation.definition.tag.begin.tsx</string>
9990 </dict>
9991 <key>2</key>
9992 <dict>
9993 <key>name</key>
9994 <string>entity.name.tag.namespace.tsx</string>
9995 </dict>
9996 <key>3</key>
9997 <dict>
9998 <key>name</key>
9999 <string>punctuation.separator.namespace.tsx</string>
10000 </dict>
10001 <key>4</key>
10002 <dict>
10003 <key>name</key>
10004 <string>entity.name.tag.tsx</string>
10005 </dict>
10006 <key>5</key>
10007 <dict>
10008 <key>name</key>
10009 <string>support.class.component.tsx</string>
10010 </dict>
10011 </dict>
10012 <key>end</key>
10013 <string>(?=[/]?&gt;)</string>
10014 <key>patterns</key>
10015 <array>
10016 <dict>
10017 <key>include</key>
10018 <string>#comment</string>
10019 </dict>
10020 <dict>
10021 <key>include</key>
10022 <string>#type-arguments</string>
10023 </dict>
10024 <dict>
10025 <key>include</key>
10026 <string>#jsx-tag-attributes</string>
10027 </dict>
10028 </array>
10029 </dict>
10030 <dict>
10031 <key>begin</key>
10032 <string>(&gt;)</string>
10033 <key>beginCaptures</key>
10034 <dict>
10035 <key>1</key>
10036 <dict>
10037 <key>name</key>
10038 <string>punctuation.definition.tag.end.tsx</string>
10039 </dict>
10040 </dict>
10041 <key>end</key>
10042 <string>(?=&lt;/)</string>
10043 <key>contentName</key>
10044 <string>meta.jsx.children.tsx</string>
10045 <key>patterns</key>
10046 <array>
10047 <dict>
10048 <key>include</key>
10049 <string>#jsx-children</string>
10050 </dict>
10051 </array>
10052 </dict>
10053 </array>
10054 </dict>
10055 <key>jsx-children</key>
10056 <dict>
10057 <key>patterns</key>
10058 <array>
10059 <dict>
10060 <key>include</key>
10061 <string>#jsx-tag-without-attributes</string>
10062 </dict>
10063 <dict>
10064 <key>include</key>
10065 <string>#jsx-tag</string>
10066 </dict>
10067 <dict>
10068 <key>include</key>
10069 <string>#jsx-evaluated-code</string>
10070 </dict>
10071 <dict>
10072 <key>include</key>
10073 <string>#jsx-entities</string>
10074 </dict>
10075 </array>
10076 </dict>
10077 <key>jsx-evaluated-code</key>
10078 <dict>
10079 <key>contentName</key>
10080 <string>meta.embedded.expression.tsx</string>
10081 <key>begin</key>
10082 <string>\{</string>
10083 <key>end</key>
10084 <string>\}</string>
10085 <key>beginCaptures</key>
10086 <dict>
10087 <key>0</key>
10088 <dict>
10089 <key>name</key>
10090 <string>punctuation.section.embedded.begin.tsx</string>
10091 </dict>
10092 </dict>
10093 <key>endCaptures</key>
10094 <dict>
10095 <key>0</key>
10096 <dict>
10097 <key>name</key>
10098 <string>punctuation.section.embedded.end.tsx</string>
10099 </dict>
10100 </dict>
10101 <key>patterns</key>
10102 <array>
10103 <dict>
10104 <key>include</key>
10105 <string>#expression</string>
10106 </dict>
10107 </array>
10108 </dict>
10109 <key>jsx-entities</key>
10110 <dict>
10111 <key>patterns</key>
10112 <array>
10113 <dict>
10114 <key>name</key>
10115 <string>constant.character.entity.tsx</string>
10116 <key>match</key>
10117 <string>(&amp;)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)</string>
10118 <key>captures</key>
10119 <dict>
10120 <key>1</key>
10121 <dict>
10122 <key>name</key>
10123 <string>punctuation.definition.entity.tsx</string>
10124 </dict>
10125 <key>3</key>
10126 <dict>
10127 <key>name</key>
10128 <string>punctuation.definition.entity.tsx</string>
10129 </dict>
10130 </dict>
10131 </dict>
10132 </array>
10133 </dict>
10134 <key>jsx-tag-attributes</key>
10135 <dict>
10136 <key>name</key>
10137 <string>meta.tag.attributes.tsx</string>
10138 <key>begin</key>
10139 <string>\s+</string>
10140 <key>end</key>
10141 <string>(?=[/]?&gt;)</string>
10142 <key>patterns</key>
10143 <array>
10144 <dict>
10145 <key>include</key>
10146 <string>#comment</string>
10147 </dict>
10148 <dict>
10149 <key>include</key>
10150 <string>#jsx-tag-attribute-name</string>
10151 </dict>
10152 <dict>
10153 <key>include</key>
10154 <string>#jsx-tag-attribute-assignment</string>
10155 </dict>
10156 <dict>
10157 <key>include</key>
10158 <string>#jsx-string-double-quoted</string>
10159 </dict>
10160 <dict>
10161 <key>include</key>
10162 <string>#jsx-string-single-quoted</string>
10163 </dict>
10164 <dict>
10165 <key>include</key>
10166 <string>#jsx-evaluated-code</string>
10167 </dict>
10168 <dict>
10169 <key>include</key>
10170 <string>#jsx-tag-attributes-illegal</string>
10171 </dict>
10172 </array>
10173 </dict>
10174 <key>jsx-tag-attribute-name</key>
10175 <dict>
10176 <key>match</key>
10177 <string>(?x)
10178 \s*
10179 (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))?
10180 ([_$[:alpha:]][-_$[:alnum:]]*)
10181 (?=\s|=|/?&gt;|/\*|//)</string>
10182 <key>captures</key>
10183 <dict>
10184 <key>1</key>
10185 <dict>
10186 <key>name</key>
10187 <string>entity.other.attribute-name.namespace.tsx</string>
10188 </dict>
10189 <key>2</key>
10190 <dict>
10191 <key>name</key>
10192 <string>punctuation.separator.namespace.tsx</string>
10193 </dict>
10194 <key>3</key>
10195 <dict>
10196 <key>name</key>
10197 <string>entity.other.attribute-name.tsx</string>
10198 </dict>
10199 </dict>
10200 </dict>
10201 <key>jsx-tag-attribute-assignment</key>
10202 <dict>
10203 <key>name</key>
10204 <string>keyword.operator.assignment.tsx</string>
10205 <key>match</key>
10206 <string>=(?=\s*(?:'|"|{|/\*|//|\n))</string>
10207 </dict>
10208 <key>jsx-string-double-quoted</key>
10209 <dict>
10210 <key>name</key>
10211 <string>string.quoted.double.tsx</string>
10212 <key>begin</key>
10213 <string>"</string>
10214 <key>end</key>
10215 <string>"</string>
10216 <key>beginCaptures</key>
10217 <dict>
10218 <key>0</key>
10219 <dict>
10220 <key>name</key>
10221 <string>punctuation.definition.string.begin.tsx</string>
10222 </dict>
10223 </dict>
10224 <key>endCaptures</key>
10225 <dict>
10226 <key>0</key>
10227 <dict>
10228 <key>name</key>
10229 <string>punctuation.definition.string.end.tsx</string>
10230 </dict>
10231 </dict>
10232 <key>patterns</key>
10233 <array>
10234 <dict>
10235 <key>include</key>
10236 <string>#jsx-entities</string>
10237 </dict>
10238 </array>
10239 </dict>
10240 <key>jsx-string-single-quoted</key>
10241 <dict>
10242 <key>name</key>
10243 <string>string.quoted.single.tsx</string>
10244 <key>begin</key>
10245 <string>'</string>
10246 <key>end</key>
10247 <string>'</string>
10248 <key>beginCaptures</key>
10249 <dict>
10250 <key>0</key>
10251 <dict>
10252 <key>name</key>
10253 <string>punctuation.definition.string.begin.tsx</string>
10254 </dict>
10255 </dict>
10256 <key>endCaptures</key>
10257 <dict>
10258 <key>0</key>
10259 <dict>
10260 <key>name</key>
10261 <string>punctuation.definition.string.end.tsx</string>
10262 </dict>
10263 </dict>
10264 <key>patterns</key>
10265 <array>
10266 <dict>
10267 <key>include</key>
10268 <string>#jsx-entities</string>
10269 </dict>
10270 </array>
10271 </dict>
10272 <key>jsx-tag-attributes-illegal</key>
10273 <dict>
10274 <key>name</key>
10275 <string>invalid.illegal.attribute.tsx</string>
10276 <key>match</key>
10277 <string>\S+</string>
10278 </dict>
10279 </dict>
10280 </dict>
10281</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/xml.plist created+573
......@@ -0,0 +1,573 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>fileTypes</key>
6 <array>
7 <string>xml</string>
8 <string>xsd</string>
9 <string>tld</string>
10 <string>jsp</string>
11 <string>pt</string>
12 <string>cpt</string>
13 <string>dtml</string>
14 <string>rss</string>
15 <string>opml</string>
16 </array>
17 <key>keyEquivalent</key>
18 <string>^~X</string>
19 <key>name</key>
20 <string>XML</string>
21 <key>patterns</key>
22 <array>
23 <dict>
24 <key>begin</key>
25 <string>(&lt;\?)\s*([-_a-zA-Z0-9]+)</string>
26 <key>captures</key>
27 <dict>
28 <key>1</key>
29 <dict>
30 <key>name</key>
31 <string>punctuation.definition.tag.xml</string>
32 </dict>
33 <key>2</key>
34 <dict>
35 <key>name</key>
36 <string>entity.name.tag.xml</string>
37 </dict>
38 </dict>
39 <key>end</key>
40 <string>(\?&gt;)</string>
41 <key>name</key>
42 <string>meta.tag.metadata.processing.xml</string>
43 <key>patterns</key>
44 <array>
45 <dict>
46 <key>match</key>
47 <string> ([a-zA-Z-]+)</string>
48 <key>name</key>
49 <string>entity.other.attribute-name.xml</string>
50 </dict>
51 <dict>
52 <key>include</key>
53 <string>#doublequotedString</string>
54 </dict>
55 <dict>
56 <key>include</key>
57 <string>#singlequotedString</string>
58 </dict>
59 </array>
60 </dict>
61 <dict>
62 <key>begin</key>
63 <string>(&lt;!)(DOCTYPE)\s+([:a-zA-Z_][:a-zA-Z0-9_.-]*)</string>
64 <key>captures</key>
65 <dict>
66 <key>1</key>
67 <dict>
68 <key>name</key>
69 <string>punctuation.definition.tag.xml</string>
70 </dict>
71 <key>2</key>
72 <dict>
73 <key>name</key>
74 <string>entity.name.tag.xml</string>
75 </dict>
76 <key>3</key>
77 <dict>
78 <key>name</key>
79 <string>entity.other.attribute-name.documentroot.xml</string>
80 </dict>
81 </dict>
82 <key>end</key>
83 <string>\s*(&gt;)</string>
84 <key>name</key>
85 <string>meta.tag.metadata.doctype.xml</string>
86 <key>patterns</key>
87 <array>
88 <dict>
89 <key>include</key>
90 <string>#internalSubset</string>
91 </dict>
92 </array>
93 </dict>
94 <dict>
95 <key>begin</key>
96 <string>&lt;[!%]--</string>
97 <key>captures</key>
98 <dict>
99 <key>0</key>
100 <dict>
101 <key>name</key>
102 <string>punctuation.definition.comment.xml</string>
103 </dict>
104 </dict>
105 <key>end</key>
106 <string>--%?&gt;</string>
107 <key>name</key>
108 <string>comment.block.xml</string>
109 </dict>
110 <dict>
111 <key>begin</key>
112 <string>(&lt;)((?:([-_a-zA-Z0-9]+)((:)))?([-_a-zA-Z0-9:]+))(?=(\s[^&gt;]*)?&gt;&lt;/\2&gt;)</string>
113 <key>beginCaptures</key>
114 <dict>
115 <key>1</key>
116 <dict>
117 <key>name</key>
118 <string>punctuation.definition.tag.xml</string>
119 </dict>
120 <key>3</key>
121 <dict>
122 <key>name</key>
123 <string>entity.name.tag.namespace.xml</string>
124 </dict>
125 <key>4</key>
126 <dict>
127 <key>name</key>
128 <string>entity.name.tag.xml</string>
129 </dict>
130 <key>5</key>
131 <dict>
132 <key>name</key>
133 <string>punctuation.separator.namespace.xml</string>
134 </dict>
135 <key>6</key>
136 <dict>
137 <key>name</key>
138 <string>entity.name.tag.localname.xml</string>
139 </dict>
140 </dict>
141 <key>end</key>
142 <string>(&gt;(&lt;))/(?:([-_a-zA-Z0-9]+)((:)))?([-_a-zA-Z0-9:]+)(&gt;)</string>
143 <key>endCaptures</key>
144 <dict>
145 <key>1</key>
146 <dict>
147 <key>name</key>
148 <string>punctuation.definition.tag.xml</string>
149 </dict>
150 <key>2</key>
151 <dict>
152 <key>name</key>
153 <string>meta.scope.between-tag-pair.xml</string>
154 </dict>
155 <key>3</key>
156 <dict>
157 <key>name</key>
158 <string>entity.name.tag.namespace.xml</string>
159 </dict>
160 <key>4</key>
161 <dict>
162 <key>name</key>
163 <string>entity.name.tag.xml</string>
164 </dict>
165 <key>5</key>
166 <dict>
167 <key>name</key>
168 <string>punctuation.separator.namespace.xml</string>
169 </dict>
170 <key>6</key>
171 <dict>
172 <key>name</key>
173 <string>entity.name.tag.localname.xml</string>
174 </dict>
175 <key>7</key>
176 <dict>
177 <key>name</key>
178 <string>punctuation.definition.tag.xml</string>
179 </dict>
180 </dict>
181 <key>name</key>
182 <string>meta.tag.no-content.xml</string>
183 <key>patterns</key>
184 <array>
185 <dict>
186 <key>include</key>
187 <string>#tagStuff</string>
188 </dict>
189 </array>
190 </dict>
191 <dict>
192 <key>begin</key>
193 <string>(&lt;/?)(?:([-_a-zA-Z0-9]+)((:)))?([-_a-zA-Z0-9:]+)</string>
194 <key>captures</key>
195 <dict>
196 <key>1</key>
197 <dict>
198 <key>name</key>
199 <string>punctuation.definition.tag.xml</string>
200 </dict>
201 <key>2</key>
202 <dict>
203 <key>name</key>
204 <string>entity.name.tag.namespace.xml</string>
205 </dict>
206 <key>3</key>
207 <dict>
208 <key>name</key>
209 <string>entity.name.tag.xml</string>
210 </dict>
211 <key>4</key>
212 <dict>
213 <key>name</key>
214 <string>punctuation.separator.namespace.xml</string>
215 </dict>
216 <key>5</key>
217 <dict>
218 <key>name</key>
219 <string>entity.name.tag.localname.xml</string>
220 </dict>
221 </dict>
222 <key>end</key>
223 <string>(/?&gt;)</string>
224 <key>name</key>
225 <string>meta.tag.xml</string>
226 <key>patterns</key>
227 <array>
228 <dict>
229 <key>include</key>
230 <string>#tagStuff</string>
231 </dict>
232 </array>
233 </dict>
234 <dict>
235 <key>include</key>
236 <string>#entity</string>
237 </dict>
238 <dict>
239 <key>include</key>
240 <string>#bare-ampersand</string>
241 </dict>
242 <dict>
243 <key>begin</key>
244 <string>&lt;%@</string>
245 <key>beginCaptures</key>
246 <dict>
247 <key>0</key>
248 <dict>
249 <key>name</key>
250 <string>punctuation.section.embedded.begin.xml</string>
251 </dict>
252 </dict>
253 <key>end</key>
254 <string>%&gt;</string>
255 <key>endCaptures</key>
256 <dict>
257 <key>0</key>
258 <dict>
259 <key>name</key>
260 <string>punctuation.section.embedded.end.xml</string>
261 </dict>
262 </dict>
263 <key>name</key>
264 <string>source.java-props.embedded.xml</string>
265 <key>patterns</key>
266 <array>
267 <dict>
268 <key>match</key>
269 <string>page|include|taglib</string>
270 <key>name</key>
271 <string>keyword.other.page-props.xml</string>
272 </dict>
273 </array>
274 </dict>
275 <dict>
276 <key>begin</key>
277 <string>&lt;%[!=]?(?!--)</string>
278 <key>beginCaptures</key>
279 <dict>
280 <key>0</key>
281 <dict>
282 <key>name</key>
283 <string>punctuation.section.embedded.begin.xml</string>
284 </dict>
285 </dict>
286 <key>end</key>
287 <string>(?!--)%&gt;</string>
288 <key>endCaptures</key>
289 <dict>
290 <key>0</key>
291 <dict>
292 <key>name</key>
293 <string>punctuation.section.embedded.end.xml</string>
294 </dict>
295 </dict>
296 <key>name</key>
297 <string>source.java.embedded.xml</string>
298 <key>patterns</key>
299 <array>
300 <dict>
301 <key>include</key>
302 <string>source.java</string>
303 </dict>
304 </array>
305 </dict>
306 <dict>
307 <key>begin</key>
308 <string>&lt;!\[CDATA\[</string>
309 <key>beginCaptures</key>
310 <dict>
311 <key>0</key>
312 <dict>
313 <key>name</key>
314 <string>punctuation.definition.string.begin.xml</string>
315 </dict>
316 </dict>
317 <key>end</key>
318 <string>]]&gt;</string>
319 <key>endCaptures</key>
320 <dict>
321 <key>0</key>
322 <dict>
323 <key>name</key>
324 <string>punctuation.definition.string.end.xml</string>
325 </dict>
326 </dict>
327 <key>name</key>
328 <string>string.unquoted.cdata.xml</string>
329 </dict>
330 </array>
331 <key>repository</key>
332 <dict>
333 <key>EntityDecl</key>
334 <dict>
335 <key>begin</key>
336 <string>(&lt;!)(ENTITY)\s+(%\s+)?([:a-zA-Z_][:a-zA-Z0-9_.-]*)(\s+(?:SYSTEM|PUBLIC)\s+)?</string>
337 <key>captures</key>
338 <dict>
339 <key>1</key>
340 <dict>
341 <key>name</key>
342 <string>punctuation.definition.tag.xml</string>
343 </dict>
344 <key>2</key>
345 <dict>
346 <key>name</key>
347 <string>keyword.other.entity.xml</string>
348 </dict>
349 <key>3</key>
350 <dict>
351 <key>name</key>
352 <string>punctuation.definition.entity.xml</string>
353 </dict>
354 <key>4</key>
355 <dict>
356 <key>name</key>
357 <string>variable.language.entity.xml</string>
358 </dict>
359 <key>5</key>
360 <dict>
361 <key>name</key>
362 <string>keyword.other.entitytype.xml</string>
363 </dict>
364 </dict>
365 <key>end</key>
366 <string>(&gt;)</string>
367 <key>patterns</key>
368 <array>
369 <dict>
370 <key>include</key>
371 <string>#doublequotedString</string>
372 </dict>
373 <dict>
374 <key>include</key>
375 <string>#singlequotedString</string>
376 </dict>
377 </array>
378 </dict>
379 <key>bare-ampersand</key>
380 <dict>
381 <key>match</key>
382 <string>&amp;</string>
383 <key>name</key>
384 <string>invalid.illegal.bad-ampersand.xml</string>
385 </dict>
386 <key>doublequotedString</key>
387 <dict>
388 <key>begin</key>
389 <string>"</string>
390 <key>beginCaptures</key>
391 <dict>
392 <key>0</key>
393 <dict>
394 <key>name</key>
395 <string>punctuation.definition.string.begin.xml</string>
396 </dict>
397 </dict>
398 <key>end</key>
399 <string>"</string>
400 <key>endCaptures</key>
401 <dict>
402 <key>0</key>
403 <dict>
404 <key>name</key>
405 <string>punctuation.definition.string.end.xml</string>
406 </dict>
407 </dict>
408 <key>name</key>
409 <string>string.quoted.double.xml</string>
410 <key>patterns</key>
411 <array>
412 <dict>
413 <key>include</key>
414 <string>#entity</string>
415 </dict>
416 <dict>
417 <key>include</key>
418 <string>#bare-ampersand</string>
419 </dict>
420 </array>
421 </dict>
422 <key>entity</key>
423 <dict>
424 <key>captures</key>
425 <dict>
426 <key>1</key>
427 <dict>
428 <key>name</key>
429 <string>punctuation.definition.constant.xml</string>
430 </dict>
431 <key>3</key>
432 <dict>
433 <key>name</key>
434 <string>punctuation.definition.constant.xml</string>
435 </dict>
436 </dict>
437 <key>match</key>
438 <string>(&amp;)([:a-zA-Z_][:a-zA-Z0-9_.-]*|#[0-9]+|#x[0-9a-fA-F]+)(;)</string>
439 <key>name</key>
440 <string>constant.character.entity.xml</string>
441 </dict>
442 <key>internalSubset</key>
443 <dict>
444 <key>begin</key>
445 <string>(\[)</string>
446 <key>captures</key>
447 <dict>
448 <key>1</key>
449 <dict>
450 <key>name</key>
451 <string>punctuation.definition.constant.xml</string>
452 </dict>
453 </dict>
454 <key>end</key>
455 <string>(\])</string>
456 <key>name</key>
457 <string>meta.internalsubset.xml</string>
458 <key>patterns</key>
459 <array>
460 <dict>
461 <key>include</key>
462 <string>#EntityDecl</string>
463 </dict>
464 <dict>
465 <key>include</key>
466 <string>#parameterEntity</string>
467 </dict>
468 </array>
469 </dict>
470 <key>parameterEntity</key>
471 <dict>
472 <key>captures</key>
473 <dict>
474 <key>1</key>
475 <dict>
476 <key>name</key>
477 <string>punctuation.definition.constant.xml</string>
478 </dict>
479 <key>3</key>
480 <dict>
481 <key>name</key>
482 <string>punctuation.definition.constant.xml</string>
483 </dict>
484 </dict>
485 <key>match</key>
486 <string>(%)([:a-zA-Z_][:a-zA-Z0-9_.-]*)(;)</string>
487 <key>name</key>
488 <string>constant.character.parameter-entity.xml</string>
489 </dict>
490 <key>singlequotedString</key>
491 <dict>
492 <key>begin</key>
493 <string>'</string>
494 <key>beginCaptures</key>
495 <dict>
496 <key>0</key>
497 <dict>
498 <key>name</key>
499 <string>punctuation.definition.string.begin.xml</string>
500 </dict>
501 </dict>
502 <key>end</key>
503 <string>'</string>
504 <key>endCaptures</key>
505 <dict>
506 <key>0</key>
507 <dict>
508 <key>name</key>
509 <string>punctuation.definition.string.end.xml</string>
510 </dict>
511 </dict>
512 <key>name</key>
513 <string>string.quoted.single.xml</string>
514 <key>patterns</key>
515 <array>
516 <dict>
517 <key>include</key>
518 <string>#entity</string>
519 </dict>
520 <dict>
521 <key>include</key>
522 <string>#bare-ampersand</string>
523 </dict>
524 </array>
525 </dict>
526 <key>tagStuff</key>
527 <dict>
528 <key>patterns</key>
529 <array>
530 <dict>
531 <key>captures</key>
532 <dict>
533 <key>1</key>
534 <dict>
535 <key>name</key>
536 <string>entity.other.attribute-name.namespace.xml</string>
537 </dict>
538 <key>2</key>
539 <dict>
540 <key>name</key>
541 <string>entity.other.attribute-name.xml</string>
542 </dict>
543 <key>3</key>
544 <dict>
545 <key>name</key>
546 <string>punctuation.separator.namespace.xml</string>
547 </dict>
548 <key>4</key>
549 <dict>
550 <key>name</key>
551 <string>entity.other.attribute-name.localname.xml</string>
552 </dict>
553 </dict>
554 <key>match</key>
555 <string> (?:([-_a-zA-Z0-9]+)((:)))?([-_a-zA-Z0-9]+)=</string>
556 </dict>
557 <dict>
558 <key>include</key>
559 <string>#doublequotedString</string>
560 </dict>
561 <dict>
562 <key>include</key>
563 <string>#singlequotedString</string>
564 </dict>
565 </array>
566 </dict>
567 </dict>
568 <key>scopeName</key>
569 <string>text.xml</string>
570 <key>uuid</key>
571 <string>D3C4E6DA-6B1C-11D9-8CC2-000D93589AF6</string>
572</dict>
573</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/yaml.plist created+1164
......@@ -0,0 +1,1164 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>fileTypes</key>
6 <array>
7 <string>yaml</string>
8 <string>yml</string>
9 <string>rviz</string>
10 <string>reek</string>
11 <string>clang-format</string>
12 <string>yaml-tmlanguage</string>
13 <string>syntax</string>
14 <string>sublime-syntax</string>
15 </array>
16 <key>firstLineMatch</key>
17 <string>^%YAML( ?1.\d+)?</string>
18 <key>keyEquivalent</key>
19 <string>^~Y</string>
20 <key>name</key>
21 <string>YAML</string>
22 <key>patterns</key>
23 <array>
24 <dict>
25 <key>include</key>
26 <string>#comment</string>
27 </dict>
28 <dict>
29 <key>include</key>
30 <string>#property</string>
31 </dict>
32 <dict>
33 <key>include</key>
34 <string>#directive</string>
35 </dict>
36 <dict>
37 <key>match</key>
38 <string>^---</string>
39 <key>name</key>
40 <string>entity.other.document.begin.yaml</string>
41 </dict>
42 <dict>
43 <key>match</key>
44 <string>^\.{3}</string>
45 <key>name</key>
46 <string>entity.other.document.end.yaml</string>
47 </dict>
48 <dict>
49 <key>include</key>
50 <string>#node</string>
51 </dict>
52 </array>
53 <key>repository</key>
54 <dict>
55 <key>block-collection</key>
56 <dict>
57 <key>patterns</key>
58 <array>
59 <dict>
60 <key>include</key>
61 <string>#block-sequence</string>
62 </dict>
63 <dict>
64 <key>include</key>
65 <string>#block-mapping</string>
66 </dict>
67 </array>
68 </dict>
69 <key>block-mapping</key>
70 <dict>
71 <key>patterns</key>
72 <array>
73 <dict>
74 <key>include</key>
75 <string>#block-pair</string>
76 </dict>
77 </array>
78 </dict>
79 <key>block-node</key>
80 <dict>
81 <key>patterns</key>
82 <array>
83 <dict>
84 <key>include</key>
85 <string>#prototype</string>
86 </dict>
87 <dict>
88 <key>include</key>
89 <string>#block-scalar</string>
90 </dict>
91 <dict>
92 <key>include</key>
93 <string>#block-collection</string>
94 </dict>
95 <dict>
96 <key>include</key>
97 <string>#flow-scalar-plain-out</string>
98 </dict>
99 <dict>
100 <key>include</key>
101 <string>#flow-node</string>
102 </dict>
103 </array>
104 </dict>
105 <key>block-pair</key>
106 <dict>
107 <key>patterns</key>
108 <array>
109 <dict>
110 <key>begin</key>
111 <string>\?</string>
112 <key>beginCaptures</key>
113 <dict>
114 <key>1</key>
115 <dict>
116 <key>name</key>
117 <string>punctuation.definition.key-value.begin.yaml</string>
118 </dict>
119 </dict>
120 <key>end</key>
121 <string>(?=\?)|^ *(:)|(:)</string>
122 <key>endCaptures</key>
123 <dict>
124 <key>1</key>
125 <dict>
126 <key>name</key>
127 <string>punctuation.separator.key-value.mapping.yaml</string>
128 </dict>
129 <key>2</key>
130 <dict>
131 <key>name</key>
132 <string>invalid.illegal.expected-newline.yaml</string>
133 </dict>
134 </dict>
135 <key>name</key>
136 <string>meta.block-mapping.yaml</string>
137 <key>patterns</key>
138 <array>
139 <dict>
140 <key>include</key>
141 <string>#block-node</string>
142 </dict>
143 </array>
144 </dict>
145 <dict>
146 <key>begin</key>
147 <string>(?x)
148 (?=
149 (?x:
150 [^\s[-?:,\[\]{}#&amp;*!|&gt;'"%@`]]
151 | [?:-] \S
152 )
153 (
154 [^\s:]
155 | : \S
156 | \s+ (?![#\s])
157 )*
158 \s*
159 :
160 (\s|$)
161 )
162 </string>
163 <key>end</key>
164 <string>(?x)
165 (?=
166 \s* $
167 | \s+ \#
168 | \s* : (\s|$)
169 )
170 </string>
171 <key>patterns</key>
172 <array>
173 <dict>
174 <key>include</key>
175 <string>#flow-scalar-plain-out-implicit-type</string>
176 </dict>
177 <dict>
178 <key>begin</key>
179 <string>(?x)
180 [^\s[-?:,\[\]{}#&amp;*!|&gt;'"%@`]]
181 | [?:-] \S
182 </string>
183 <key>beginCaptures</key>
184 <dict>
185 <key>0</key>
186 <dict>
187 <key>name</key>
188 <string>entity.name.tag.yaml</string>
189 </dict>
190 </dict>
191 <key>contentName</key>
192 <string>entity.name.tag.yaml</string>
193 <key>end</key>
194 <string>(?x)
195 (?=
196 \s* $
197 | \s+ \#
198 | \s* : (\s|$)
199 )
200 </string>
201 <key>name</key>
202 <string>string.unquoted.plain.out.yaml</string>
203 </dict>
204 </array>
205 </dict>
206 <dict>
207 <key>match</key>
208 <string>:(?=\s|$)</string>
209 <key>name</key>
210 <string>punctuation.separator.key-value.mapping.yaml</string>
211 </dict>
212 </array>
213 </dict>
214 <key>block-scalar</key>
215 <dict>
216 <key>begin</key>
217 <string>(?:(\|)|(&gt;))([1-9])?([-+])?(.*\n?)</string>
218 <key>beginCaptures</key>
219 <dict>
220 <key>1</key>
221 <dict>
222 <key>name</key>
223 <string>keyword.control.flow.block-scalar.literal.yaml</string>
224 </dict>
225 <key>2</key>
226 <dict>
227 <key>name</key>
228 <string>keyword.control.flow.block-scalar.folded.yaml</string>
229 </dict>
230 <key>3</key>
231 <dict>
232 <key>name</key>
233 <string>constant.numeric.indentation-indicator.yaml</string>
234 </dict>
235 <key>4</key>
236 <dict>
237 <key>name</key>
238 <string>storage.modifier.chomping-indicator.yaml</string>
239 </dict>
240 <key>5</key>
241 <dict>
242 <key>patterns</key>
243 <array>
244 <dict>
245 <key>include</key>
246 <string>#comment</string>
247 </dict>
248 <dict>
249 <key>match</key>
250 <string>.+</string>
251 <key>name</key>
252 <string>invalid.illegal.expected-comment-or-newline.yaml</string>
253 </dict>
254 </array>
255 </dict>
256 </dict>
257 <key>end</key>
258 <string>^(?=\S)|(?!\G)</string>
259 <key>patterns</key>
260 <array>
261 <dict>
262 <key>begin</key>
263 <string>^([ ]+)(?! )</string>
264 <key>end</key>
265 <string>^(?!\1|\s*$)</string>
266 <key>name</key>
267 <string>string.unquoted.block.yaml</string>
268 </dict>
269 </array>
270 </dict>
271 <key>block-sequence</key>
272 <dict>
273 <key>match</key>
274 <string>(-)(?!\S)</string>
275 <key>name</key>
276 <string>punctuation.definition.block.sequence.item.yaml</string>
277 </dict>
278 <key>comment</key>
279 <dict>
280 <key>begin</key>
281 <string>(?:(^[ \t]*)|[ \t]+)(?=#\p{Print}*$)</string>
282 <key>beginCaptures</key>
283 <dict>
284 <key>1</key>
285 <dict>
286 <key>name</key>
287 <string>punctuation.whitespace.comment.leading.yaml</string>
288 </dict>
289 </dict>
290 <key>end</key>
291 <string>(?!\G)</string>
292 <key>patterns</key>
293 <array>
294 <dict>
295 <key>begin</key>
296 <string>#</string>
297 <key>beginCaptures</key>
298 <dict>
299 <key>0</key>
300 <dict>
301 <key>name</key>
302 <string>punctuation.definition.comment.yaml</string>
303 </dict>
304 </dict>
305 <key>end</key>
306 <string>\n</string>
307 <key>name</key>
308 <string>comment.line.number-sign.yaml</string>
309 </dict>
310 </array>
311 </dict>
312 <key>directive</key>
313 <dict>
314 <key>begin</key>
315 <string>^%</string>
316 <key>beginCaptures</key>
317 <dict>
318 <key>0</key>
319 <dict>
320 <key>name</key>
321 <string>punctuation.definition.directive.begin.yaml</string>
322 </dict>
323 </dict>
324 <key>end</key>
325 <string>(?=$|[ \t]+($|#))</string>
326 <key>name</key>
327 <string>meta.directive.yaml</string>
328 <key>patterns</key>
329 <array>
330 <dict>
331 <key>captures</key>
332 <dict>
333 <key>1</key>
334 <dict>
335 <key>name</key>
336 <string>keyword.other.directive.yaml.yaml</string>
337 </dict>
338 <key>2</key>
339 <dict>
340 <key>name</key>
341 <string>constant.numeric.yaml-version.yaml</string>
342 </dict>
343 </dict>
344 <key>match</key>
345 <string>\G(YAML)[ \t]+(\d+\.\d+)</string>
346 </dict>
347 <dict>
348 <key>captures</key>
349 <dict>
350 <key>1</key>
351 <dict>
352 <key>name</key>
353 <string>keyword.other.directive.tag.yaml</string>
354 </dict>
355 <key>2</key>
356 <dict>
357 <key>name</key>
358 <string>storage.type.tag-handle.yaml</string>
359 </dict>
360 <key>3</key>
361 <dict>
362 <key>name</key>
363 <string>support.type.tag-prefix.yaml</string>
364 </dict>
365 </dict>
366 <key>match</key>
367 <string>(?x)
368 \G
369 (TAG)
370 (?:[ \t]+
371 ((?:!(?:[0-9A-Za-z\-]*!)?))
372 (?:[ \t]+ (
373 ! (?x: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&amp;=+$,_.!~*'()\[\]] )*
374 | (?![,!\[\]{}]) (?x: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&amp;=+$,_.!~*'()\[\]] )+
375 )
376 )?
377 )?
378 </string>
379 </dict>
380 <dict>
381 <key>captures</key>
382 <dict>
383 <key>1</key>
384 <dict>
385 <key>name</key>
386 <string>support.other.directive.reserved.yaml</string>
387 </dict>
388 <key>2</key>
389 <dict>
390 <key>name</key>
391 <string>string.unquoted.directive-name.yaml</string>
392 </dict>
393 <key>3</key>
394 <dict>
395 <key>name</key>
396 <string>string.unquoted.directive-parameter.yaml</string>
397 </dict>
398 </dict>
399 <key>match</key>
400 <string>(?x) \G (\w+) (?:[ \t]+ (\w+) (?:[ \t]+ (\w+))? )?</string>
401 </dict>
402 <dict>
403 <key>match</key>
404 <string>\S+</string>
405 <key>name</key>
406 <string>invalid.illegal.unrecognized.yaml</string>
407 </dict>
408 </array>
409 </dict>
410 <key>flow-alias</key>
411 <dict>
412 <key>captures</key>
413 <dict>
414 <key>1</key>
415 <dict>
416 <key>name</key>
417 <string>keyword.control.flow.alias.yaml</string>
418 </dict>
419 <key>2</key>
420 <dict>
421 <key>name</key>
422 <string>punctuation.definition.alias.yaml</string>
423 </dict>
424 <key>3</key>
425 <dict>
426 <key>name</key>
427 <string>variable.other.alias.yaml</string>
428 </dict>
429 <key>4</key>
430 <dict>
431 <key>name</key>
432 <string>invalid.illegal.character.anchor.yaml</string>
433 </dict>
434 </dict>
435 <key>match</key>
436 <string>((\*))([^\s\[\]/{/},]+)([^\s\]},]\S*)?</string>
437 </dict>
438 <key>flow-collection</key>
439 <dict>
440 <key>patterns</key>
441 <array>
442 <dict>
443 <key>include</key>
444 <string>#flow-sequence</string>
445 </dict>
446 <dict>
447 <key>include</key>
448 <string>#flow-mapping</string>
449 </dict>
450 </array>
451 </dict>
452 <key>flow-mapping</key>
453 <dict>
454 <key>begin</key>
455 <string>\{</string>
456 <key>beginCaptures</key>
457 <dict>
458 <key>0</key>
459 <dict>
460 <key>name</key>
461 <string>punctuation.definition.mapping.begin.yaml</string>
462 </dict>
463 </dict>
464 <key>end</key>
465 <string>\}</string>
466 <key>endCaptures</key>
467 <dict>
468 <key>0</key>
469 <dict>
470 <key>name</key>
471 <string>punctuation.definition.mapping.end.yaml</string>
472 </dict>
473 </dict>
474 <key>name</key>
475 <string>meta.flow-mapping.yaml</string>
476 <key>patterns</key>
477 <array>
478 <dict>
479 <key>include</key>
480 <string>#prototype</string>
481 </dict>
482 <dict>
483 <key>match</key>
484 <string>,</string>
485 <key>name</key>
486 <string>punctuation.separator.mapping.yaml</string>
487 </dict>
488 <dict>
489 <key>include</key>
490 <string>#flow-pair</string>
491 </dict>
492 </array>
493 </dict>
494 <key>flow-node</key>
495 <dict>
496 <key>patterns</key>
497 <array>
498 <dict>
499 <key>include</key>
500 <string>#prototype</string>
501 </dict>
502 <dict>
503 <key>include</key>
504 <string>#flow-alias</string>
505 </dict>
506 <dict>
507 <key>include</key>
508 <string>#flow-collection</string>
509 </dict>
510 <dict>
511 <key>include</key>
512 <string>#flow-scalar</string>
513 </dict>
514 </array>
515 </dict>
516 <key>flow-pair</key>
517 <dict>
518 <key>patterns</key>
519 <array>
520 <dict>
521 <key>begin</key>
522 <string>\?</string>
523 <key>beginCaptures</key>
524 <dict>
525 <key>0</key>
526 <dict>
527 <key>name</key>
528 <string>punctuation.definition.key-value.begin.yaml</string>
529 </dict>
530 </dict>
531 <key>end</key>
532 <string>(?=[},\]])</string>
533 <key>name</key>
534 <string>meta.flow-pair.explicit.yaml</string>
535 <key>patterns</key>
536 <array>
537 <dict>
538 <key>include</key>
539 <string>#prototype</string>
540 </dict>
541 <dict>
542 <key>include</key>
543 <string>#flow-pair</string>
544 </dict>
545 <dict>
546 <key>include</key>
547 <string>#flow-node</string>
548 </dict>
549 <dict>
550 <key>begin</key>
551 <string>:(?=\s|$|[\[\]{},])</string>
552 <key>beginCaptures</key>
553 <dict>
554 <key>0</key>
555 <dict>
556 <key>name</key>
557 <string>punctuation.separator.key-value.mapping.yaml</string>
558 </dict>
559 </dict>
560 <key>end</key>
561 <string>(?=[},\]])</string>
562 <key>patterns</key>
563 <array>
564 <dict>
565 <key>include</key>
566 <string>#flow-value</string>
567 </dict>
568 </array>
569 </dict>
570 </array>
571 </dict>
572 <dict>
573 <key>begin</key>
574 <string>(?x)
575 (?=
576 (?:
577 [^\s[-?:,\[\]{}#&amp;*!|&gt;'"%@`]]
578 | [?:-] [^\s[\[\]{},]]
579 )
580 (
581 [^\s:[\[\]{},]]
582 | : [^\s[\[\]{},]]
583 | \s+ (?![#\s])
584 )*
585 \s*
586 :
587 (\s|$)
588 )
589 </string>
590 <key>end</key>
591 <string>(?x)
592 (?=
593 \s* $
594 | \s+ \#
595 | \s* : (\s|$)
596 | \s* : [\[\]{},]
597 | \s* [\[\]{},]
598 )
599 </string>
600 <key>name</key>
601 <string>meta.flow-pair.key.yaml</string>
602 <key>patterns</key>
603 <array>
604 <dict>
605 <key>include</key>
606 <string>#flow-scalar-plain-in-implicit-type</string>
607 </dict>
608 <dict>
609 <key>begin</key>
610 <string>(?x)
611 [^\s[-?:,\[\]{}#&amp;*!|&gt;'"%@`]]
612 | [?:-] [^\s[\[\]{},]]
613 </string>
614 <key>beginCaptures</key>
615 <dict>
616 <key>0</key>
617 <dict>
618 <key>name</key>
619 <string>entity.name.tag.yaml</string>
620 </dict>
621 </dict>
622 <key>contentName</key>
623 <string>entity.name.tag.yaml</string>
624 <key>end</key>
625 <string>(?x)
626 (?=
627 \s* $
628 | \s+ \#
629 | \s* : (\s|$)
630 | \s* : [\[\]{},]
631 | \s* [\[\]{},]
632 )
633 </string>
634 <key>name</key>
635 <string>string.unquoted.plain.in.yaml</string>
636 </dict>
637 </array>
638 </dict>
639 <dict>
640 <key>include</key>
641 <string>#flow-node</string>
642 </dict>
643 <dict>
644 <key>begin</key>
645 <string>:(?=\s|$|[\[\]{},])</string>
646 <key>captures</key>
647 <dict>
648 <key>0</key>
649 <dict>
650 <key>name</key>
651 <string>punctuation.separator.key-value.mapping.yaml</string>
652 </dict>
653 </dict>
654 <key>end</key>
655 <string>(?=[},\]])</string>
656 <key>name</key>
657 <string>meta.flow-pair.yaml</string>
658 <key>patterns</key>
659 <array>
660 <dict>
661 <key>include</key>
662 <string>#flow-value</string>
663 </dict>
664 </array>
665 </dict>
666 </array>
667 </dict>
668 <key>flow-scalar</key>
669 <dict>
670 <key>patterns</key>
671 <array>
672 <dict>
673 <key>include</key>
674 <string>#flow-scalar-double-quoted</string>
675 </dict>
676 <dict>
677 <key>include</key>
678 <string>#flow-scalar-single-quoted</string>
679 </dict>
680 <dict>
681 <key>include</key>
682 <string>#flow-scalar-plain-in</string>
683 </dict>
684 </array>
685 </dict>
686 <key>flow-scalar-double-quoted</key>
687 <dict>
688 <key>begin</key>
689 <string>"</string>
690 <key>beginCaptures</key>
691 <dict>
692 <key>0</key>
693 <dict>
694 <key>name</key>
695 <string>punctuation.definition.string.begin.yaml</string>
696 </dict>
697 </dict>
698 <key>end</key>
699 <string>"</string>
700 <key>endCaptures</key>
701 <dict>
702 <key>0</key>
703 <dict>
704 <key>name</key>
705 <string>punctuation.definition.string.end.yaml</string>
706 </dict>
707 </dict>
708 <key>name</key>
709 <string>string.quoted.double.yaml</string>
710 <key>patterns</key>
711 <array>
712 <dict>
713 <key>match</key>
714 <string>\\([0abtnvfre "/\\N_Lp]|x\d\d|u\d{4}|U\d{8})</string>
715 <key>name</key>
716 <string>constant.character.escape.yaml</string>
717 </dict>
718 <dict>
719 <key>match</key>
720 <string>\\\n</string>
721 <key>name</key>
722 <string>constant.character.escape.double-quoted.newline.yaml</string>
723 </dict>
724 </array>
725 </dict>
726 <key>flow-scalar-plain-in</key>
727 <dict>
728 <key>patterns</key>
729 <array>
730 <dict>
731 <key>include</key>
732 <string>#flow-scalar-plain-in-implicit-type</string>
733 </dict>
734 <dict>
735 <key>begin</key>
736 <string>(?x)
737 [^\s[-?:,\[\]{}#&amp;*!|&gt;'"%@`]]
738 | [?:-] [^\s[\[\]{},]]
739 </string>
740 <key>end</key>
741 <string>(?x)
742 (?=
743 \s* $
744 | \s+ \#
745 | \s* : (\s|$)
746 | \s* : [\[\]{},]
747 | \s* [\[\]{},]
748 )
749 </string>
750 <key>name</key>
751 <string>string.unquoted.plain.in.yaml</string>
752 </dict>
753 </array>
754 </dict>
755 <key>flow-scalar-plain-in-implicit-type</key>
756 <dict>
757 <key>patterns</key>
758 <array>
759 <dict>
760 <key>captures</key>
761 <dict>
762 <key>1</key>
763 <dict>
764 <key>name</key>
765 <string>constant.language.null.yaml</string>
766 </dict>
767 <key>2</key>
768 <dict>
769 <key>name</key>
770 <string>constant.language.boolean.yaml</string>
771 </dict>
772 <key>3</key>
773 <dict>
774 <key>name</key>
775 <string>constant.numeric.integer.yaml</string>
776 </dict>
777 <key>4</key>
778 <dict>
779 <key>name</key>
780 <string>constant.numeric.float.yaml</string>
781 </dict>
782 <key>5</key>
783 <dict>
784 <key>name</key>
785 <string>constant.other.timestamp.yaml</string>
786 </dict>
787 <key>6</key>
788 <dict>
789 <key>name</key>
790 <string>constant.language.value.yaml</string>
791 </dict>
792 <key>7</key>
793 <dict>
794 <key>name</key>
795 <string>constant.language.merge.yaml</string>
796 </dict>
797 </dict>
798 <key>match</key>
799 <string>(?x)
800 (?x:
801 (null|Null|NULL|~)
802 | (y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)
803 | (
804 (?:
805 [-+]? 0b [0-1_]+ # (base 2)
806 | [-+]? 0 [0-7_]+ # (base 8)
807 | [-+]? (?: 0|[1-9][0-9_]*) # (base 10)
808 | [-+]? 0x [0-9a-fA-F_]+ # (base 16)
809 | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60)
810 )
811 )
812 | (
813 (?x:
814 [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10)
815 | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60)
816 | [-+]? \. (?: inf|Inf|INF) # (infinity)
817 | \. (?: nan|NaN|NAN) # (not a number)
818 )
819 )
820 | (
821 (?x:
822 \d{4} - \d{2} - \d{2} # (y-m-d)
823 | \d{4} # (year)
824 - \d{1,2} # (month)
825 - \d{1,2} # (day)
826 (?: [Tt] | [ \t]+) \d{1,2} # (hour)
827 : \d{2} # (minute)
828 : \d{2} # (second)
829 (?: \.\d*)? # (fraction)
830 (?:
831 (?:[ \t]*) Z
832 | [-+] \d{1,2} (?: :\d{1,2})?
833 )? # (time zone)
834 )
835 )
836 | (=)
837 | (&lt;&lt;)
838 )
839 (?:
840 (?=
841 \s* $
842 | \s+ \#
843 | \s* : (\s|$)
844 | \s* : [\[\]{},]
845 | \s* [\[\]{},]
846 )
847 )
848 </string>
849 </dict>
850 </array>
851 </dict>
852 <key>flow-scalar-plain-out</key>
853 <dict>
854 <key>patterns</key>
855 <array>
856 <dict>
857 <key>include</key>
858 <string>#flow-scalar-plain-out-implicit-type</string>
859 </dict>
860 <dict>
861 <key>begin</key>
862 <string>(?x)
863 [^\s[-?:,\[\]{}#&amp;*!|&gt;'"%@`]]
864 | [?:-] \S
865 </string>
866 <key>end</key>
867 <string>(?x)
868 (?=
869 \s* $
870 | \s+ \#
871 | \s* : (\s|$)
872 )
873 </string>
874 <key>name</key>
875 <string>string.unquoted.plain.out.yaml</string>
876 </dict>
877 </array>
878 </dict>
879 <key>flow-scalar-plain-out-implicit-type</key>
880 <dict>
881 <key>patterns</key>
882 <array>
883 <dict>
884 <key>captures</key>
885 <dict>
886 <key>1</key>
887 <dict>
888 <key>name</key>
889 <string>constant.language.null.yaml</string>
890 </dict>
891 <key>2</key>
892 <dict>
893 <key>name</key>
894 <string>constant.language.boolean.yaml</string>
895 </dict>
896 <key>3</key>
897 <dict>
898 <key>name</key>
899 <string>constant.numeric.integer.yaml</string>
900 </dict>
901 <key>4</key>
902 <dict>
903 <key>name</key>
904 <string>constant.numeric.float.yaml</string>
905 </dict>
906 <key>5</key>
907 <dict>
908 <key>name</key>
909 <string>constant.other.timestamp.yaml</string>
910 </dict>
911 <key>6</key>
912 <dict>
913 <key>name</key>
914 <string>constant.language.value.yaml</string>
915 </dict>
916 <key>7</key>
917 <dict>
918 <key>name</key>
919 <string>constant.language.merge.yaml</string>
920 </dict>
921 </dict>
922 <key>match</key>
923 <string>(?x)
924 (?x:
925 (null|Null|NULL|~)
926 | (y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)
927 | (
928 (?:
929 [-+]? 0b [0-1_]+ # (base 2)
930 | [-+]? 0 [0-7_]+ # (base 8)
931 | [-+]? (?: 0|[1-9][0-9_]*) # (base 10)
932 | [-+]? 0x [0-9a-fA-F_]+ # (base 16)
933 | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60)
934 )
935 )
936 | (
937 (?x:
938 [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10)
939 | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60)
940 | [-+]? \. (?: inf|Inf|INF) # (infinity)
941 | \. (?: nan|NaN|NAN) # (not a number)
942 )
943 )
944 | (
945 (?x:
946 \d{4} - \d{2} - \d{2} # (y-m-d)
947 | \d{4} # (year)
948 - \d{1,2} # (month)
949 - \d{1,2} # (day)
950 (?: [Tt] | [ \t]+) \d{1,2} # (hour)
951 : \d{2} # (minute)
952 : \d{2} # (second)
953 (?: \.\d*)? # (fraction)
954 (?:
955 (?:[ \t]*) Z
956 | [-+] \d{1,2} (?: :\d{1,2})?
957 )? # (time zone)
958 )
959 )
960 | (=)
961 | (&lt;&lt;)
962 )
963 (?x:
964 (?=
965 \s* $
966 | \s+ \#
967 | \s* : (\s|$)
968 )
969 )
970 </string>
971 </dict>
972 </array>
973 </dict>
974 <key>flow-scalar-single-quoted</key>
975 <dict>
976 <key>begin</key>
977 <string>'</string>
978 <key>beginCaptures</key>
979 <dict>
980 <key>0</key>
981 <dict>
982 <key>name</key>
983 <string>punctuation.definition.string.begin.yaml</string>
984 </dict>
985 </dict>
986 <key>end</key>
987 <string>'(?!')</string>
988 <key>endCaptures</key>
989 <dict>
990 <key>0</key>
991 <dict>
992 <key>name</key>
993 <string>punctuation.definition.string.end.yaml</string>
994 </dict>
995 </dict>
996 <key>name</key>
997 <string>string.quoted.single.yaml</string>
998 <key>patterns</key>
999 <array>
1000 <dict>
1001 <key>match</key>
1002 <string>''</string>
1003 <key>name</key>
1004 <string>constant.character.escape.single-quoted.yaml</string>
1005 </dict>
1006 </array>
1007 </dict>
1008 <key>flow-sequence</key>
1009 <dict>
1010 <key>begin</key>
1011 <string>\[</string>
1012 <key>beginCaptures</key>
1013 <dict>
1014 <key>0</key>
1015 <dict>
1016 <key>name</key>
1017 <string>punctuation.definition.sequence.begin.yaml</string>
1018 </dict>
1019 </dict>
1020 <key>end</key>
1021 <string>\]</string>
1022 <key>endCaptures</key>
1023 <dict>
1024 <key>0</key>
1025 <dict>
1026 <key>name</key>
1027 <string>punctuation.definition.sequence.end.yaml</string>
1028 </dict>
1029 </dict>
1030 <key>name</key>
1031 <string>meta.flow-sequence.yaml</string>
1032 <key>patterns</key>
1033 <array>
1034 <dict>
1035 <key>include</key>
1036 <string>#prototype</string>
1037 </dict>
1038 <dict>
1039 <key>match</key>
1040 <string>,</string>
1041 <key>name</key>
1042 <string>punctuation.separator.sequence.yaml</string>
1043 </dict>
1044 <dict>
1045 <key>include</key>
1046 <string>#flow-pair</string>
1047 </dict>
1048 <dict>
1049 <key>include</key>
1050 <string>#flow-node</string>
1051 </dict>
1052 </array>
1053 </dict>
1054 <key>flow-value</key>
1055 <dict>
1056 <key>patterns</key>
1057 <array>
1058 <dict>
1059 <key>begin</key>
1060 <string>\G(?![},\]])</string>
1061 <key>end</key>
1062 <string>(?=[},\]])</string>
1063 <key>name</key>
1064 <string>meta.flow-pair.value.yaml</string>
1065 <key>patterns</key>
1066 <array>
1067 <dict>
1068 <key>include</key>
1069 <string>#flow-node</string>
1070 </dict>
1071 </array>
1072 </dict>
1073 </array>
1074 </dict>
1075 <key>node</key>
1076 <dict>
1077 <key>patterns</key>
1078 <array>
1079 <dict>
1080 <key>include</key>
1081 <string>#block-node</string>
1082 </dict>
1083 </array>
1084 </dict>
1085 <key>property</key>
1086 <dict>
1087 <key>begin</key>
1088 <string>(?=!|&amp;)</string>
1089 <key>end</key>
1090 <string>(?!\G)</string>
1091 <key>name</key>
1092 <string>meta.property.yaml</string>
1093 <key>patterns</key>
1094 <array>
1095 <dict>
1096 <key>captures</key>
1097 <dict>
1098 <key>1</key>
1099 <dict>
1100 <key>name</key>
1101 <string>keyword.control.property.anchor.yaml</string>
1102 </dict>
1103 <key>2</key>
1104 <dict>
1105 <key>name</key>
1106 <string>punctuation.definition.anchor.yaml</string>
1107 </dict>
1108 <key>3</key>
1109 <dict>
1110 <key>name</key>
1111 <string>entity.name.type.anchor.yaml</string>
1112 </dict>
1113 <key>4</key>
1114 <dict>
1115 <key>name</key>
1116 <string>invalid.illegal.character.anchor.yaml</string>
1117 </dict>
1118 </dict>
1119 <key>match</key>
1120 <string>\G((&amp;))([^\s\[\]/{/},]+)(\S+)?</string>
1121 </dict>
1122 <dict>
1123 <key>match</key>
1124 <string>(?x)
1125 \G
1126 (?:
1127 ! &lt; (?: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&amp;=+$,_.!~*'()\[\]] )+ &gt;
1128 | (?:!(?:[0-9A-Za-z\-]*!)?) (?: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&amp;=+$_.~*'()] )+
1129 | !
1130 )
1131 (?=\ |\t|$)
1132 </string>
1133 <key>name</key>
1134 <string>storage.type.tag-handle.yaml</string>
1135 </dict>
1136 <dict>
1137 <key>match</key>
1138 <string>\S+</string>
1139 <key>name</key>
1140 <string>invalid.illegal.tag-handle.yaml</string>
1141 </dict>
1142 </array>
1143 </dict>
1144 <key>prototype</key>
1145 <dict>
1146 <key>patterns</key>
1147 <array>
1148 <dict>
1149 <key>include</key>
1150 <string>#comment</string>
1151 </dict>
1152 <dict>
1153 <key>include</key>
1154 <string>#property</string>
1155 </dict>
1156 </array>
1157 </dict>
1158 </dict>
1159 <key>scopeName</key>
1160 <string>source.yaml</string>
1161 <key>uuid</key>
1162 <string>686AD6AE-33F3-4493-9512-9E9FC1D5417F</string>
1163</dict>
1164</plist>
\ No newline at end of file
src/file-viewer/highlight-grammar/zig.plist created+846
......@@ -0,0 +1,846 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>fileTypes</key>
6 <array>
7 <string>zig</string>
8 </array>
9 <key>keyEquivalent</key>
10 <string>^~Z</string>
11 <key>name</key>
12 <string>Zig</string>
13 <key>patterns</key>
14 <array>
15 <dict>
16 <key>include</key>
17 <string>#dummy_main</string>
18 </dict>
19 </array>
20 <key>repository</key>
21 <dict>
22 <key>block</key>
23 <dict>
24 <key>begin</key>
25 <string>([a-zA-Z_][\w.]*|@\".+\")?\s*(\{)</string>
26 <key>beginCaptures</key>
27 <dict>
28 <key>1</key>
29 <dict>
30 <key>name</key>
31 <string>storage.type.zig</string>
32 </dict>
33 <key>2</key>
34 <dict>
35 <key>name</key>
36 <string>punctuation.section.braces.begin.zig</string>
37 </dict>
38 </dict>
39 <key>end</key>
40 <string>(\})</string>
41 <key>endCaptures</key>
42 <dict>
43 <key>1</key>
44 <dict>
45 <key>name</key>
46 <string>punctuation.section.braces.end.zig</string>
47 </dict>
48 </dict>
49 <key>patterns</key>
50 <array>
51 <dict>
52 <key>include</key>
53 <string>#dummy_main</string>
54 </dict>
55 </array>
56 </dict>
57 <key>character_escapes</key>
58 <dict>
59 <key>patterns</key>
60 <array>
61 <dict>
62 <key>match</key>
63 <string>\\n</string>
64 <key>name</key>
65 <string>constant.character.escape.newline.zig</string>
66 </dict>
67 <dict>
68 <key>match</key>
69 <string>\\r</string>
70 <key>name</key>
71 <string>constant.character.escape.carrigereturn.zig</string>
72 </dict>
73 <dict>
74 <key>match</key>
75 <string>\\t</string>
76 <key>name</key>
77 <string>constant.character.escape.tabulator.zig</string>
78 </dict>
79 <dict>
80 <key>match</key>
81 <string>\\\\</string>
82 <key>name</key>
83 <string>constant.character.escape.backslash.zig</string>
84 </dict>
85 <dict>
86 <key>match</key>
87 <string>\\'</string>
88 <key>name</key>
89 <string>constant.character.escape.single-quote.zig</string>
90 </dict>
91 <dict>
92 <key>match</key>
93 <string>\\\"</string>
94 <key>name</key>
95 <string>constant.character.escape.double-quote.zig</string>
96 </dict>
97 <dict>
98 <key>match</key>
99 <string>\\x[a-fA-F\d]{2}</string>
100 <key>name</key>
101 <string>constant.character.escape.hexidecimal.zig</string>
102 </dict>
103 <dict>
104 <key>match</key>
105 <string>\\u\{[a-fA-F\d]{1,6}\}</string>
106 <key>name</key>
107 <string>constant.character.escape.hexidecimal.zig</string>
108 </dict>
109 </array>
110 </dict>
111 <key>comments</key>
112 <dict>
113 <key>patterns</key>
114 <array>
115 <dict>
116 <key>begin</key>
117 <string>///</string>
118 <key>end</key>
119 <string>$\n?</string>
120 <key>name</key>
121 <string>comment.line.documentation.zig</string>
122 </dict>
123 <dict>
124 <key>begin</key>
125 <string>//[^/]\s*TODO</string>
126 <key>end</key>
127 <string>$\n?</string>
128 <key>name</key>
129 <string>comment.line.todo.zig</string>
130 </dict>
131 <dict>
132 <key>begin</key>
133 <string>//[^/]*</string>
134 <key>end</key>
135 <string>$\n?</string>
136 <key>name</key>
137 <string>comment.line.zig</string>
138 </dict>
139 </array>
140 </dict>
141 <key>constants</key>
142 <dict>
143 <key>patterns</key>
144 <array>
145 <dict>
146 <key>match</key>
147 <string>\b(null|undefined|true|false)\b</string>
148 <key>name</key>
149 <string>constant.language.zig</string>
150 </dict>
151 <dict>
152 <key>match</key>
153 <string>\b(?&lt;!\.)(-?[\d_]+)(?!\.)\b</string>
154 <key>name</key>
155 <string>constant.numeric.integer.zig</string>
156 </dict>
157 <dict>
158 <key>match</key>
159 <string>\b(?&lt;!\.)(0x[a-fA-F\d_]+)(?!\.)\b</string>
160 <key>name</key>
161 <string>constant.numeric.integer.hexadecimal.zig</string>
162 </dict>
163 <dict>
164 <key>match</key>
165 <string>\b(?&lt;!\.)(0o[0-7_]+)(?!\.)\b</string>
166 <key>name</key>
167 <string>constant.numeric.integer.octal.zig</string>
168 </dict>
169 <dict>
170 <key>match</key>
171 <string>\b(?&lt;!\.)(0b[01_]+)(?!\.)\b</string>
172 <key>name</key>
173 <string>constant.numeric.integer.binary.zig</string>
174 </dict>
175 <dict>
176 <key>match</key>
177 <string>(?&lt;!\.)(-?\b[\d_]+(?:\.[\d_]+)?(?:[eE][+-]?[\d_]+)?)(?!\.)\b</string>
178 <key>name</key>
179 <string>constant.numeric.float.zig</string>
180 </dict>
181 <dict>
182 <key>match</key>
183 <string>(?&lt;!\.)(-?\b0x[a-fA-F\d_]+(?:\.[a-fA-F\d_]+)?[pP]?(?:[+-]?[\d_]+)?)(?!\.)\b</string>
184 <key>name</key>
185 <string>constant.numeric.float.hexadecimal.zig</string>
186 </dict>
187 </array>
188 </dict>
189 <key>container_decl</key>
190 <dict>
191 <key>patterns</key>
192 <array>
193 <dict>
194 <key>match</key>
195 <string>\b(?!\d)([a-zA-Z_]\w*|@\".+\")?(?=\s*=\s*(?:extern|packed)?\b\s*(?:union)\s*[(\{])</string>
196 <key>name</key>
197 <string>entity.name.union.zig</string>
198 </dict>
199 <dict>
200 <key>match</key>
201 <string>\b(?!\d)([a-zA-Z_]\w*|@\".+\")?(?=\s*=\s*(?:extern|packed)?\b\s*(?:struct)\s*[(\{])</string>
202 <key>name</key>
203 <string>entity.name.struct.zig</string>
204 </dict>
205 <dict>
206 <key>match</key>
207 <string>\b(?!\d)([a-zA-Z_]\w*|@\".+\")?(?=\s*=\s*(?:extern|packed)?\b\s*(?:enum)\s*[(\{])</string>
208 <key>name</key>
209 <string>entity.name.enum.zig</string>
210 </dict>
211 <dict>
212 <key>match</key>
213 <string>\b(?!\d)([a-zA-Z_]\w*|@\".+\")?(?=\s*=\s*(?:error)\s*[(\{])</string>
214 <key>name</key>
215 <string>entity.name.error.zig</string>
216 </dict>
217 <dict>
218 <key>captures</key>
219 <dict>
220 <key>1</key>
221 <dict>
222 <key>name</key>
223 <string>storage.type.error.zig</string>
224 </dict>
225 <key>2</key>
226 <dict>
227 <key>name</key>
228 <string>punctuation.accessor.zig</string>
229 </dict>
230 <key>3</key>
231 <dict>
232 <key>name</key>
233 <string>entity.name.error.zig</string>
234 </dict>
235 </dict>
236 <key>match</key>
237 <string>\b(error)(\.)([a-zA-Z_]\w*|@\".+\")</string>
238 </dict>
239 </array>
240 </dict>
241 <key>dummy_main</key>
242 <dict>
243 <key>patterns</key>
244 <array>
245 <dict>
246 <key>include</key>
247 <string>#label</string>
248 </dict>
249 <dict>
250 <key>include</key>
251 <string>#function_type</string>
252 </dict>
253 <dict>
254 <key>include</key>
255 <string>#punctuation</string>
256 </dict>
257 <dict>
258 <key>include</key>
259 <string>#storage_modifier</string>
260 </dict>
261 <dict>
262 <key>include</key>
263 <string>#container_decl</string>
264 </dict>
265 <dict>
266 <key>include</key>
267 <string>#constants</string>
268 </dict>
269 <dict>
270 <key>include</key>
271 <string>#comments</string>
272 </dict>
273 <dict>
274 <key>include</key>
275 <string>#strings</string>
276 </dict>
277 <dict>
278 <key>include</key>
279 <string>#storage</string>
280 </dict>
281 <dict>
282 <key>include</key>
283 <string>#keywords</string>
284 </dict>
285 <dict>
286 <key>include</key>
287 <string>#operators</string>
288 </dict>
289 <dict>
290 <key>include</key>
291 <string>#support</string>
292 </dict>
293 <dict>
294 <key>include</key>
295 <string>#field_decl</string>
296 </dict>
297 <dict>
298 <key>include</key>
299 <string>#block</string>
300 </dict>
301 <dict>
302 <key>include</key>
303 <string>#function_def</string>
304 </dict>
305 <dict>
306 <key>include</key>
307 <string>#function_call</string>
308 </dict>
309 <dict>
310 <key>include</key>
311 <string>#enum_literal</string>
312 </dict>
313 </array>
314 </dict>
315 <key>enum_literal</key>
316 <dict>
317 <key>match</key>
318 <string>(?&lt;!\w|\)|\?|\}|\]|\*)(\.(?:[a-zA-Z_]\w*\b|@\"[^\"]*\"))(?!\(|\s*=[^=&gt;])</string>
319 <key>name</key>
320 <string>constant.language.enum</string>
321 </dict>
322 <key>field_decl</key>
323 <dict>
324 <key>begin</key>
325 <string>([a-zA-Z_]\w*|@\".+\")\s*(:)\s*</string>
326 <key>beginCaptures</key>
327 <dict>
328 <key>1</key>
329 <dict>
330 <key>name</key>
331 <string>variable.other.member.zig</string>
332 </dict>
333 <key>2</key>
334 <dict>
335 <key>name</key>
336 <string>punctuation.separator.zig</string>
337 </dict>
338 </dict>
339 <key>end</key>
340 <string>([a-zA-Z_][\w.]*|@\".+\")?\s*(?:(,)|(=)|$)</string>
341 <key>endCaptures</key>
342 <dict>
343 <key>1</key>
344 <dict>
345 <key>name</key>
346 <string>storage.type.zig</string>
347 </dict>
348 <key>2</key>
349 <dict>
350 <key>name</key>
351 <string>punctuation.separator.zig</string>
352 </dict>
353 <key>3</key>
354 <dict>
355 <key>name</key>
356 <string>keyword.operator.assignment.zig</string>
357 </dict>
358 </dict>
359 <key>patterns</key>
360 <array>
361 <dict>
362 <key>include</key>
363 <string>#dummy_main</string>
364 </dict>
365 </array>
366 </dict>
367 <key>function_call</key>
368 <dict>
369 <key>match</key>
370 <string>(?&lt;!fn)\b([a-zA-Z_]\w*|@\".+\")(?=\s*\()</string>
371 <key>name</key>
372 <string>variable.function.zig</string>
373 </dict>
374 <key>function_def</key>
375 <dict>
376 <key>begin</key>
377 <string>(?&lt;=fn)\s+([a-zA-Z_]\w*|@\".+\")(\()</string>
378 <key>beginCaptures</key>
379 <dict>
380 <key>1</key>
381 <dict>
382 <key>name</key>
383 <string>entity.name.function</string>
384 </dict>
385 <key>2</key>
386 <dict>
387 <key>name</key>
388 <string>punctuation.section.parens.begin.zig</string>
389 </dict>
390 </dict>
391 <key>end</key>
392 <string>(?&lt;=\)[^\)])\s*([a-zA-Z_][\w.]*|@\".+\")?(!)?\s*(?:([a-zA-Z_][\w.]*|@\".+\")\b(?!\s*\())?</string>
393 <key>endCaptures</key>
394 <dict>
395 <key>1</key>
396 <dict>
397 <key>name</key>
398 <string>storage.type.zig</string>
399 </dict>
400 <key>2</key>
401 <dict>
402 <key>name</key>
403 <string>keyword.operator.zig</string>
404 </dict>
405 <key>3</key>
406 <dict>
407 <key>name</key>
408 <string>storage.type.zig</string>
409 </dict>
410 </dict>
411 <key>patterns</key>
412 <array>
413 <dict>
414 <key>include</key>
415 <string>#label</string>
416 </dict>
417 <dict>
418 <key>include</key>
419 <string>#param_list</string>
420 </dict>
421 <dict>
422 <key>match</key>
423 <string>([a-zA-Z_][\w.]*|@\".+\")</string>
424 <key>name</key>
425 <string>storage.type.zig</string>
426 </dict>
427 <dict>
428 <key>include</key>
429 <string>#dummy_main</string>
430 </dict>
431 </array>
432 </dict>
433 <key>function_type</key>
434 <dict>
435 <key>begin</key>
436 <string>\b(fn)\s*(\()</string>
437 <key>beginCaptures</key>
438 <dict>
439 <key>1</key>
440 <dict>
441 <key>name</key>
442 <string>storage.type.function.zig</string>
443 </dict>
444 <key>2</key>
445 <dict>
446 <key>name</key>
447 <string>punctuation.section.parens.begin.zig</string>
448 </dict>
449 </dict>
450 <key>contentName</key>
451 <string>meta.function.parameters.zig</string>
452 <key>end</key>
453 <string>(?&lt;=\)|\})\s*([a-zA-Z_][\w.]*|@\".+\")?\s*(!)?\s*([a-zA-Z_][\w.]*|@\".+\")</string>
454 <key>endCaptures</key>
455 <dict>
456 <key>1</key>
457 <dict>
458 <key>name</key>
459 <string>storage.type.zig</string>
460 </dict>
461 <key>2</key>
462 <dict>
463 <key>name</key>
464 <string>keyword.operator.zig</string>
465 </dict>
466 <key>3</key>
467 <dict>
468 <key>name</key>
469 <string>storage.type.zig</string>
470 </dict>
471 </dict>
472 <key>patterns</key>
473 <array>
474 <dict>
475 <key>include</key>
476 <string>#label</string>
477 </dict>
478 <dict>
479 <key>include</key>
480 <string>#param_list</string>
481 </dict>
482 <dict>
483 <key>match</key>
484 <string>([a-zA-Z_][\w.]*|@\".+\")</string>
485 <key>name</key>
486 <string>storage.type.zig</string>
487 </dict>
488 <dict>
489 <key>include</key>
490 <string>#dummy_main</string>
491 </dict>
492 </array>
493 </dict>
494 <key>keywords</key>
495 <dict>
496 <key>patterns</key>
497 <array>
498 <dict>
499 <key>match</key>
500 <string>\b(while|for|break|return|continue|asm|defer|errdefer|unreachable)\b</string>
501 <key>name</key>
502 <string>keyword.control.zig</string>
503 </dict>
504 <dict>
505 <key>match</key>
506 <string>\b(async|await|suspend|nosuspend|resume)\b</string>
507 <key>name</key>
508 <string>keyword.control.async.zig</string>
509 </dict>
510 <dict>
511 <key>match</key>
512 <string>\b(if|else|switch|try|catch|orelse)\b</string>
513 <key>name</key>
514 <string>keyword.control.conditional.zig</string>
515 </dict>
516 <dict>
517 <key>match</key>
518 <string>(?&lt;!\w)(@import|@cImport|@cInclude)\b</string>
519 <key>name</key>
520 <string>keyword.control.import.zig</string>
521 </dict>
522 <dict>
523 <key>match</key>
524 <string>\b(usingnamespace)\b</string>
525 <key>name</key>
526 <string>keyword.other.usingnamespace.zig</string>
527 </dict>
528 </array>
529 </dict>
530 <key>label</key>
531 <dict>
532 <key>captures</key>
533 <dict>
534 <key>1</key>
535 <dict>
536 <key>name</key>
537 <string>keyword.control.zig</string>
538 </dict>
539 <key>2</key>
540 <dict>
541 <key>name</key>
542 <string>entity.name.label.zig</string>
543 </dict>
544 <key>3</key>
545 <dict>
546 <key>name</key>
547 <string>entity.name.label.zig</string>
548 </dict>
549 </dict>
550 <key>match</key>
551 <string>\b(break|continue)\s*:\s*([a-zA-Z_]\w*|@\".+\")\b|\b(?!\d)([a-zA-Z_]\w*|@\".+\")\b(?=\s*:\s*(?:\{|while\b))</string>
552 </dict>
553 <key>operators</key>
554 <dict>
555 <key>patterns</key>
556 <array>
557 <dict>
558 <key>match</key>
559 <string>\b!\b</string>
560 <key>name</key>
561 <string>keyword.operator.zig</string>
562 </dict>
563 <dict>
564 <key>match</key>
565 <string>(==|(?:!|&gt;|&lt;)=?)</string>
566 <key>name</key>
567 <string>keyword.operator.logical.zig</string>
568 </dict>
569 <dict>
570 <key>match</key>
571 <string>\b(and|or)\b</string>
572 <key>name</key>
573 <string>keyword.operator.word.zig</string>
574 </dict>
575 <dict>
576 <key>match</key>
577 <string>((?:(?:\+|-|\*)\%?|/|%|&lt;&lt;|&gt;&gt;|&amp;|\|(?=[^\|])|\^)?=)</string>
578 <key>name</key>
579 <string>keyword.operator.assignment.zig</string>
580 </dict>
581 <dict>
582 <key>match</key>
583 <string>((?:\+|-|\*)\%?|/(?!/)|%)</string>
584 <key>name</key>
585 <string>keyword.operator.arithmetic.zig</string>
586 </dict>
587 <dict>
588 <key>match</key>
589 <string>(&lt;&lt;|&gt;&gt;|&amp;(?=[a-zA-Z_]|@\")|\|(?=[^\|])|\^|~)</string>
590 <key>name</key>
591 <string>keyword.operator.bitwise.zig</string>
592 </dict>
593 <dict>
594 <key>match</key>
595 <string>(\+\+|\*\*|-&gt;|\.\?|\.\*|&amp;(?=[a-zA-Z_]|@\")|\?|\|\||\.{2,3})</string>
596 <key>name</key>
597 <string>keyword.operator.other.zig</string>
598 </dict>
599 </array>
600 </dict>
601 <key>param_list</key>
602 <dict>
603 <key>begin</key>
604 <string>([a-zA-Z_]\w*|@\".+\")\s*(:)\s*</string>
605 <key>beginCaptures</key>
606 <dict>
607 <key>1</key>
608 <dict>
609 <key>name</key>
610 <string>variable.parameter.zig</string>
611 </dict>
612 <key>2</key>
613 <dict>
614 <key>name</key>
615 <string>punctuation.separator.zig</string>
616 </dict>
617 </dict>
618 <key>end</key>
619 <string>([a-zA-Z_][\w.]*|@\".+\")?\s*(?:(,)|(\)))</string>
620 <key>endCaptures</key>
621 <dict>
622 <key>1</key>
623 <dict>
624 <key>name</key>
625 <string>storage.type.zig</string>
626 </dict>
627 <key>2</key>
628 <dict>
629 <key>name</key>
630 <string>punctuation.separator.zig</string>
631 </dict>
632 <key>3</key>
633 <dict>
634 <key>name</key>
635 <string>punctuation.section.parens.end.zig</string>
636 </dict>
637 </dict>
638 <key>patterns</key>
639 <array>
640 <dict>
641 <key>include</key>
642 <string>#dummy_main</string>
643 </dict>
644 <dict>
645 <key>match</key>
646 <string>([a-zA-Z_][\w.]*|@\".+\")</string>
647 <key>name</key>
648 <string>storage.type.zig</string>
649 </dict>
650 </array>
651 </dict>
652 <key>punctuation</key>
653 <dict>
654 <key>patterns</key>
655 <array>
656 <dict>
657 <key>match</key>
658 <string>,</string>
659 <key>name</key>
660 <string>punctuation.separator.zig</string>
661 </dict>
662 <dict>
663 <key>match</key>
664 <string>;</string>
665 <key>name</key>
666 <string>punctuation.terminator.zig</string>
667 </dict>
668 <dict>
669 <key>match</key>
670 <string>(\()</string>
671 <key>name</key>
672 <string>punctuation.section.parens.begin.zig</string>
673 </dict>
674 <dict>
675 <key>match</key>
676 <string>(\))</string>
677 <key>name</key>
678 <string>punctuation.section.parens.end.zig</string>
679 </dict>
680 </array>
681 </dict>
682 <key>storage</key>
683 <dict>
684 <key>patterns</key>
685 <array>
686 <dict>
687 <key>match</key>
688 <string>\b(bool|void|noreturn|type|anyerror|anytype)\b</string>
689 <key>name</key>
690 <string>storage.type.zig</string>
691 </dict>
692 <dict>
693 <key>match</key>
694 <string>\b(?&lt;!\.)([iu]\d+|[iu]size|comptime_int)\b</string>
695 <key>name</key>
696 <string>storage.type.integer.zig</string>
697 </dict>
698 <dict>
699 <key>match</key>
700 <string>\b(f16|f32|f64|f128|comptime_float)\b</string>
701 <key>name</key>
702 <string>storage.type.float.zig</string>
703 </dict>
704 <dict>
705 <key>match</key>
706 <string>\b(c_short|c_ushort|c_int|c_uint|c_long|c_ulong|c_longlong|c_ulonglong|c_longdouble|c_void)\b</string>
707 <key>name</key>
708 <string>storage.type.c_compat.zig</string>
709 </dict>
710 <dict>
711 <key>captures</key>
712 <dict>
713 <key>1</key>
714 <dict>
715 <key>name</key>
716 <string>storage.type.zig</string>
717 </dict>
718 <key>2</key>
719 <dict>
720 <key>name</key>
721 <string>keyword.operator.zig</string>
722 </dict>
723 <key>3</key>
724 <dict>
725 <key>name</key>
726 <string>storage.type.zig</string>
727 </dict>
728 </dict>
729 <key>match</key>
730 <string>\b(anyframe)\b\s*(-&gt;)?\s*(?:([a-zA-Z_][\w.]*|@\".+\")\b(?!\s*\())?</string>
731 </dict>
732 <dict>
733 <key>match</key>
734 <string>\bfn\b</string>
735 <key>name</key>
736 <string>storage.type.function.zig</string>
737 </dict>
738 <dict>
739 <key>match</key>
740 <string>\btest\b</string>
741 <key>name</key>
742 <string>storage.type.test.zig</string>
743 </dict>
744 <dict>
745 <key>match</key>
746 <string>\bstruct\b</string>
747 <key>name</key>
748 <string>storage.type.struct.zig</string>
749 </dict>
750 <dict>
751 <key>match</key>
752 <string>\benum\b</string>
753 <key>name</key>
754 <string>storage.type.enum.zig</string>
755 </dict>
756 <dict>
757 <key>match</key>
758 <string>\bunion\b</string>
759 <key>name</key>
760 <string>storage.type.union.zig</string>
761 </dict>
762 <dict>
763 <key>match</key>
764 <string>\berror\b</string>
765 <key>name</key>
766 <string>storage.type.error.zig</string>
767 </dict>
768 </array>
769 </dict>
770 <key>storage_modifier</key>
771 <dict>
772 <key>match</key>
773 <string>\b(const|var|extern|packed|export|pub|noalias|inline|noinline|comptime|volatile|align|linksection|threadlocal|allowzero)\b</string>
774 <key>name</key>
775 <string>storage.modifier.zig</string>
776 </dict>
777 <key>strings</key>
778 <dict>
779 <key>patterns</key>
780 <array>
781 <dict>
782 <key>begin</key>
783 <string>\'</string>
784 <key>end</key>
785 <string>\'</string>
786 <key>name</key>
787 <string>string.quoted.single.zig</string>
788 <key>patterns</key>
789 <array>
790 <dict>
791 <key>include</key>
792 <string>#character_escapes</string>
793 </dict>
794 <dict>
795 <key>match</key>
796 <string>\\[^\'][^\']*?</string>
797 <key>name</key>
798 <string>invalid.illegal.character.zig</string>
799 </dict>
800 </array>
801 </dict>
802 <dict>
803 <key>begin</key>
804 <string>c?\"</string>
805 <key>end</key>
806 <string>\"</string>
807 <key>name</key>
808 <string>string.quoted.double.zig</string>
809 <key>patterns</key>
810 <array>
811 <dict>
812 <key>include</key>
813 <string>#character_escapes</string>
814 </dict>
815 <dict>
816 <key>match</key>
817 <string>\\[^\'][^\']*?</string>
818 <key>name</key>
819 <string>invalid.illegal.character.zig</string>
820 </dict>
821 </array>
822 </dict>
823 <dict>
824 <key>begin</key>
825 <string>c?\\\\</string>
826 <key>end</key>
827 <string>$\n?</string>
828 <key>name</key>
829 <string>string.quoted.other.zig</string>
830 </dict>
831 </array>
832 </dict>
833 <key>support</key>
834 <dict>
835 <key>match</key>
836 <string>(?&lt;!\w)@[^\"\d][a-zA-Z_]\w*\b</string>
837 <key>name</key>
838 <string>support.function.zig</string>
839 </dict>
840 </dict>
841 <key>scopeName</key>
842 <string>source.zig</string>
843 <key>uuid</key>
844 <string>06C2FF99-3080-441A-9019-460C51E93116</string>
845</dict>
846</plist>
\ No newline at end of file
src/file-viewer/highlight.ts created+204
......@@ -0,0 +1,204 @@
1import { onceAsync } from "../lib.ts";
2import * as fs from "node:fs/promises";
3import * as path from "node:path";
4import * as oniguruma from "vscode-oniguruma";
5import * as textmate from "vscode-textmate";
6import { escapeHTML } from "../framework/bun-polyfill.ts";
7
8const languages = [
9 "ts",
10 "tsx",
11 "zig",
12 "json",
13 "css",
14 "astro",
15 "mdx",
16 "lua",
17 "shell",
18 "dosbatch",
19 "powershell",
20 "yaml",
21 "toml",
22 "xml",
23 "python",
24 "php",
25 "diff",
26] as const;
27const altScopes: Record<string, string> = {
28 astro: "text.html.astro",
29 xml: "text.xml",
30 php: "text.html.php",
31};
32export type Language = (typeof languages)[number];
33
34const scopes = [
35 // CSS
36 ["punctuation.definition.keyword", "keyword", "css"],
37 ["entity.name.tag.css", "class", "css"],
38 ["meta.selector.css", "method", "css"],
39 ["entity.other.attribute-name.class.css", "builtin", "css"],
40 ["punctuation.definition.entity", "builtin", "css"],
41 ["variable.css", "parameter", "css"],
42
43 // JSON
44 ["support.type.property-name.json", "variable", "json"],
45 ["constant.numeric", "method", "json"],
46 ["constant", "class", "json"],
47
48 // Lua
49 ["entity.name", "class", "lua"],
50
51 // Diff
52 ["punctuation.definition.deleted", "variable", "diff"],
53 ["markup.deleted", "variable", "diff"],
54 ["punctuation.definition.inserted", "method", "diff"],
55 ["markup.inserted", "method", "diff"],
56 ["meta.diff.range", "string", "diff"],
57 ["punctuation.definition.range", "string", "diff"],
58 ["meta.toc-list-line.number", "keyword", "diff"],
59 ["meta.diff", "comment", "diff"],
60
61 // General
62 ["meta.object-literal.key", "property"],
63 ["comment", "comment"],
64 ["string", "string"],
65 ["storage", "keyword"],
66 ["keyword", "keyword"],
67 ["variable.parameter", "parameter"],
68 ["entity.name.function", "method"],
69 ["support.type.primitive", "builtin"],
70 ["entity.name.type", "class"],
71 ["support.type", "class"],
72 ["support.class", "class"],
73 ["constant.language", "builtin"],
74 ["constant", "constant"],
75 ["support.constant", "constant"],
76 ["meta.parameters", "parameter"],
77 ["support.function", "method"],
78 ["variable", "variable"],
79 ["punctuation", null],
80 ["meta.function-call", "method"],
81] as const;
82
83interface HighlightLinesOptions {
84 lines: string[];
85 grammar: textmate.IGrammar;
86 state: textmate.StateStack;
87 language: Language;
88}
89
90export function getStyle(scopesToCheck: string[], langugage: Language) {
91 if (import.meta.main) console.log(scopesToCheck);
92 for (const scope of scopes) {
93 if (scope[2] && scope[2] !== langugage) continue;
94 const find = scopesToCheck.find((s) => s.startsWith(scope[0]));
95 if (find) {
96 return scope[1];
97 }
98 }
99 return null;
100}
101function highlightLines({
102 lines,
103 grammar,
104 state,
105 language,
106}: HighlightLinesOptions) {
107 let html = "";
108 let lastHtmlStyle: string | null = null;
109
110 const { length } = lines;
111 for (let i = 0; i < length; i += 1) {
112 const { tokens, ruleStack, stoppedEarly } = grammar.tokenizeLine(
113 lines[i],
114 state,
115 );
116 if (stoppedEarly) throw new Error("TODO: Tokenization stopped early?");
117 state = ruleStack;
118
119 for (const token of tokens) {
120 const str = lines[i].slice(token.startIndex, token.endIndex);
121 if (str.trim().length === 0) {
122 // Emit but do not consider scope changes
123 html += escapeHTML(str);
124 continue;
125 }
126
127 const style = getStyle(token.scopes, language);
128 if (style !== lastHtmlStyle) {
129 if (lastHtmlStyle) html += "</span>";
130 if (style) html += `<span class='${style}'>`;
131 }
132 html += escapeHTML(str);
133 lastHtmlStyle = style;
134 }
135 html += "\n";
136 }
137
138 if (lastHtmlStyle) html += "</span>";
139
140 return { state, html };
141}
142
143export const getRegistry = onceAsync(async () => {
144 const wasmBin = await fs.readFile(
145 path.join(
146 import.meta.dirname,
147 "../node_modules/vscode-oniguruma/release/onig.wasm",
148 ),
149 );
150 await oniguruma.loadWASM(wasmBin);
151
152 return new textmate.Registry({
153 onigLib: Promise.resolve({
154 createOnigScanner: (patterns) => new oniguruma.OnigScanner(patterns),
155 createOnigString: (s) => new oniguruma.OnigString(s),
156 }),
157 loadGrammar: async (scopeName: string) => {
158 for (const lang of languages) {
159 if (scopeName.endsWith(`.${lang}`)) {
160 const file = await fs.readFile(
161 path.join(import.meta.dirname, `highlight-grammar/${lang}.plist`),
162 "utf-8",
163 );
164 return textmate.parseRawGrammar(file);
165 }
166 }
167 return null;
168 },
169 });
170});
171
172export async function highlightCode(code: string, language: Language) {
173 const registry = await getRegistry();
174 const grammar = await registry.loadGrammar(
175 altScopes[language] ?? "source." + language,
176 );
177 if (!grammar) {
178 throw new Error(`No grammar found for language: ${language}`);
179 }
180 let state = textmate.INITIAL;
181 const { html } = highlightLines({
182 lines: code.split("\n"),
183 grammar,
184 state,
185 language,
186 });
187 return html;
188}
189
190import { existsSync } from "node:fs";
191if (import.meta.main) {
192 // validate exts
193 for (const ext of languages) {
194 if (
195 !existsSync(
196 path.join(import.meta.dirname, `highlight-grammar/${ext}.plist`),
197 )
198 ) {
199 console.error(`Missing grammar for ${ext}`);
200 }
201 const html = await highlightCode("wwwwwwwwwwwaaaaaaaaaaaaaaaa", ext);
202 }
203 console.log(await highlightCode(`{"maps":"damn"`, "json"));
204}
src/file-viewer/models/BlobAsset.ts created
src/file-viewer/models/FilePermission.ts created
src/file-viewer/models/MediaFile.ts created
src/file-viewer/pages/file.cotyledon_enterance.tsx created+27
......@@ -0,0 +1,27 @@
1import { MediaFile } from "../db";
2import { useInlineScript } from "../framework/page-resources";
3import { Readme } from "../media/cotyledon";
4import { MediaPanel } from "../pages-dynamic/file_viewer";
5import "../media/files.css";
6
7export const theme = {
8 bg: "#312652",
9 fg: "#f0f0ff",
10 primary: "#fabe32",
11};
12
13export default function CotyledonPage() {
14 useInlineScript("canvas_cotyledon");
15 useInlineScript("file_viewer");
16 return (
17 <div class="files ctld ctld-et">
18 <MediaPanel
19 file={MediaFile.getByPath("/")!}
20 isLast={false}
21 activeFilename={null}
22 hasCotyledonCookie={true}
23 />
24 <Readme />
25 </div>
26 );
27}
src/file-viewer/pages/file.cotyledon_speedbump.tsx created+27
......@@ -0,0 +1,27 @@
1import { MediaFile } from "../db";
2import { useInlineScript } from "../framework/page-resources";
3import { Speedbump } from "../media/cotyledon";
4import { MediaPanel } from "../pages-dynamic/file_viewer";
5import "../media/files.css";
6
7export const theme = {
8 bg: "#312652",
9 fg: "#f0f0ff",
10 primary: "#fabe32",
11};
12
13export default function CotyledonPage() {
14 useInlineScript("canvas_cotyledon");
15 useInlineScript("file_viewer");
16 return (
17 <div class="files ctld ctld-sb">
18 <MediaPanel
19 file={MediaFile.getByPath("/")!}
20 isLast={false}
21 activeFilename={null}
22 hasCotyledonCookie={false}
23 />
24 <Speedbump />
25 </div>
26 );
27}
src/file-viewer/redirects.ts created+9
......@@ -0,0 +1,9 @@
1export const mediaRedirects: Record<string, string> = {
2 "/q+a/172533.png": "/q+a/172533.jpg",
3 "/q+a/2021-12-05_smooth.mp4": "/2019/smooth.mp4",
4 "/q+a/temp_2022-08-17-19-43-32.m4a":
5 "/2023/g-missing/fragments/2022-08-17-19-43-32.m4a",
6 "/q+a/2023-02-09_20-5814i.png":
7 "/2023/g-is-missing/fragments/2023-02-09_20-5814i.png",
8 "/2024/waterfalls/": "/2025/waterfalls/",
9};
src/file-viewer/scripts/canvas_2017.ts created+233
......@@ -0,0 +1,233 @@
1// Vibe coded with AI
2(globalThis as any).canvas_2017 = function (canvas: HTMLCanvasElement) {
3 const isStandalone = canvas.getAttribute("data-standalone") === "true";
4 // Configuration interface for the checkerboard effect
5 interface CheckerboardConfig {
6 fps: number; // frames per second
7 color1: string; // first checkerboard color
8 color2: string; // second checkerboard color
9 opacity: number; // opacity of each checkerboard (0-1)
10 speedX1: number; // horizontal speed of first checkerboard (pixels per second)
11 speedY1: number; // vertical speed of first checkerboard (pixels per second)
12 speedX2: number; // horizontal speed of second checkerboard (pixels per second)
13 speedY2: number; // vertical speed of second checkerboard (pixels per second)
14 baseTileSize: number; // base size of checkerboard tiles
15 sizeVariation: number; // maximum variation in tile size (pixels)
16 sineFrequency1: number; // frequency of first sine wave for size variation
17 sineFrequency2: number; // frequency of second sine wave for size variation
18 sineOffset: number; // offset between the two sine waves (radians)
19 rotation: number; // rotation in degrees for the entire pattern
20 rotation2: number; // rotation in degrees for the entire pattern
21 }
22
23 // Default configuration
24 const config: CheckerboardConfig = {
25 fps: 30,
26 color1: "#1A1C17",
27 color2: "#1A1C17",
28 opacity: 0.3,
29 speedX1: -0.02, // moving left slowly
30 speedY1: -0.01, // moving up slowly
31 speedX2: -0.015, // moving left (slightly slower)
32 speedY2: 0.012, // moving down slowly
33 baseTileSize: 200,
34 sizeVariation: 1.5,
35 sineFrequency1: 0.0005,
36 sineFrequency2: 0.0008,
37 sineOffset: Math.PI / 2, // 90 degrees offset
38 rotation: 2, // 5 degree rotation
39 rotation2: -2, // 5 degree rotation
40 };
41
42 // Get the canvas context
43 const ctx = canvas.getContext("2d");
44 if (!ctx) {
45 console.error("Could not get canvas context");
46 return () => {};
47 }
48
49 // Make canvas transparent
50 if (isStandalone) {
51 canvas.style.backgroundColor = "#737D60";
52 } else {
53 canvas.style.backgroundColor = "transparent";
54 }
55
56 // Variables to track position and animation
57 let width = canvas.width;
58 let height = canvas.height;
59 let animationFrameId: number;
60 let lastFrameTime = 0;
61 const frameInterval = 1000 / config.fps;
62
63 // Position offsets for the two checkerboards (centered)
64 let offset1X = 0;
65 let offset1Y = 0;
66 let offset2X = 0;
67 let offset2Y = 0;
68
69 // Time variable for sine wave calculation
70 let time = 0;
71
72 // Convert rotation to radians
73 const rotationRad = (config.rotation * Math.PI) / 180;
74 const rotationRad2 = (config.rotation2 * Math.PI) / 180;
75
76 // Update canvas dimensions when resized
77 const updateDimensions = () => {
78 width = canvas.width = canvas.clientWidth;
79 height = canvas.height = canvas.clientHeight;
80 };
81
82 // Calculate the diagonal length of the canvas (to ensure rotation covers corners)
83 const calculateDiagonal = () => {
84 return Math.sqrt(width * width + height * height);
85 };
86
87 // Draw a single checkerboard pattern scaled from center with rotation
88 const drawCheckerboard = (
89 offsetX: number,
90 offsetY: number,
91 tileSize: number,
92 color1: string,
93 color2: string,
94 opacity: number,
95 rotationRad: number,
96 ) => {
97 ctx.globalAlpha = opacity;
98
99 // Get the center of the viewport
100 const centerX = width / 2;
101 const centerY = height / 2;
102
103 // Save the current transformation state
104 ctx.save();
105
106 // Move to the center of the canvas, rotate, then move back
107 ctx.translate(centerX, centerY);
108 ctx.rotate(rotationRad);
109
110 // Calculate the number of tiles needed to cover the rotated canvas
111 // We need to use the diagonal length to ensure we cover the corners when rotated
112 const diagonal = calculateDiagonal();
113 const tilesX = Math.ceil(diagonal / tileSize) + 6; // Added extra tiles for rotation
114 const tilesY = Math.ceil(diagonal / tileSize) + 6;
115
116 // Calculate how many tiles fit from center to edge (in each direction)
117 const halfTilesX = Math.ceil(tilesX / 2);
118 const halfTilesY = Math.ceil(tilesY / 2);
119
120 // Adjust the offset to be relative to the center
121 // The modulo ensures the pattern repeats smoothly even with scaling
122 const adjustedOffsetX = offsetX % (tileSize * 2);
123 const adjustedOffsetY = offsetY % (tileSize * 2);
124
125 // Draw the checker pattern, centered on the viewport
126 for (let y = -halfTilesY; y <= halfTilesY; y++) {
127 for (let x = -halfTilesX; x <= halfTilesX; x++) {
128 // Determine if this tile should be colored (creating checker pattern)
129 // We add a large number to ensure (x+y) is always positive for the modulo
130 if ((x + y + 1000) % 2 === 0) {
131 ctx.fillStyle = color1;
132 } else {
133 ctx.fillStyle = color2;
134 }
135
136 // Calculate the position of this tile relative to the center
137 // The adjusted offset creates the movement effect
138 const posX = (x * tileSize) + adjustedOffsetX;
139 const posY = (y * tileSize) + adjustedOffsetY;
140
141 // Draw the tile
142 ctx.fillRect(
143 posX - tileSize / 2,
144 posY - tileSize / 2,
145 tileSize,
146 tileSize,
147 );
148 }
149 }
150
151 // Restore the transformation state
152 ctx.restore();
153 };
154
155 // Animation loop
156 const animate = (currentTime: number) => {
157 animationFrameId = requestAnimationFrame(animate);
158
159 // Control frame rate
160 if (currentTime - lastFrameTime < frameInterval) {
161 return;
162 }
163
164 // Calculate the time elapsed since the last frame
165 const dt = currentTime - lastFrameTime;
166 lastFrameTime = currentTime;
167
168 // Increment time for sine wave calculation
169 time += dt;
170
171 // Update the position offsets based on speed and elapsed time
172 offset1X += config.speedX1 * dt;
173 offset1Y += config.speedY1 * dt;
174 offset2X += config.speedX2 * dt;
175 offset2Y += config.speedY2 * dt;
176
177 // Calculate the tile sizes using sine waves
178 const tileSize1 = config.baseTileSize +
179 Math.sin(time * config.sineFrequency1) * config.sizeVariation;
180 const tileSize2 = config.baseTileSize +
181 Math.sin(time * config.sineFrequency2 + config.sineOffset) *
182 config.sizeVariation;
183
184 // Clear canvas
185 ctx.clearRect(0, 0, width, height);
186
187 // Draw the two checkerboards
188 drawCheckerboard(
189 offset1X,
190 offset1Y,
191 tileSize1,
192 config.color1,
193 "transparent",
194 config.opacity,
195 rotationRad,
196 );
197
198 drawCheckerboard(
199 offset2X,
200 offset2Y,
201 tileSize2,
202 config.color2,
203 "transparent",
204 config.opacity,
205 rotationRad2,
206 );
207
208 // Reset global alpha
209 ctx.globalAlpha = 1.0;
210 };
211
212 // Initialize the animation
213 const init = () => {
214 // Set up resize handler
215 window.addEventListener("resize", updateDimensions);
216
217 // Initial setup
218 updateDimensions();
219
220 // Start animation
221 lastFrameTime = performance.now();
222 animationFrameId = requestAnimationFrame(animate);
223 };
224
225 // Start the animation
226 init();
227
228 // Return cleanup function
229 return () => {
230 window.removeEventListener("resize", updateDimensions);
231 cancelAnimationFrame(animationFrameId);
232 };
233};
src/file-viewer/scripts/canvas_2018.ts created+431
......@@ -0,0 +1,431 @@
1// This canvas is based on the maze generation algo in Tanks. This was
2// originally written in C++ as a single function in 2018, and was ported to TS
3// by Chloe in 2025 for the cotyledon canvas.
4//
5// The main difference is that this version is a visualization, rather than the
6// practical function. Instead of taking a millisecond, only 5 steps are
7// performed per second, visualizing the whole ordeal. It also isn't a playable
8// game, obviously.
9//
10// Ported with love because I care about my old self
11// She deserves the world, but instead gave it to me.
12(globalThis as any).canvas_2018 = function (canvas: HTMLCanvasElement) {
13 const isStandalone = canvas.getAttribute("data-standalone") === "true";
14 if (isStandalone) {
15 canvas.style.backgroundColor = "#27201E";
16 }
17 interface Cell {
18 down: boolean;
19 right: boolean;
20 visited: boolean;
21
22 cell_flash: number;
23 down_flash: number;
24 right_flash: number;
25 }
26 interface Pos {
27 x: number;
28 y: number;
29 /** Where the wall is relative to x, y. */
30 dir: "left" | "right" | "up" | "down";
31 }
32 interface Maze {
33 grid: Grid;
34 cursor: { x: number; y: number };
35 lastTick: number;
36 /* Pixels */
37 transform: number;
38 newCellsToVisit: Pos[];
39 randomWallBag: Cell[];
40 randomWallTarget: number;
41 renderOffset: { x: number; y: number };
42 done: boolean;
43 }
44 const hex = (color: number[]) =>
45 "#" + color.map((c) => c.toString(16).padStart(2, "0")).join("");
46 let cellSize: number;
47 let borderThickness: number;
48 const cellFlashModifier = isStandalone ? 0.4 : 0.2;
49 const color = isStandalone ? "#170d0b" : "#231C1A";
50 const bg = [0x27, 0x20, 0x1E];
51 const wallFlashColor = [0xFF, 0xA8, 0x7A];
52 const cellFlashColor = "#FFA87A";
53 const updateTime = 1000 / 7;
54 const randomWallBreakInterval = [6, 12]; // every 10 to 18 walls.
55 function randomBetween(min: number, max: number) {
56 return Math.round(
57 Math.random() * (max - min),
58 ) + min;
59 }
60 function randomOf<T>(array: T[]): T {
61 return array[randomBetween(0, array.length - 1)];
62 }
63 function randomWallTarget() {
64 return randomBetween(
65 randomWallBreakInterval[0],
66 randomWallBreakInterval[1],
67 );
68 }
69
70 // Originally, this used a 2-dimensional array. However, I wanted to make sure
71 // that the grid could be infinitely sized. This grid constructs new cells on
72 // demand, as needed.
73 class Grid {
74 cells = new Map<number, Cell>();
75 cell({ x, y }: { x: number; y: number }) {
76 const k = ((x | 0) << 16) + (y | 0);
77 const { cells } = this;
78 let existing = this.cells.get(k);
79 if (!existing) {
80 existing = {
81 cell_flash: 0,
82 down: true,
83 down_flash: 0,
84 right: true,
85 right_flash: 0,
86 visited: false,
87 };
88 cells.set(k, existing);
89 }
90 return existing;
91 }
92 forAll(
93 renderOffset: { x: number; y: number },
94 width: number,
95 height: number,
96 cb: (cell: Cell, pos: { x: number; y: number }) => void,
97 ) {
98 const { x: offsetX, y: offsetY } = renderOffset;
99 const startX = Math.floor(-offsetX / cellSize);
100 const startY = Math.floor(-offsetY / cellSize);
101 const endX = Math.ceil((width - offsetX) / cellSize);
102 const endY = Math.ceil((height - offsetY) / cellSize);
103 for (let x = startX; x <= endX; x++) {
104 for (let y = startY; y <= endY; y++) {
105 const cellX = offsetX + x * cellSize;
106 const cellY = offsetY + y * cellSize;
107 cb(this.cell({ x, y }), { x: cellX, y: cellY });
108 }
109 }
110 }
111 }
112
113 const ctx = canvas.getContext("2d")!;
114 if (!ctx) {
115 console.error("Could not get canvas context");
116 return () => {};
117 }
118
119 let width: number, height: number;
120 const updateDimensions = () => {
121 width = canvas.width = canvas.offsetWidth;
122 height = canvas.height = canvas.offsetHeight;
123 cellSize = 100;
124 borderThickness = 8;
125 };
126 updateDimensions();
127
128 setTimeout(() => {
129 updateDimensions();
130 }, 10);
131
132 let maze = initMaze();
133 let nextMaze: Maze | null = null;
134 let completeFade = 0;
135 function initMaze(): Maze {
136 return {
137 grid: new Grid(),
138 transform: 0,
139 cursor: {
140 x: randomBetween(0, Math.ceil(width / cellSize)),
141 y: randomBetween(0, Math.ceil(height / cellSize)),
142 },
143 lastTick: performance.now(),
144 randomWallBag: [],
145 randomWallTarget: randomWallTarget(),
146 newCellsToVisit: [],
147 renderOffset: { x: 0, y: 0 },
148 done: false,
149 };
150 }
151
152 function isOnScreen(maze: Maze, x: number, y: number) {
153 const { x: offsetX, y: offsetY } = maze.renderOffset;
154 const cellX = offsetX + x * cellSize;
155 const cellY = offsetY + y * cellSize;
156 return (
157 cellX + cellSize > 0 &&
158 cellX < width &&
159 cellY + cellSize > 0 &&
160 cellY < height
161 );
162 }
163
164 function tick(maze: Maze, other?: Maze) {
165 if (maze.done) return;
166
167 // The original maze algorithm broke down 4%-8% of random right facing
168 // walls, and 4%-8% of down facing walls. It did this at the end.
169 // To make this visual more interesting, two random walls will be broken
170 // down every 12-25 cell visits. This way, the main trail is always running.
171 if (maze.randomWallBag.length > maze.randomWallTarget) {
172 const down: Cell = randomOf(maze.randomWallBag);
173 const right: Cell = randomOf(maze.randomWallBag);
174 maze.randomWallBag.forEach((cell) =>
175 cell.cell_flash = Math.min(cell.cell_flash + 0.2, 1)
176 );
177 down.cell_flash = 1;
178 down.down = false;
179 down.down_flash = 1;
180 right.cell_flash = 1;
181 right.right = false;
182 right.right_flash = 1;
183 maze.randomWallBag = [];
184 maze.randomWallTarget = randomWallTarget();
185 return;
186 }
187
188 // The main algorithm was simple: Have a cursor position, and move it in a
189 // random direction that it had not seen before. Once it had run out of
190 // options, branch off of a previous location. Only visit each cell once.
191 //
192 // In this visualization, cells that are too far offscreen are softly
193 // treated as "visited", which is how the simulation always stays in frame.
194 const current = maze.grid.cell(maze.cursor);
195 current.visited = true;
196 current.cell_flash = 1;
197 maze.randomWallBag.push(current);
198 const adjacent = ([
199 { x: maze.cursor.x + 1, y: maze.cursor.y, dir: "left" },
200 { x: maze.cursor.x - 1, y: maze.cursor.y, dir: "right" },
201 { x: maze.cursor.x, y: maze.cursor.y + 1, dir: "up" },
202 { x: maze.cursor.x, y: maze.cursor.y - 1, dir: "down" },
203 ] as Pos[]).filter((pos) =>
204 isOnScreen(maze, pos.x, pos.y) &&
205 maze.grid.cell(pos).visited === false
206 );
207 if (adjacent.length === 0) {
208 // move cursor to a random cell that has not been visited.
209 const cells = maze.newCellsToVisit.filter((pos) =>
210 isOnScreen(maze, pos.x, pos.y) &&
211 maze.grid.cell(pos).visited === false
212 );
213 if (cells.length === 0) {
214 maze.done = true;
215 return;
216 }
217 const continuePos = randomOf(cells);
218 breakWall(maze, continuePos, other);
219 maze.cursor = { x: continuePos.x, y: continuePos.y };
220 return;
221 }
222
223 // break a random wall
224 const toBreak = randomOf(adjacent);
225 breakWall(maze, toBreak, other);
226 maze.cursor = { x: toBreak.x, y: toBreak.y };
227
228 // add the other directions to the new cells to visit.
229 maze.newCellsToVisit.push(
230 ...adjacent.filter((pos) => pos.dir !== toBreak.dir),
231 );
232 }
233
234 function breakWall(maze: Maze, pos: Pos, other?: Maze) {
235 if (pos.dir === "right") {
236 const cell = maze.grid.cell(pos);
237 cell.right = false;
238 cell.right_flash = 1;
239 if (other) cell.right = false;
240 } else if (pos.dir === "down") {
241 const cell = maze.grid.cell(pos);
242 cell.down = false;
243 cell.down_flash = 1;
244 if (other) cell.down = false;
245 } else if (pos.dir === "left") {
246 const cell = maze.grid.cell({ x: pos.x - 1, y: pos.y });
247 cell.right = false;
248 cell.right_flash = 1;
249 if (other) cell.right = false;
250 } else if (pos.dir === "up") {
251 const cell = maze.grid.cell({ x: pos.x, y: pos.y - 1 });
252 cell.down = false;
253 cell.down_flash = 1;
254 if (other) cell.down = false;
255 }
256 }
257
258 function renderOffset(maze: Maze) {
259 return { x: maze.transform, y: maze.transform };
260 }
261
262 let animationFrameId: number;
263 let last = performance.now();
264 let dt: number = 0;
265
266 function renderMazeBorders(maze: Maze, opacity: number) {
267 ctx.globalAlpha = opacity;
268 maze.grid.forAll(
269 maze.renderOffset,
270 width,
271 height,
272 (cell, { x: cellX, y: cellY }) => {
273 // Walls
274 if (cell.right) {
275 ctx.fillStyle = color;
276 ctx.fillRect(
277 cellX + cellSize - borderThickness / 2,
278 cellY - borderThickness / 2,
279 borderThickness,
280 cellSize + borderThickness,
281 );
282 }
283 if (cell.down) {
284 ctx.fillStyle = color;
285 ctx.fillRect(
286 cellX - borderThickness / 2,
287 cellY + cellSize - borderThickness / 2,
288 cellSize + borderThickness,
289 borderThickness,
290 );
291 }
292 },
293 );
294 ctx.globalAlpha = 1;
295 }
296
297 function renderCellFlash(maze: Maze) {
298 maze.grid.forAll(
299 maze.renderOffset,
300 width,
301 height,
302 (cell, { x: cellX, y: cellY }) => {
303 // Cell flash to show visiting path.
304 if (cell.cell_flash > 0) {
305 cell.cell_flash = Math.max(0, cell.cell_flash - dt / 1000);
306 ctx.fillStyle = cellFlashColor;
307 ctx.globalAlpha = cell.cell_flash * cellFlashModifier;
308 ctx.fillRect(cellX, cellY, cellSize, cellSize);
309 ctx.globalAlpha = 1;
310 }
311 },
312 );
313 }
314
315 function renderBorderFlash(maze: Maze) {
316 maze.grid.forAll(
317 maze.renderOffset,
318 width,
319 height,
320 (cell, { x: cellX, y: cellY }) => {
321 if (cell.right_flash == 0 && cell.down_flash == 0) {
322 return;
323 }
324
325 // Walls
326 const cellFlash = cell.cell_flash * cellFlashModifier;
327 if (cell.right_flash > 0) {
328 cell.right_flash = Math.max(0, cell.right_flash - dt / 500);
329 ctx.fillStyle = interpolateColor(
330 bg,
331 wallFlashColor,
332 Math.max(cell.right_flash, cellFlash),
333 );
334 if (cellFlash > cell.right_flash) {
335 ctx.globalAlpha = cell.right_flash / cellFlash;
336 }
337 ctx.fillRect(
338 cellX + cellSize - borderThickness / 2,
339 cellY + borderThickness / 2,
340 borderThickness,
341 cellSize - borderThickness,
342 );
343 ctx.globalAlpha = 1;
344 }
345 if (cell.down_flash > 0) {
346 if (cellFlash > cell.down_flash) {
347 ctx.globalAlpha = cell.down_flash / cellFlash;
348 }
349 cell.down_flash = Math.max(0, cell.down_flash - dt / 500);
350 ctx.fillStyle = interpolateColor(
351 bg,
352 wallFlashColor,
353 Math.max(cell.down_flash, cellFlash),
354 );
355 ctx.fillRect(
356 cellX + borderThickness / 2,
357 cellY + cellSize - borderThickness / 2,
358 cellSize - borderThickness,
359 borderThickness,
360 );
361 ctx.globalAlpha = 1;
362 }
363 },
364 );
365 }
366
367 function render() {
368 const now = performance.now();
369 dt = now - last;
370 maze.transform += dt * 0.005;
371 maze.renderOffset = renderOffset(maze);
372 if (!maze.done) {
373 if (now - maze.lastTick >= updateTime) {
374 tick(maze);
375 maze.lastTick = now;
376
377 if (maze.done) {
378 nextMaze = initMaze();
379 nextMaze.transform = (maze.transform % cellSize) - dt * 0.005;
380 nextMaze.lastTick = now;
381 completeFade = 0;
382 }
383 }
384 }
385 if (nextMaze) {
386 nextMaze.transform += dt * 0.005;
387 nextMaze.renderOffset = renderOffset(nextMaze);
388 if (!nextMaze.done && now - nextMaze.lastTick >= updateTime) {
389 tick(nextMaze, maze);
390 nextMaze.lastTick = now;
391 }
392 }
393 last = now;
394
395 ctx.clearRect(0, 0, width, height);
396
397 renderCellFlash(maze);
398 if (nextMaze) renderCellFlash(nextMaze);
399
400 renderMazeBorders(maze, 1);
401 if (nextMaze) {
402 renderMazeBorders(nextMaze, completeFade);
403 completeFade += dt / 3000;
404 if (completeFade >= 1) {
405 maze = nextMaze;
406 nextMaze = null;
407 }
408 }
409
410 renderBorderFlash(maze);
411 if (nextMaze) {
412 renderCellFlash(nextMaze);
413 renderBorderFlash(nextMaze);
414 }
415
416 animationFrameId = requestAnimationFrame(render);
417 }
418
419 function interpolateColor(start: number[], end: number[], t: number) {
420 return hex(start.map((s, i) => Math.round(s + (end[i] - s) * t)));
421 }
422
423 window.addEventListener("resize", updateDimensions);
424 animationFrameId = requestAnimationFrame(render);
425
426 // cleanup function
427 return () => {
428 window.removeEventListener("resize", updateDimensions);
429 cancelAnimationFrame(animationFrameId);
430 };
431};
src/file-viewer/scripts/canvas_2019.ts created+213
......@@ -0,0 +1,213 @@
1// Ported from CanvasAPI, allegedly written on 2019-08-26.
2(globalThis as any).canvas_2019 = function (canvas: HTMLCanvasElement) {
3 const isStandalone = canvas.getAttribute("data-standalone") === "true";
4 if (isStandalone) {
5 canvas.parentElement!.style.backgroundColor = "#121013";
6 }
7 // Canvas.tsx
8 abstract class CanvasAPI {
9 canvas: HTMLCanvasElement;
10 ctx: CanvasRenderingContext2D;
11 width = 0;
12 height = 0;
13 private _disposed = false;
14 private _running = false;
15 private _last = 0;
16
17 constructor(canvas: HTMLCanvasElement) {
18 this.canvas = canvas;
19 this.width = canvas.width = canvas.clientWidth;
20 this.height = canvas.height = canvas.clientHeight;
21 const ctx = this.canvas.getContext("2d");
22 if (!ctx) {
23 throw new Error("Canvas2D Not Supported!");
24 }
25 this.ctx = ctx;
26 }
27
28 stopRenderLoop() {
29 this._running = false;
30 }
31
32 startRenderLoop() {
33 if (this._disposed) return;
34 this._running = true;
35 this._last = performance.now();
36 requestAnimationFrame(this._renderLoop);
37 }
38
39 private _renderLoop = (delta: number) => {
40 if (!this._running) return;
41 this.render(delta - this._last);
42 this._last = delta;
43 requestAnimationFrame(this._renderLoop);
44 };
45
46 abstract render(delta: number): void;
47 }
48
49 // VaultBackground.ts
50 function addGSHelper(
51 grad: CanvasGradient,
52 color: string,
53 dotOpacity: number,
54 gradStop: number,
55 gradOpacity: number,
56 ) {
57 grad.addColorStop(gradStop, `rgba(${color},${dotOpacity * gradOpacity})`);
58 }
59
60 function randAround(target: number, dist: number) {
61 return (Math.random() - 0.5) * dist * 2 + target;
62 }
63
64 class Dot {
65 x = Math.random() * 1.1 - 0.05;
66 y = Math.random() / 4 + 0.9;
67 size = Math.random() * 200 + 50;
68 opacity = 0;
69 opacityRandom = Math.random() / 3 + 0.3;
70 fadeInOpacity = 1;
71 color = `${randAround(217, 30)}, ${randAround(170, 30)}, ${
72 randAround(255, 20)
73 }`;
74
75 life = 0;
76
77 ySpeed_1 = 0;
78 ySpeed_2 = -0.0000063;
79 ySpeed_3 = 0.000000016;
80 ySpeed_4 = 0.000000000009;
81
82 seed = Math.random();
83
84 delete = false;
85
86 update(init: boolean) {
87 this.life += 0.8;
88 if (this.life < 115) {
89 this.opacity = this.life / 230;
90 } else if (this.life > 450) {
91 this.delete = true;
92 } else if (this.life > 300) {
93 this.opacity = (150 + 300 - this.life) / 300;
94 }
95
96 this.ySpeed_3 += this.ySpeed_4;
97 this.ySpeed_2 += this.ySpeed_3;
98 this.ySpeed_1 += this.ySpeed_2;
99 this.y += this.ySpeed_1 * 0.5;
100
101 this.size -= 0.08;
102
103 if (this.delete) {
104 Object.assign(this, new Dot());
105 }
106 }
107
108 render(scene: VaultBackground) {
109 const ctx = scene.ctx;
110
111 if (this.fadeInOpacity < 1) {
112 this.fadeInOpacity += 0.0075;
113 }
114
115 const finalX = this.x +
116 Math.sin(this.seed * Math.PI * 2 + Date.now() / 15000) * 0.2;
117
118 const drawX = scene.shakeX +
119 finalX * Math.max(700, scene.width) -
120 (Math.max(700, scene.width) - scene.width) / 2;
121 const drawY = scene.shakeY + (this.y * 1.5 - 0.5) * scene.height;
122
123 const opacity = this.opacity * this.opacityRandom * this.fadeInOpacity;
124
125 const grad = ctx.createRadialGradient(
126 drawX,
127 drawY,
128 0,
129 drawX,
130 drawY,
131 this.size,
132 );
133 addGSHelper(grad, this.color, opacity, 0, 1);
134 addGSHelper(grad, this.color, opacity, 0.8, 0.7);
135 addGSHelper(grad, this.color, opacity, 0.87, 0.5);
136 addGSHelper(grad, this.color, opacity, 0.93, 0.3);
137 addGSHelper(grad, this.color, opacity, 1, 0);
138
139 ctx.fillStyle = grad;
140 ctx.fillRect(
141 drawX - this.size,
142 drawY - this.size,
143 this.size * 2,
144 this.size * 2,
145 );
146 }
147 }
148
149 class VaultBackground extends CanvasAPI {
150 private items = new Set<Dot>();
151
152 private shakeVar = 0;
153 private dom?: HTMLElement;
154 shakeX = 0;
155 shakeY = 0;
156
157 constructor(canvas: HTMLCanvasElement) {
158 super(canvas);
159 for (let i = 0; i < 450; i++) {
160 if (i % 7 === 0) {
161 this.items.add(new Dot());
162 }
163 this.items.forEach((x) => x.update(true));
164 }
165 this.items.forEach((x) => x.fadeInOpacity = 0);
166 }
167
168 render(): void {
169 this.ctx.clearRect(0, 0, this.width, this.height);
170
171 this.items.forEach((x) => (x.update(false), x.render(this)));
172
173 if (this.shakeVar >= 0.0001) {
174 this.shakeVar *= 0.97 - 0.22 * this.shakeVar;
175
176 if (this.shakeVar >= 0.0001) {
177 this.shakeX = (Math.random() * 2 - 1) * this.shakeVar * 65;
178 this.shakeY = (Math.random() * 2 - 1) * this.shakeVar * 65;
179 if (this.dom) {
180 this.dom.style.transform =
181 `translate(${this.shakeX}px,${this.shakeY}px)`;
182 }
183 } else {
184 this.shakeX = 0;
185 this.shakeY = 0;
186 if (this.dom) this.dom.style.removeProperty("transform");
187 this.dom = undefined;
188 }
189 }
190 }
191
192 shake(dom?: HTMLElement | null) {
193 this.dom = dom || document.body;
194 this.shakeVar = 1;
195 }
196 }
197
198 // Binding code
199 let bg = new VaultBackground(canvas);
200 bg.startRenderLoop();
201 canvas.style.opacity = "0.2";
202 function onResize() {
203 bg.width = canvas.width = canvas.clientWidth;
204 bg.height = canvas.height = canvas.clientHeight;
205 }
206 window.addEventListener("resize", onResize);
207 onResize();
208 (globalThis as any).vault = bg;
209 return () => {
210 bg.stopRenderLoop();
211 window.removeEventListener("resize", onResize);
212 };
213};
src/file-viewer/scripts/canvas_2020.ts created+197
......@@ -0,0 +1,197 @@
1// Vibe coded with AI
2(globalThis as any).canvas_2020 = function (canvas: HTMLCanvasElement) {
3 const isStandalone = canvas.getAttribute("data-standalone") === "true";
4 // Rain effect with slanted lines
5 // Configuration interface for the rain effect
6 interface RainConfig {
7 fps: number; // frames per second
8 color: string; // color of rain particles
9 angle: number; // angle in degrees
10 particleDensity: number; // particles per 10000 pixels of canvas area
11 speed: number; // speed of particles (pixels per frame)
12 lineWidth: number; // thickness of rain lines
13 lineLength: number; // length of rain lines
14 }
15
16 // Rain particle interface
17 interface RainParticle {
18 x: number; // x position
19 y: number; // y position
20 }
21
22 // Default configuration
23 const config: RainConfig = {
24 fps: 16,
25 color: isStandalone ? "#00FEFB99" : "#081F24",
26 angle: -18,
27 particleDensity: 1,
28 speed: 400,
29 lineWidth: 8,
30 lineLength: 100,
31 };
32
33 // Get the canvas context
34 const ctx = canvas.getContext("2d");
35 if (!ctx) {
36 console.error("Could not get canvas context");
37 return () => {};
38 }
39
40 // Make canvas transparent
41 if (isStandalone) {
42 canvas.style.backgroundColor = "#0F252B";
43 } else {
44 canvas.style.backgroundColor = "transparent";
45 }
46
47 // Calculate canvas dimensions and update when resized
48 let width = canvas.width;
49 let height = canvas.height;
50 let particles: RainParticle[] = [];
51 let animationFrameId: number;
52 let lastFrameTime = 0;
53 const frameInterval = 1000 / config.fps;
54
55 // Calculate angle in radians
56 const angleRad = (config.angle * Math.PI) / 180;
57
58 // Update canvas dimensions and particle count when resized
59 const updateDimensions = () => {
60 width = canvas.width = canvas.offsetWidth;
61 height = canvas.height = canvas.offsetHeight;
62
63 // Calculate the canvas area in pixels
64 const canvasArea = width * height;
65
66 // Calculate target number of particles based on canvas area
67 const targetParticleCount = Math.floor(
68 (canvasArea / 10000) * config.particleDensity,
69 );
70
71 // Calculate buffer for horizontal offset due to slanted angle
72 const buffer = Math.abs(height * Math.tan(angleRad)) + config.lineLength;
73
74 // Adjust the particles array
75 if (particles.length < targetParticleCount) {
76 // Add more particles if needed
77 for (let i = particles.length; i < targetParticleCount; i++) {
78 particles.push(createParticle(true, buffer));
79 }
80 } else if (particles.length > targetParticleCount) {
81 // Remove excess particles
82 particles = particles.slice(0, targetParticleCount);
83 }
84 };
85
86 // Create a new particle
87 // Added initialDistribution parameter to distribute particles across the entire canvas at startup
88 const createParticle = (
89 initialDistribution = false,
90 buffer: number,
91 ): RainParticle => {
92 // For initial distribution, place particles throughout the canvas
93 // Otherwise start them above the canvas
94 let x = Math.random() * (width + buffer * 2) - buffer;
95 let y;
96
97 if (initialDistribution) {
98 // Distribute across the entire canvas height for initial setup
99 y = Math.random() * (height + config.lineLength * 2) - config.lineLength;
100 } else {
101 // Start new particles from above the canvas with some randomization
102 y = -config.lineLength - (Math.random() * config.lineLength * 20);
103 }
104
105 return {
106 x,
107 y,
108 };
109 };
110
111 // Update particle positions
112 const updateParticles = () => {
113 // Calculate buffer for horizontal offset due to slanted angle
114 const buffer = Math.abs(height * Math.tan(angleRad)) + config.lineLength;
115
116 for (let i = 0; i < particles.length; i++) {
117 const p = particles[i];
118
119 // Update position based on speed and angle
120 p.x += Math.sin(angleRad) * config.speed;
121 p.y += Math.cos(angleRad) * config.speed;
122
123 // Reset particles that go offscreen - only determined by position
124 // Add extra buffer to ensure particles fully exit the visible area before resetting
125 if (
126 p.y > height + config.lineLength ||
127 p.x < -buffer ||
128 p.x > width + buffer
129 ) {
130 particles[i] = createParticle(false, buffer);
131 }
132 }
133 };
134
135 // Draw particles
136 const drawParticles = () => {
137 // Clear canvas
138 ctx.clearRect(0, 0, width, height);
139
140 // Set drawing properties
141 ctx.strokeStyle = config.color;
142 ctx.lineWidth = config.lineWidth;
143 ctx.lineCap = "square";
144
145 // Draw each rain line
146 ctx.beginPath();
147 for (const p of particles) {
148 // Only draw particles that are either on screen or within a reasonable buffer
149 // This is for performance reasons - we don't need to draw particles far offscreen
150 if (p.y >= -config.lineLength * 2 && p.y <= height + config.lineLength) {
151 const endX = p.x + Math.sin(angleRad) * config.lineLength;
152 const endY = p.y + Math.cos(angleRad) * config.lineLength;
153
154 ctx.moveTo(p.x, p.y);
155 ctx.lineTo(endX, endY);
156 }
157 }
158 ctx.stroke();
159 };
160
161 // Animation loop
162 const animate = (currentTime: number) => {
163 animationFrameId = requestAnimationFrame(animate);
164
165 // Control frame rate
166 if (currentTime - lastFrameTime < frameInterval) {
167 return;
168 }
169
170 lastFrameTime = currentTime;
171
172 updateParticles();
173 drawParticles();
174 };
175
176 // Initialize the animation
177 const init = () => {
178 // Set up resize handler
179 window.addEventListener("resize", updateDimensions);
180
181 // Initial setup
182 updateDimensions();
183
184 // Start animation
185 lastFrameTime = performance.now();
186 animationFrameId = requestAnimationFrame(animate);
187 };
188
189 // Start the animation
190 init();
191
192 // Return cleanup function
193 return () => {
194 window.removeEventListener("resize", updateDimensions);
195 cancelAnimationFrame(animationFrameId);
196 };
197};
src/file-viewer/scripts/canvas_2021.ts created+783
......@@ -0,0 +1,783 @@
1// Vibe coded.
2(globalThis as any).canvas_2021 = function (canvas: HTMLCanvasElement) {
3 const isStandalone = canvas.getAttribute("data-standalone") === "true";
4 // Constants for simulation
5 const PARTICLE_RADIUS = 4.5;
6 const PARTICLE_DENSITY = 0.004; // Particles per pixel
7 const MIN_SPEED = 0.05;
8 const MAX_SPEED = 6.0;
9 const FRICTION = 0.96;
10 const REPULSION_STRENGTH = 0.1;
11 const REPULSION_RADIUS = 50;
12 const FORCE_RADIUS = 400; // Increased radius
13 const FORCE_STRENGTH = 0.25;
14 const FORCE_FALLOFF_EXPONENT = 3; // Higher value = sharper falloff
15 const FORCE_SPACING = 10; // Pixels between force points
16 const MIN_FORCE_STRENGTH = 0.05; // Minimum force strength for very slow movements
17 const MAX_FORCE_STRENGTH = 0.4; // Maximum force strength for fast movements
18 const MIN_SPEED_THRESHOLD = 1; // Movement speed (px/frame) that produces minimum force
19 const MAX_SPEED_THRESHOLD = 20; // Movement speed that produces maximum force
20 const OVERSCAN_PIXELS = 250;
21 const CELL_SIZE = REPULSION_RADIUS; // For spatial hashing
22
23 let globalOpacity = 0;
24
25 if (isStandalone) {
26 canvas.style.backgroundColor = "#301D02";
27 } else {
28 canvas.style.backgroundColor = "transparent";
29 }
30
31 // Interfaces
32 interface Particle {
33 x: number;
34 y: number;
35 vx: number;
36 vy: number;
37 charge: number; // 0 to 1, affecting color
38 }
39
40 interface Force {
41 x: number;
42 y: number;
43 dx: number;
44 dy: number;
45 strength: number;
46 radius: number;
47 createdAt: number;
48 }
49
50 interface SpatialHash {
51 [key: string]: Particle[];
52 }
53
54 // State
55 let first = true;
56 let particles: Particle[] = [];
57 let forces: Force[] = [];
58 let width = canvas.width;
59 let height = canvas.height;
60 let targetParticleCount = 0;
61 let spatialHash: SpatialHash = {};
62 let ctx: CanvasRenderingContext2D | null = null;
63 let animationId: number | null = null;
64 let isRunning = false;
65
66 // Mouse tracking
67 let lastMousePosition: { x: number; y: number } | null = null;
68 // Track position of the last created force
69 let lastForcePosition: { x: number; y: number } | null = null;
70
71 // Keep track of previous canvas dimensions for resize logic
72 let previousWidth = 0;
73 let previousHeight = 0;
74
75 // Initialize and cleanup
76 function init(): void {
77 ctx = canvas.getContext("2d");
78 if (!ctx) return;
79
80 // Set canvas to full size
81 resizeCanvas();
82
83 // Event listeners
84 window.addEventListener("resize", resizeCanvas);
85 document.addEventListener("mousemove", handleMouseMove);
86
87 // Start animation immediately
88 start();
89 }
90
91 function cleanup(): void {
92 // Stop the animation
93 stop();
94
95 // Remove event listeners
96 window.removeEventListener("resize", resizeCanvas);
97 document.removeEventListener("mousemove", handleMouseMove);
98
99 // Clear arrays
100 particles = [];
101 forces = [];
102 spatialHash = {};
103 lastMousePosition = null;
104 lastForcePosition = null;
105 }
106
107 // Resize canvas and adjust particle count
108 function resizeCanvas(): void {
109 // Store previous dimensions
110 previousWidth = width;
111 previousHeight = height;
112
113 // Update to new dimensions
114 width = window.innerWidth;
115 height = window.innerHeight;
116 canvas.width = width;
117 canvas.height = height;
118
119 const oldTargetCount = targetParticleCount;
120 targetParticleCount = Math.floor(width * height * PARTICLE_DENSITY);
121
122 // Adjust particle count
123 if (targetParticleCount > oldTargetCount) {
124 // Add more particles if needed, but only in newly available space
125 addParticles(targetParticleCount - oldTargetCount, !first);
126 first = false;
127 }
128 // Note: Removal of excess particles happens naturally during update
129 }
130
131 // Handle mouse movement
132 function handleMouseMove(e: MouseEvent): void {
133 const rect = canvas.getBoundingClientRect();
134 const currentX = e.clientX - rect.left;
135 const currentY = e.clientY - rect.top;
136
137 // Initialize positions if this is the first movement
138 if (!lastMousePosition || !lastForcePosition) {
139 lastMousePosition = { x: currentX, y: currentY };
140 lastForcePosition = { x: currentX, y: currentY };
141 return;
142 }
143
144 // Store current mouse position
145 const mouseX = currentX;
146 const mouseY = currentY;
147
148 // Calculate vector from last mouse position to current
149 const dx = mouseX - lastMousePosition.x;
150 const dy = mouseY - lastMousePosition.y;
151 const distMoved = Math.sqrt(dx * dx + dy * dy);
152
153 // Skip if essentially no movement (avoids numerical issues)
154 if (distMoved < 0.1) {
155 return;
156 }
157
158 // Get the vector from the last force to the current mouse position
159 const forceDx = mouseX - lastForcePosition.x;
160 const forceDy = mouseY - lastForcePosition.y;
161 const forceDistance = Math.sqrt(forceDx * forceDx + forceDy * forceDy);
162
163 // Only create forces if we've moved far enough from the last force
164 if (forceDistance >= FORCE_SPACING) {
165 // Calculate the direction vector from last force to current mouse
166 let dirX = forceDx / forceDistance;
167 let dirY = forceDy / forceDistance;
168
169 // Calculate how many force points to create
170 const numPoints = Math.floor(forceDistance / FORCE_SPACING);
171
172 // Calculate movement speed based on the recent movement
173 const movementSpeed = distMoved; // Simple approximation of speed
174
175 // Scale force strength based on movement speed
176 let speedFactor;
177 if (movementSpeed <= MIN_SPEED_THRESHOLD) {
178 speedFactor = MIN_FORCE_STRENGTH;
179 } else if (movementSpeed >= MAX_SPEED_THRESHOLD) {
180 speedFactor = MAX_FORCE_STRENGTH;
181 } else {
182 // Linear interpolation between min and max
183 const t = (movementSpeed - MIN_SPEED_THRESHOLD) /
184 (MAX_SPEED_THRESHOLD - MIN_SPEED_THRESHOLD);
185 speedFactor = MIN_FORCE_STRENGTH +
186 t * (MAX_FORCE_STRENGTH - MIN_FORCE_STRENGTH);
187 }
188
189 // Store current force position to update incrementally
190 let currentForceX = lastForcePosition.x;
191 let currentForceY = lastForcePosition.y;
192
193 // Create evenly spaced force points along the path from last force to current mouse
194 for (let i = 0; i < numPoints; i++) {
195 // Calculate position for this force point
196 const t = (i + 1) / numPoints;
197 const fx = lastForcePosition.x + forceDx * t;
198 const fy = lastForcePosition.y + forceDy * t;
199
200 // Create force at this position with the direction vector
201 createForce(fx, fy, dirX, dirY, speedFactor);
202
203 // Update the last force position to this new force
204 currentForceX = fx;
205 currentForceY = fy;
206 }
207
208 // Update the last force position
209 lastForcePosition = { x: currentForceX, y: currentForceY };
210 }
211
212 // Always update the last mouse position
213 lastMousePosition = { x: mouseX, y: mouseY };
214 }
215
216 // Create a new force
217 function createForce(
218 x: number,
219 y: number,
220 dx: number,
221 dy: number,
222 strength = FORCE_STRENGTH,
223 ): void {
224 forces.push({
225 x,
226 y,
227 dx,
228 dy,
229 strength,
230 radius: 1,
231 createdAt: Date.now(),
232 });
233 }
234
235 // Improved particle addition with fill strategy options
236 function addParticles(count: number, inNewAreaOnly: boolean = false): void {
237 // Determine available space
238 const minX = -OVERSCAN_PIXELS;
239 const maxX = width + OVERSCAN_PIXELS;
240 const minY = -OVERSCAN_PIXELS;
241 const maxY = height + OVERSCAN_PIXELS;
242
243 // Use a grid system that guarantees uniform spacing of particles
244 const gridSpacing = REPULSION_RADIUS * 0.8; // Slightly less than repulsion radius
245 const gridWidth = Math.ceil((maxX - minX) / gridSpacing);
246 const gridHeight = Math.ceil((maxY - minY) / gridSpacing);
247
248 // Track which grid cells are already occupied
249 const occupiedCells: Set<string> = new Set();
250
251 // Mark cells occupied by existing particles
252 for (const particle of particles) {
253 const cellX = Math.floor((particle.x - minX) / gridSpacing);
254 const cellY = Math.floor((particle.y - minY) / gridSpacing);
255
256 // Ensure cell coordinates are within valid range
257 if (cellX >= 0 && cellX < gridWidth && cellY >= 0 && cellY < gridHeight) {
258 occupiedCells.add(`${cellX},${cellY}`);
259 }
260 }
261
262 // Create arrays of all cells and filter by placement strategy
263 const allGridCells: { x: number; y: number }[] = [];
264
265 for (let cellY = 0; cellY < gridHeight; cellY++) {
266 for (let cellX = 0; cellX < gridWidth; cellX++) {
267 const cellKey = `${cellX},${cellY}`;
268 if (!occupiedCells.has(cellKey)) {
269 const posX = minX + (cellX + 0.5) * gridSpacing;
270 const posY = minY + (cellY + 0.5) * gridSpacing;
271
272 // For new area only placement, filter to expanded areas
273 if (inNewAreaOnly && previousWidth > 0 && previousHeight > 0) {
274 const expandedRight = width > previousWidth;
275 const expandedBottom = height > previousHeight;
276
277 const inNewRightArea = expandedRight && posX >= previousWidth &&
278 posX <= width;
279 const inNewBottomArea = expandedBottom && posY >= previousHeight &&
280 posY <= height;
281
282 if (inNewRightArea || inNewBottomArea) {
283 allGridCells.push({ x: cellX, y: cellY });
284 }
285 } else if (!inNewAreaOnly) {
286 // Standard placement - add all valid cells
287 allGridCells.push({ x: cellX, y: cellY });
288 }
289 }
290 }
291 }
292
293 if (allGridCells.length == 0) {
294 throw new Error("No cells available to place particles");
295 }
296
297 // We now have all grid cells that match our placement criteria
298
299 // If we need more particles than we have available cells, we need to adjust
300 // gridSpacing to fit more cells into the same space
301 if (count > allGridCells.length) {
302 // Retry with a smaller grid spacing
303 // Proportionally reduce the grid spacing to fit the required number of particles
304 const scaleFactor = Math.sqrt(allGridCells.length / count);
305 const newGridSpacing = gridSpacing * scaleFactor;
306
307 // Clear particles and try again with new spacing
308 // This is a recursive call, but with adjusted parameters that will fit
309 return addParticlesWithCustomSpacing(
310 count,
311 inNewAreaOnly,
312 newGridSpacing,
313 );
314 }
315
316 // Shuffle the available cells for random selection
317 shuffleArray(allGridCells);
318
319 // Take the number of cells we need
320 const cellsToUse = Math.min(count, allGridCells.length);
321 const selectedCells = allGridCells.slice(0, cellsToUse);
322
323 // Create particles in selected cells
324 for (const cell of selectedCells) {
325 // Add jitter within the cell for natural look
326 const jitterX = (Math.random() - 0.5) * gridSpacing * 0.8;
327 const jitterY = (Math.random() - 0.5) * gridSpacing * 0.8;
328
329 // Calculate final position
330 const x = minX + (cell.x + 0.5) * gridSpacing + jitterX;
331 const y = minY + (cell.y + 0.5) * gridSpacing + jitterY;
332
333 // Create a particle at this position
334 particles.push(createParticle(x, y));
335 }
336 }
337
338 // Helper function to add particles with custom grid spacing
339 function addParticlesWithCustomSpacing(
340 count: number,
341 inNewAreaOnly: boolean,
342 gridSpacing: number,
343 ): void {
344 if (gridSpacing == 0) throw new Error("Grid spacing is 0");
345 // Determine available space
346 const minX = -OVERSCAN_PIXELS;
347 const maxX = width + OVERSCAN_PIXELS;
348 const minY = -OVERSCAN_PIXELS;
349 const maxY = height + OVERSCAN_PIXELS;
350
351 // Create grid using the custom spacing
352 const gridWidth = Math.ceil((maxX - minX) / gridSpacing);
353 const gridHeight = Math.ceil((maxY - minY) / gridSpacing);
354
355 // Track which grid cells are already occupied
356 const occupiedCells: Set<string> = new Set();
357
358 // Mark cells occupied by existing particles
359 for (const particle of particles) {
360 const cellX = Math.floor((particle.x - minX) / gridSpacing);
361 const cellY = Math.floor((particle.y - minY) / gridSpacing);
362
363 // Ensure cell coordinates are within valid range
364 if (cellX >= 0 && cellX < gridWidth && cellY >= 0 && cellY < gridHeight) {
365 occupiedCells.add(`${cellX},${cellY}`);
366 }
367 }
368
369 // Create arrays of all cells and filter by placement strategy
370 const allGridCells: { x: number; y: number }[] = [];
371
372 for (let cellY = 0; cellY < gridHeight; cellY++) {
373 for (let cellX = 0; cellX < gridWidth; cellX++) {
374 const cellKey = `${cellX},${cellY}`;
375 if (!occupiedCells.has(cellKey)) {
376 const posX = minX + (cellX + 0.5) * gridSpacing;
377 const posY = minY + (cellY + 0.5) * gridSpacing;
378
379 // For new area only placement, filter to expanded areas
380 if (inNewAreaOnly && previousWidth > 0 && previousHeight > 0) {
381 const expandedRight = width > previousWidth;
382 const expandedBottom = height > previousHeight;
383
384 const inNewRightArea = expandedRight && posX >= previousWidth &&
385 posX <= width;
386 const inNewBottomArea = expandedBottom && posY >= previousHeight &&
387 posY <= height;
388
389 if (inNewRightArea || inNewBottomArea) {
390 allGridCells.push({ x: cellX, y: cellY });
391 }
392 } else if (!inNewAreaOnly) {
393 // Standard placement - add all valid cells
394 allGridCells.push({ x: cellX, y: cellY });
395 }
396 }
397 }
398 }
399
400 // Shuffle the available cells for random distribution
401 shuffleArray(allGridCells);
402
403 // Take the number of cells we need (or all if we have fewer)
404 const cellsToUse = Math.min(count, allGridCells.length);
405
406 // Create particles in selected cells
407 for (let i = 0; i < cellsToUse; i++) {
408 const cell = allGridCells[i];
409
410 // Add jitter within the cell
411 const jitterX = (Math.random() - 0.5) * gridSpacing * 0.8;
412 const jitterY = (Math.random() - 0.5) * gridSpacing * 0.8;
413
414 // Calculate final position
415 const x = minX + (cell.x + 0.5) * gridSpacing + jitterX;
416 const y = minY + (cell.y + 0.5) * gridSpacing + jitterY;
417
418 // Create a particle at this position
419 particles.push(createParticle(x, y));
420 }
421 }
422
423 // Utility to shuffle an array (Fisher-Yates algorithm)
424 function shuffleArray<T>(array: T[]): void {
425 for (let i = array.length - 1; i > 0; i--) {
426 const j = Math.floor(Math.random() * (i + 1));
427 [array[i], array[j]] = [array[j], array[i]];
428 }
429 }
430
431 // Simplified createParticle function that just places at a specific position
432 function createParticle(x: number, y: number): Particle {
433 return {
434 x: x + (Math.random() * 4 - 2),
435 y: y + (Math.random() * 4 - 2),
436 vx: 0,
437 vy: 0,
438 charge: 0,
439 };
440 }
441
442 // Function to create a particle on one of the edges
443 function createParticleOnEdge(): Particle {
444 // Overscan bounds with fixed pixel size
445 const minX = -OVERSCAN_PIXELS;
446 const maxX = width + OVERSCAN_PIXELS;
447 const minY = -OVERSCAN_PIXELS;
448 const maxY = height + OVERSCAN_PIXELS;
449
450 let x: number, y: number;
451
452 // Place on one of the edges
453 const edge = Math.floor(Math.random() * 4);
454 switch (edge) {
455 case 0: // Top
456 x = minX + Math.random() * (maxX - minX);
457 y = minY;
458 break;
459 case 1: // Right
460 x = maxX;
461 y = minY + Math.random() * (maxY - minY);
462 break;
463 case 2: // Bottom
464 x = minX + Math.random() * (maxX - minX);
465 y = maxY;
466 break;
467 case 3: // Left
468 x = minX;
469 y = minY + Math.random() * (maxY - minY);
470 break;
471 default:
472 x = minX + Math.random() * (maxX - minX);
473 y = minY + Math.random() * (maxY - minY);
474 }
475
476 return createParticle(x, y);
477 }
478
479 // Spatial hashing functions
480 function getHashKey(x: number, y: number): string {
481 const cellX = Math.floor(x / CELL_SIZE);
482 const cellY = Math.floor(y / CELL_SIZE);
483 return `${cellX},${cellY}`;
484 }
485
486 function addToSpatialHash(particle: Particle): void {
487 const key = getHashKey(particle.x, particle.y);
488 if (!spatialHash[key]) {
489 spatialHash[key] = [];
490 }
491 spatialHash[key].push(particle);
492 }
493
494 function updateSpatialHash(): void {
495 // Clear previous hash
496 spatialHash = {};
497
498 // Add all particles to hash
499 for (const particle of particles) {
500 addToSpatialHash(particle);
501 }
502 }
503
504 function getNearbyParticles(
505 x: number,
506 y: number,
507 radius: number,
508 ): Particle[] {
509 const result: Particle[] = [];
510 const cellRadius = Math.ceil(radius / CELL_SIZE);
511
512 const centerCellX = Math.floor(x / CELL_SIZE);
513 const centerCellY = Math.floor(y / CELL_SIZE);
514
515 for (
516 let cellX = centerCellX - cellRadius;
517 cellX <= centerCellX + cellRadius;
518 cellX++
519 ) {
520 for (
521 let cellY = centerCellY - cellRadius;
522 cellY <= centerCellY + cellRadius;
523 cellY++
524 ) {
525 const key = `${cellX},${cellY}`;
526 const cell = spatialHash[key];
527
528 if (cell) {
529 result.push(...cell);
530 }
531 }
532 }
533
534 return result;
535 }
536
537 // Main update function
538 function update(): void {
539 const now = Date.now();
540 // Fixed pixel overscan
541 const minX = -OVERSCAN_PIXELS;
542 const maxX = width + OVERSCAN_PIXELS;
543 const minY = -OVERSCAN_PIXELS;
544 const maxY = height + OVERSCAN_PIXELS;
545
546 // Update spatial hash
547 updateSpatialHash();
548
549 // Update forces and remove expired ones
550 if (forces.length > 40) {
551 forces = forces.slice(-40);
552 }
553 forces = forces.filter((force) => {
554 force.strength *= 0.95;
555 force.radius *= 0.95;
556 return force.strength > 0.001;
557 });
558
559 // Update particles
560 const newParticles: Particle[] = [];
561
562 for (const particle of particles) {
563 // Apply forces
564 for (const force of forces) {
565 const dx = particle.x - force.x;
566 const dy = particle.y - force.y;
567 const distSq = dx * dx + dy * dy;
568
569 const radius = force.radius * FORCE_RADIUS;
570
571 if (distSq < radius * radius) {
572 const dist = Math.sqrt(distSq);
573
574 // Exponential falloff - much more concentrated at center
575 // (1 - x/R)^n where n controls how sharp the falloff is
576 const normalizedDist = dist / radius;
577 const factor = Math.pow(1 - normalizedDist, FORCE_FALLOFF_EXPONENT);
578
579 // Calculate force line projection for directional effect
580 // This makes particles along the force's path experience stronger effect
581 const dotProduct = (dx * -force.dx) + (dy * -force.dy);
582 const projectionFactor = Math.max(0, dotProduct / dist);
583
584 // Apply the combined factors - stronger directional bias
585 const finalFactor = factor * force.strength *
586 (0.1 + 0.9 * projectionFactor);
587
588 particle.vx += force.dx * finalFactor;
589 particle.vy += force.dy * finalFactor;
590 // charge for the first 100ms
591 if ((now - force.createdAt) < 100) {
592 particle.charge = Math.min(
593 1,
594 particle.charge + (finalFactor * finalFactor) * 0.2,
595 );
596 }
597 }
598 }
599
600 // Apply repulsion from nearby particles
601 const nearby = getNearbyParticles(
602 particle.x,
603 particle.y,
604 REPULSION_RADIUS,
605 );
606
607 for (const other of nearby) {
608 if (other === particle) continue;
609
610 const dx = particle.x - other.x;
611 const dy = particle.y - other.y;
612 const distSq = dx * dx + dy * dy;
613
614 if (distSq < REPULSION_RADIUS * REPULSION_RADIUS && distSq > 0) {
615 const dist = Math.sqrt(distSq);
616 const factor = REPULSION_STRENGTH * (1 - dist / REPULSION_RADIUS);
617
618 const fx = dx / dist * factor;
619 const fy = dy / dist * factor;
620
621 particle.vx += fx;
622 particle.vy += fy;
623 }
624 }
625
626 // Apply friction
627 particle.vx *= FRICTION;
628 particle.vy *= FRICTION;
629
630 // Ensure minimum speed
631 const speed = Math.sqrt(
632 particle.vx * particle.vx + particle.vy * particle.vy,
633 );
634 if (speed < MIN_SPEED && speed > 0) {
635 const scale = MIN_SPEED / speed;
636 particle.vx *= scale;
637 particle.vy *= scale;
638 }
639
640 // Cap at maximum speed
641 if (speed > MAX_SPEED) {
642 const scale = MAX_SPEED / speed;
643 particle.vx *= scale;
644 particle.vy *= scale;
645 }
646
647 // Update position
648 particle.x += particle.vx;
649 particle.y += particle.vy;
650
651 // Decrease charge
652 particle.charge *= 0.99;
653
654 // Check if particle is within extended bounds
655 if (
656 particle.x >= minX && particle.x <= maxX &&
657 particle.y >= minY && particle.y <= maxY
658 ) {
659 // If outside screen but within overscan, keep it if we need more particles
660 if (
661 (particle.x < 0 || particle.x > width ||
662 particle.y < 0 || particle.y > height) &&
663 newParticles.length >= targetParticleCount
664 ) {
665 continue;
666 }
667
668 newParticles.push(particle);
669 } else {
670 // Out of bounds, respawn if needed
671 if (newParticles.length < targetParticleCount) {
672 newParticles.push(createParticleOnEdge());
673 }
674 }
675 }
676
677 // Add more particles if needed
678 while (newParticles.length < targetParticleCount) {
679 newParticles.push(createParticleOnEdge());
680 }
681
682 particles = newParticles;
683 }
684
685 // Render function
686 const mul = isStandalone ? 0.9 : 0.5;
687 const add = isStandalone ? 0.1 : 0.03;
688 function render(): void {
689 if (!ctx) return;
690
691 // Clear canvas
692 ctx.clearRect(0, 0, width, height);
693
694 // Draw particles
695 for (const particle of particles) {
696 // Only draw if within canvas bounds (plus a small margin)
697 if (
698 particle.x >= -PARTICLE_RADIUS &&
699 particle.x <= width + PARTICLE_RADIUS &&
700 particle.y >= -PARTICLE_RADIUS && particle.y <= height + PARTICLE_RADIUS
701 ) {
702 ctx.beginPath();
703 ctx.arc(particle.x, particle.y, PARTICLE_RADIUS, 0, Math.PI * 2);
704
705 // Color based on charge
706 ctx.fillStyle = "#FFCB1F";
707 ctx.globalAlpha = (particle.charge * mul + add) * globalOpacity;
708 ctx.fill();
709 }
710 }
711
712 // // Debug: Draw forces and falloff visualization
713 // if (ctx) {
714 // for (const force of forces) {
715 // const R = force.radius * FORCE_RADIUS;
716
717 // // Draw force point
718 // ctx.beginPath();
719 // ctx.arc(force.x, force.y, 5, 0, Math.PI * 2);
720 // ctx.fillStyle = 'rgba(255, 0, 0, 0.5)';
721 // ctx.fill();
722
723 // // Draw force direction
724 // ctx.beginPath();
725 // ctx.moveTo(force.x, force.y);
726 // ctx.lineTo(force.x + force.dx * 20, force.y + force.dy * 20);
727 // ctx.strokeStyle = 'red';
728 // ctx.stroke();
729
730 // // Visualize the falloff curve with rings
731 // for (let i = 0; i <= 10; i++) {
732 // const radius = (R * i) / 10;
733 // const normalizedDist = radius / R;
734 // const intensity = Math.pow(1 - normalizedDist, FORCE_FALLOFF_EXPONENT);
735
736 // ctx.beginPath();
737 // ctx.arc(force.x, force.y, radius, 0, Math.PI * 2);
738 // ctx.strokeStyle = `rgba(255, 0, 0, ${intensity * 0.2})`;
739 // ctx.stroke();
740 // }
741 // }
742 // }
743 }
744
745 // Animation loop
746 let r = Math.random();
747 function animate(): void {
748 globalOpacity = Math.min(1, globalOpacity + 0.03);
749 update();
750 render();
751
752 if (isRunning) {
753 animationId = requestAnimationFrame(animate);
754 }
755 }
756
757 // Start/stop functions
758 function start(): void {
759 if (isRunning) return;
760
761 // Calculate target particle count based on canvas size
762 targetParticleCount = Math.floor(width * height * PARTICLE_DENSITY);
763
764 // Clear any existing particles and create new ones with proper spacing
765 particles = [];
766 addParticles(targetParticleCount);
767
768 isRunning = true;
769 animate();
770 }
771
772 function stop(): void {
773 isRunning = false;
774
775 if (animationId !== null) {
776 cancelAnimationFrame(animationId);
777 animationId = null;
778 }
779 }
780
781 init();
782 return cleanup;
783};
src/file-viewer/scripts/canvas_2022.ts created+160
......@@ -0,0 +1,160 @@
1(globalThis as any).canvas_2022 = function (canvas: HTMLCanvasElement) {
2 const isStandalone = canvas.getAttribute("data-standalone") === "true";
3 // Configuration for the grid of rotating squares
4 const config = {
5 gridRotation: 20, // Overall grid rotation in degrees
6 squareSize: 20, // Size of each square
7 spacing: 100, // Distance between square centers
8 moveSpeedX: 0.01, // Horizontal movement speed (pixels per second)
9 moveSpeedY: 0.01, // Vertical movement speed (pixels per second)
10 squareColor: "#00220A", // Color of the squares
11 squareOpacity: 1, // Opacity of the squares
12
13 // Function to determine square rotation based on its coordinates and time
14 // Can be adjusted for different patterns
15 rotationFunction: (x: number, y: number, time: number): number => {
16 // Combination of spatial wave and time-based rotation
17 return Math.sin(x * 0.05) * Math.cos(y * 0.05) * 180;
18 },
19 };
20
21 // Convert grid rotation to radians
22 const gridRotationRad = (config.gridRotation * Math.PI) / 180;
23
24 // Get the canvas context
25 const ctx = canvas.getContext("2d");
26 if (!ctx) {
27 console.error("Could not get canvas context");
28 return () => {};
29 }
30
31 // Make canvas transparent
32 if (isStandalone) {
33 canvas.style.backgroundColor = "#154226";
34 } else {
35 canvas.style.backgroundColor = "transparent";
36 }
37
38 // Animation variables
39 let width = canvas.width;
40 let height = canvas.height;
41 let offsetX = 0;
42 let offsetY = 0;
43 let time = 0;
44 let animationFrameId: number;
45 let lastTime = 0;
46
47 // Update canvas dimensions when resized
48 const updateDimensions = () => {
49 width = canvas.width = canvas.clientWidth;
50 height = canvas.height = canvas.clientHeight;
51 };
52
53 // Calculate the diagonal length of the canvas (to ensure rotation covers corners)
54 const calculateDiagonal = () => {
55 return Math.sqrt(width * width + height * height);
56 };
57
58 // Draw a single square with rotation
59 const drawSquare = (x: number, y: number, size: number, rotation: number) => {
60 ctx.save();
61
62 // Move to the center of the square position, rotate, then draw
63 ctx.translate(x, y);
64 ctx.rotate((rotation * Math.PI) / 180); // Convert rotation degrees to radians
65
66 // Draw square centered at position
67 ctx.fillRect(-size / 2, -size / 2, size, size);
68
69 ctx.restore();
70 };
71
72 // Draw the entire grid of squares
73 const drawGrid = () => {
74 ctx.clearRect(0, 0, width, height);
75
76 // Set drawing properties
77 ctx.fillStyle = config.squareColor;
78 ctx.globalAlpha = config.squareOpacity;
79
80 // Save the current transformation state
81 ctx.save();
82
83 // Move to the center of the canvas, rotate the grid, then move back
84 const centerX = width / 2;
85 const centerY = height / 2;
86 ctx.translate(centerX, centerY);
87 ctx.rotate(gridRotationRad);
88
89 // Calculate how much of the grid to draw based on canvas size
90 const diagonal = calculateDiagonal();
91 const gridSize = Math.ceil(diagonal / config.spacing) + 2;
92
93 // Adjust for offset to create movement
94 const adjustedOffsetX = offsetX % config.spacing;
95 const adjustedOffsetY = offsetY % config.spacing;
96
97 // Draw grid with enough squares to cover the rotated canvas
98 const halfGrid = Math.ceil(gridSize / 2);
99
100 for (let y = -halfGrid; y <= halfGrid; y++) {
101 for (let x = -halfGrid; x <= halfGrid; x++) {
102 // Calculate actual position with offset
103 const posX = x * config.spacing + adjustedOffsetX;
104 const posY = y * config.spacing + adjustedOffsetY;
105
106 // Calculate square rotation based on its position and time
107 const squareRotation = config.rotationFunction(posX, posY, time);
108
109 // Draw the square
110 drawSquare(posX, posY, config.squareSize, squareRotation);
111 }
112 }
113
114 // Restore the transformation state
115 ctx.restore();
116
117 // Reset global alpha
118 ctx.globalAlpha = 1.0;
119 };
120
121 // Animation loop
122 const animate = (currentTime: number) => {
123 animationFrameId = requestAnimationFrame(animate);
124
125 // Calculate time elapsed since last frame
126 const elapsed = currentTime - lastTime;
127 lastTime = currentTime;
128
129 // Update time variable for rotation function
130 time += elapsed;
131
132 // Update position offsets for movement
133 offsetX += config.moveSpeedX * elapsed;
134 offsetY += config.moveSpeedY * elapsed;
135
136 // Draw the grid
137 drawGrid();
138 };
139
140 // Initialize the animation
141 const init = () => {
142 // Set up resize handler
143 window.addEventListener("resize", updateDimensions);
144
145 // Initial setup
146 updateDimensions();
147
148 // Start animation
149 animationFrameId = requestAnimationFrame(animate);
150 };
151
152 // Start the animation
153 init();
154
155 // Return cleanup function
156 return () => {
157 window.removeEventListener("resize", updateDimensions);
158 cancelAnimationFrame(animationFrameId);
159 };
160};
src/file-viewer/scripts/canvas_2023.ts created+197
......@@ -0,0 +1,197 @@
1(globalThis as any).canvas_2023 = function (canvas: HTMLCanvasElement) {
2 const isStandalone = canvas.getAttribute("data-standalone") === "true";
3 const config = {
4 heartBaseSize: 50,
5 heartMaxSize: 100,
6 spacing: 150,
7 rowSpeed: 0.1,
8 heartColor: "#FF90D9",
9 heartOpacity: isStandalone ? 0.5 : 0.04,
10 mouseInfluenceRadius: 1000,
11 heartScaleFunction: (distance: number, radius: number): number => {
12 if (distance > radius) return 1;
13
14 const normalizedDistance = distance / radius;
15 const scaleFactor = 1 +
16 (1 - normalizedDistance) *
17 (config.heartMaxSize / config.heartBaseSize - 1);
18
19 return 1 + (scaleFactor - 1) * Math.pow(1 - normalizedDistance, 2);
20 },
21 };
22
23 const heart = new Path2D(
24 "M23.9451 45.3973L20.8672 42.6493C16.9551 39.0174 13.7054 35.8927 11.1181 33.275C8.53056 30.6574 6.46731 28.286 4.92839 26.1608C3.38946 24.0356 2.31772 22.1028 1.71314 20.3624C1.10856 18.6219 0.806274 16.8705 0.806274 15.1081C0.806274 11.4718 2.03118 8.42016 4.481 5.95312C6.93118 3.48608 9.93831 2.25256 13.5024 2.25256C15.5649 2.25256 17.482 2.70142 19.2536 3.59912C21.0255 4.49682 22.5893 5.80674 23.9451 7.52887C25.484 5.73346 27.1059 4.40522 28.8108 3.54416C30.5161 2.6831 32.3751 2.25256 34.3877 2.25256C38.0141 2.25256 41.0551 3.48663 43.5108 5.95477C45.9661 8.42291 47.1938 11.4758 47.1938 15.1136C47.1938 16.8712 46.8823 18.6115 46.2594 20.3343C45.6365 22.0568 44.5648 23.9807 43.0442 26.1059C41.5236 28.231 39.4721 30.6136 36.8896 33.2536C34.3068 35.8936 31.0362 39.0255 27.0779 42.6493L23.9451 45.3973ZM23.9176 38.802C27.6088 35.431 30.6339 32.5547 32.9928 30.173C35.3518 27.7913 37.2091 25.7211 38.5648 23.9624C39.9205 22.2036 40.864 20.6137 41.3953 19.1928C41.9266 17.7715 42.1923 16.4101 42.1923 15.1086C42.1923 12.8768 41.4529 11.0098 39.974 9.50748C38.4952 8.0052 36.6461 7.25406 34.4268 7.25406C32.631 7.25406 30.9572 7.6811 29.4055 8.87193C27.8537 10.0628 25.5389 13.0434 25.5389 13.0434L23.9451 15.3299L22.3512 13.0434C22.3512 13.0434 20.0643 10.2311 18.4638 9.04031C16.8634 7.84948 15.2194 7.25406 13.4991 7.25406C11.2929 7.25406 9.46857 7.98816 8.02602 9.45637C6.58383 10.9246 5.86273 12.8162 5.86273 15.1311C5.86273 16.4784 6.13644 17.8679 6.68386 19.2994C7.23127 20.731 8.18394 22.3333 9.54185 24.1064C10.8998 25.879 12.7329 27.9562 15.0413 30.3379C17.3497 32.7196 20.3084 35.5409 23.9176 38.802Z",
25 );
26
27 const ctx = canvas.getContext("2d");
28 if (!ctx) {
29 console.error("Could not get canvas context");
30 return () => {};
31 }
32
33 if (isStandalone) {
34 canvas.style.backgroundColor = "#2F1C21";
35 } else {
36 canvas.style.backgroundColor = "transparent";
37 }
38
39 let width = canvas.width;
40 let height = canvas.height;
41 let animationFrameId: number;
42 let lastFrameTime = 0;
43
44 let mouseX = width / 2;
45 let mouseY = height / 2;
46
47 let offset = config.spacing / 2;
48
49 const updateDimensions = () => {
50 width = canvas.width = canvas.clientWidth;
51 height = canvas.height = canvas.clientHeight;
52
53 mouseX = width / 2;
54 mouseY = height / 2;
55 };
56
57 const drawHeart = (x: number, y: number, size: number) => {
58 const scale = size / 30;
59
60 ctx.save();
61 ctx.translate(x, y);
62 ctx.scale(scale, scale);
63
64 ctx.fillStyle = config.heartColor;
65 ctx.fill(heart);
66
67 ctx.restore();
68 };
69
70 const c = 400;
71 const h = 40;
72 const k = solveForK(c, h);
73
74 const drawHeartGrid = () => {
75 ctx.clearRect(0, 0, width, height);
76
77 ctx.globalAlpha = config.heartOpacity;
78
79 const numRows = Math.ceil(height / config.spacing) + 1;
80
81 for (let row = 0; row < numRows; row++) {
82 const direction = row % 2 === 0 ? 1 : -1;
83 const rowOffset = (offset * direction) % config.spacing;
84
85 const posYInit = row * config.spacing + config.spacing / 2;
86
87 for (
88 let posXInit = -config.spacing + rowOffset;
89 posXInit < width + config.spacing;
90 posXInit += config.spacing
91 ) {
92 const dx = (posXInit + config.heartBaseSize / 2) - mouseX;
93 const dy = (posYInit + config.heartBaseSize / 2) - mouseY;
94 const distance = Math.sqrt(dx * dx + dy * dy);
95
96 const pushIntensity = asymmetricBump(distance, h, c, k, 0.00002);
97
98 const pushAngle = Math.atan2(dy, dx);
99
100 const pushDistanceX = pushIntensity * Math.cos(pushAngle);
101 const pushDistanceY = pushIntensity * Math.sin(pushAngle);
102 const posX = posXInit + pushDistanceX * 1;
103 const posY = posYInit + pushDistanceY * 2;
104
105 const scaleFactor = config.heartScaleFunction(
106 distance,
107 config.mouseInfluenceRadius,
108 );
109 const heartSize = config.heartBaseSize * scaleFactor;
110
111 if (
112 posX > -config.heartMaxSize &&
113 posX < width + config.heartMaxSize &&
114 posY > -config.heartMaxSize &&
115 posY < height + config.heartMaxSize
116 ) {
117 drawHeart(posX - heartSize / 2, posY - heartSize / 2, heartSize);
118 }
119 }
120 }
121
122 ctx.globalAlpha = 1.0;
123 };
124
125 function solveForK(c: number, k: number) {
126 // input -> f(x)=h*e^{(-k*(x-c)^{2})}
127 // desired result is (0, 0.45). (0, 0) is unsolvable but 0.45px will round down to 0.
128 //
129 // solution: -\frac{\ln\left(\frac{0.45}{h}\right)}{c^{2}}
130 return -Math.log(0.45 / h) / (c * c);
131 }
132
133 function asymmetricBump(
134 x: number,
135 h: number,
136 c: number,
137 leftK: number,
138 rightK: number,
139 ) {
140 const k = (x <= c) ? leftK : rightK;
141 return h * Math.exp(-k * Math.pow(x - c, 2));
142 }
143
144 const updateOffset = (elapsed: number) => {
145 offset += config.rowSpeed * elapsed;
146
147 if (offset > 1000000) {
148 offset -= 1000000;
149 }
150 };
151
152 const animate = (currentTime: number) => {
153 animationFrameId = requestAnimationFrame(animate);
154
155 const elapsed = currentTime - lastFrameTime;
156 lastFrameTime = currentTime;
157
158 updateOffset(elapsed * 0.05);
159
160 drawHeartGrid();
161 };
162
163 const handleMouseMove = (event: MouseEvent) => {
164 const rect = canvas.getBoundingClientRect();
165 mouseX = event.clientX - rect.left;
166 mouseY = event.clientY - rect.top;
167 };
168
169 const handleTouchMove = (event: TouchEvent) => {
170 if (event.touches.length > 0) {
171 event.preventDefault();
172 const rect = canvas.getBoundingClientRect();
173 mouseX = event.touches[0].clientX - rect.left;
174 mouseY = event.touches[0].clientY - rect.top;
175 }
176 };
177
178 const init = () => {
179 window.addEventListener("resize", updateDimensions);
180 document.addEventListener("mousemove", handleMouseMove);
181 document.addEventListener("touchmove", handleTouchMove, { passive: false });
182
183 updateDimensions();
184
185 lastFrameTime = performance.now();
186 animationFrameId = requestAnimationFrame(animate);
187 };
188
189 init();
190
191 return () => {
192 window.removeEventListener("resize", updateDimensions);
193 document.removeEventListener("mousemove", handleMouseMove);
194 document.removeEventListener("touchmove", handleTouchMove);
195 cancelAnimationFrame(animationFrameId);
196 };
197};
src/file-viewer/scripts/canvas_2024.ts created+251
......@@ -0,0 +1,251 @@
1// Vibe coded with AI
2(globalThis as any).canvas_2024 = function (canvas: HTMLCanvasElement) {
3 const isStandalone = canvas.getAttribute("data-standalone") === "true";
4 if (isStandalone) {
5 canvas.parentElement!.style.backgroundColor = "black";
6 }
7
8 const gl = canvas.getContext("webgl", {
9 alpha: true,
10 premultipliedAlpha: false,
11 });
12 if (!gl) {
13 console.error("WebGL not supported");
14 return () => {};
15 }
16
17 canvas.style.imageRendering = "pixelated";
18 canvas.style.opacity = isStandalone ? "0.3" : "0.15";
19
20 // Resize canvas to match display size
21 const resize = () => {
22 const displayWidth = Math.floor(
23 (canvas.clientWidth || window.innerWidth) / 3,
24 );
25 const displayHeight = Math.floor(
26 (canvas.clientHeight || window.innerHeight) / 3,
27 );
28
29 if (canvas.width !== displayWidth || canvas.height !== displayHeight) {
30 canvas.width = displayWidth;
31 canvas.height = displayHeight;
32 gl.viewport(0, 0, canvas.width, canvas.height);
33 }
34 };
35 resize();
36
37 // Vertex shader (just passes coordinates)
38 const vertexShaderSource = `
39 attribute vec2 a_position;
40 void main() {
41 gl_Position = vec4(a_position, 0.0, 1.0);
42 }
43 `;
44
45 // Fragment shader creates random noise with higher opacity to ensure visibility
46 const fragmentShaderSource = `
47 precision mediump float;
48 uniform float u_time;
49
50 float noise1(float seed1,float seed2){
51 return(
52 fract(seed1+12.34567*
53 fract(100.*(abs(seed1*0.91)+seed2+94.68)*
54 fract((abs(seed2*0.41)+45.46)*
55 fract((abs(seed2)+757.21)*
56 fract(seed1*0.0171))))))
57 * 1.0038 - 0.00185;
58 }
59
60 float n(float seed1, float seed2, float seed3){
61 float buff1 = abs(seed1+100.81) + 1000.3;
62 float buff2 = abs(seed2+100.45) + 1000.2;
63 float buff3 = abs(noise1(seed1, seed2)+seed3) + 1000.1;
64 buff1 = (buff3*fract(buff2*fract(buff1*fract(buff2*0.146))));
65 buff2 = (buff2*fract(buff2*fract(buff1+buff2*fract(buff3*0.52))));
66 buff1 = noise1(buff1, buff2);
67 return(buff1);
68 }
69
70 void main() {
71 float noise = n(gl_FragCoord.x, gl_FragCoord.y, u_time);
72
73 gl_FragColor = vec4(1.0, 0.7, 0.7, 0.8*noise);
74 }
75 `;
76
77 // Create and compile shaders
78 const vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexShaderSource);
79 const fragmentShader = createShader(
80 gl,
81 gl.FRAGMENT_SHADER,
82 fragmentShaderSource,
83 );
84
85 // Check if shader creation failed
86 if (!vertexShader || !fragmentShader) {
87 console.error("Failed to create shaders");
88 return () => {};
89 }
90
91 // Create program and link shaders
92 const program = createProgram(gl, vertexShader, fragmentShader);
93
94 // Check if program creation failed
95 if (!program) {
96 console.error("Failed to create program");
97 return () => {};
98 }
99
100 // Get attribute and uniform locations
101 const positionAttributeLocation = gl.getAttribLocation(program, "a_position");
102 const timeUniformLocation = gl.getUniformLocation(program, "u_time");
103
104 // Create a position buffer for a rectangle covering the entire canvas
105 const positionBuffer = gl.createBuffer();
106 if (!positionBuffer) {
107 console.error("Failed to create position buffer");
108 return () => {};
109 }
110
111 gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
112 // Rectangle that covers the entire clip space
113 const positions = [
114 -1.0,
115 -1.0, // bottom left
116 1.0,
117 -1.0, // bottom right
118 -1.0,
119 1.0, // top left
120 1.0,
121 1.0, // top right
122 ];
123 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);
124
125 // Set up blending
126 gl.enable(gl.BLEND);
127 gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
128
129 // Fixed 24 FPS timing
130 const FPS = 24;
131 const FRAME_TIME = 1000 / FPS; // ms per frame
132
133 // Handle animation
134 let animationTimerId: number;
135 let startTime = Date.now();
136 let lastFrameTime = 0;
137
138 const render = () => {
139 // Get current time
140 const currentTime = Date.now();
141 const deltaTime = currentTime - lastFrameTime;
142
143 // Skip frame if it's too early (maintain 24 FPS)
144 if (deltaTime < FRAME_TIME) {
145 animationTimerId = window.setTimeout(render, 0); // Check again ASAP but yield to browser
146 return;
147 }
148
149 // Update last frame time, accounting for any drift
150 lastFrameTime = currentTime - (deltaTime % FRAME_TIME);
151
152 // Resize canvas if needed
153 resize();
154
155 // Calculate elapsed time in seconds for animation
156 const elapsedTime = (currentTime - startTime) / 1000;
157
158 // Clear the canvas with transparent black
159 gl.clearColor(0, 0, 0, 0);
160 gl.clear(gl.COLOR_BUFFER_BIT);
161
162 // Use our shader program
163 gl.useProgram(program);
164
165 // Set up the position attribute
166 gl.enableVertexAttribArray(positionAttributeLocation);
167 gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
168 gl.vertexAttribPointer(
169 positionAttributeLocation,
170 2, // 2 components per vertex
171 gl.FLOAT, // data type
172 false, // normalize
173 0, // stride (0 = compute from size and type)
174 0, // offset
175 );
176
177 // Update time uniform for animation
178 gl.uniform1f(timeUniformLocation, elapsedTime);
179
180 // Draw the rectangle (2 triangles)
181 gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
182
183 // Schedule next frame (aiming for 24 FPS)
184 const timeToNextFrame = Math.max(
185 0,
186 FRAME_TIME - (Date.now() - currentTime),
187 );
188 animationTimerId = window.setTimeout(render, timeToNextFrame);
189 };
190
191 // Helper function to create shaders
192 function createShader(
193 gl: WebGLRenderingContext,
194 type: number,
195 source: string,
196 ): WebGLShader | null {
197 const shader = gl.createShader(type);
198 if (!shader) {
199 console.error("Failed to create shader object");
200 return null;
201 }
202
203 gl.shaderSource(shader, source);
204 gl.compileShader(shader);
205
206 if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
207 console.error("Shader compilation error:", gl.getShaderInfoLog(shader));
208 gl.deleteShader(shader);
209 return null;
210 }
211
212 return shader;
213 }
214
215 // Helper function to create program and link shaders
216 function createProgram(
217 gl: WebGLRenderingContext,
218 vertexShader: WebGLShader,
219 fragmentShader: WebGLShader,
220 ): WebGLProgram | null {
221 const program = gl.createProgram();
222 if (!program) {
223 console.error("Failed to create program object");
224 return null;
225 }
226
227 gl.attachShader(program, vertexShader);
228 gl.attachShader(program, fragmentShader);
229 gl.linkProgram(program);
230
231 if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
232 console.error("Program linking error:", gl.getProgramInfoLog(program));
233 return null;
234 }
235
236 return program;
237 }
238
239 // Start the rendering with initial timestamp
240 lastFrameTime = Date.now();
241 render();
242
243 // Return cleanup function
244 return () => {
245 clearTimeout(animationTimerId);
246 if (program) gl.deleteProgram(program);
247 if (vertexShader) gl.deleteShader(vertexShader);
248 if (fragmentShader) gl.deleteShader(fragmentShader);
249 if (positionBuffer) gl.deleteBuffer(positionBuffer);
250 };
251};
src/file-viewer/scripts/canvas_cotyledon.ts created+362
......@@ -0,0 +1,362 @@
1// @ts-ignore
2globalThis.canvas_cotyledon = function (
3 canvas: HTMLCanvasElement,
4 panel: HTMLElement,
5) {
6 let running = true;
7 const ctx = canvas.getContext("2d");
8
9 function resizeCanvas() {
10 canvas.width = canvas.clientWidth;
11 canvas.height = canvas.clientHeight;
12 }
13
14 resizeCanvas();
15 window.addEventListener("resize", resizeCanvas);
16
17 const clover = new Path2D(
18 "M18.9845 34.4839C20.4004 34.5218 21.8336 34.6883 23.2644 34.9578C20.1378 31.095 18.4268 27.1546 18.0555 23.2959C17.321 15.6622 21.9022 9.36595 28.8908 5.78535C34.6355 2.84212 40.258 2.98454 44.2809 5.96879C45.6605 6.99221 46.7683 8.2886 47.5877 9.78593C48.3054 8.50307 49.134 7.26623 50.0858 6.17951C51.8368 4.18037 54.1947 2.47127 57.2294 2.15019C60.2768 1.82766 63.467 2.9608 66.7548 5.52299C70.9834 8.81811 73.084 12.8864 73.5996 17.2135C74.1044 21.4504 73.0711 25.7433 71.4155 29.6117C70.6566 31.3849 69.7488 33.1106 68.7557 34.7506C70.3664 33.9983 72.0168 33.3376 73.6816 32.8312C77.2262 31.7528 81.0258 31.3024 84.8151 32.2149C88.6451 33.1371 92.2246 35.3946 95.3823 39.3157C98.4534 43.1293 99.9219 46.6818 99.997 49.9677C100.073 53.3033 98.7051 55.9829 96.8652 57.9789C95.0586 59.9387 92.7653 61.2872 90.7505 62.1315C90.692 62.1561 90.6334 62.1802 90.5746 62.2042L90.4465 62.256C91.4852 63.7304 92.4724 65.5955 93.0127 67.6979C93.5916 69.9509 93.6669 72.5285 92.674 75.1356C91.679 77.7482 89.7006 80.1559 86.5767 82.2161C86.5556 82.23 86.5342 82.2438 86.5126 82.2571C84.1333 83.7267 81.5504 84.7197 78.6932 84.9352C75.832 85.151 72.8634 84.5742 69.7337 83.1522C64.7667 80.8953 59.274 76.4525 52.8745 69.3645C52.8789 70.1568 52.8844 70.9254 52.9004 71.6677C52.9643 74.6226 53.1868 77.4534 54.0666 80.6265C55.2259 84.503 57.2821 88.4684 60.9561 92.3161C61.644 93.0366 61.8512 94.0908 61.4872 95.018L60.9919 96.2799C60.6464 97.16 59.8435 97.778 58.9041 97.8865C57.9647 97.9952 57.042 97.5769 56.5047 96.7985C52.5406 91.0574 50.3441 86.3289 49.1491 82.0434C48.0155 78.2319 47.6244 74.4579 47.5085 71.0024C45.418 73.6873 42.8696 76.4687 40.0618 78.9101C34.3517 83.8756 26.6803 88.1931 19.142 85.9955C15.5301 84.9425 12.8635 83.2751 11.0848 81.1179C9.2952 78.9474 8.5557 76.4627 8.4981 74.0631C8.43961 71.6256 9.07998 69.225 10.075 67.1703C7.76333 66.828 5.38011 65.9682 3.47071 64.2327C-0.339092 60.7699 -1.2199 54.8876 1.86982 46.4552C3.47011 42.0878 5.90372 38.9798 8.98328 37.0179C12.0444 35.0677 15.5215 34.3912 18.9845 34.4839Z",
19 );
20
21 // Background
22 const base = [0x14, 0x1a, 0x19];
23
24 let blobTextureCanvas: OffscreenCanvas;
25 let blobTextureCtx: OffscreenCanvasRenderingContext2D;
26 const blobSize = 1000; // Size of the noise texture
27 {
28 const blobTexture = new ImageData(blobSize, blobSize);
29 const data = blobTexture.data;
30
31 let x = 0;
32 let y = 0;
33 for (let i = 0; i < data.length; i += 4) {
34 if (x >= blobSize) {
35 x = 0;
36 y++;
37 }
38
39 const noiseX = Math.sin(x * .2 + y * .1) * 0.03;
40 const noiseY = Math.cos(y * .6 + x * .2) * 0.05;
41
42 const centerX = blobSize / 2;
43 const centerY = blobSize / 2;
44 const dx = (x + noiseX) - centerX;
45 const dy = (y + noiseY) - centerY;
46 const distanceFromCenterRaw = (dx * dx + dy * dy) ** 0.5;
47
48 const maxDistance = blobSize / 2;
49 const distanceFromCenter = Math.min(
50 1,
51 distanceFromCenterRaw / maxDistance,
52 );
53
54 const noiseValue = (1 - 0.5 * Math.sin(x * 0.02 - y * 0.04)) *
55 (1 - 0.5 * Math.cos(x * 0.03 + y * 0.04)) * 0.3;
56
57 const gradient = (1 - distanceFromCenter) *
58 (0.95 - distanceFromCenter * 0.4);
59 const finalValue = Math.max(
60 0,
61 Math.min(1, gradient * (Math.random() * 0.3 + 0.85 + noiseValue)),
62 );
63
64 data[i] = 121;
65 data[i + 1] = 219;
66 data[i + 2] = 160;
67 data[i + 3] = Math.floor(finalValue * 255.99); // Alpha
68 x++;
69 }
70 blobTextureCanvas = new OffscreenCanvas(blobSize, blobSize);
71 blobTextureCtx = blobTextureCanvas.getContext("2d")!;
72 blobTextureCtx.putImageData(blobTexture, 0, 0);
73 }
74
75 class CotyledonParticle {
76 x: number;
77 y: number;
78 size: number;
79 velocityX: number;
80 velocityY: number;
81 rotation: number;
82 rotationSpeed: number;
83 color: string;
84
85 constructor(positioning: "random" | "edge") {
86 this.size = Math.random() * 0.1 + 0.6;
87
88 if (positioning === "edge") {
89 const edge = Math.floor(Math.random() * 5);
90 if (edge === 0 || edge === 1) {
91 // Right edge
92 this.x = 1.05;
93 this.y = Math.random();
94 this.velocityX = -Math.random() * 0.1 - 0.2;
95 this.velocityY = 0;
96 } else if (edge === 2 || edge === 3) {
97 // Top edge
98 this.x = Math.random();
99 this.y = -0.05;
100 this.velocityX = -Math.random() * 0.1 - 0.1;
101 this.velocityY = -Math.random() * 0.2 - 0.05;
102 } else {
103 // Bottom edge
104 this.x = Math.random() * 0.5 + 0.5;
105 this.y = 1.05;
106 this.velocityX = Math.random() * 0.1 + 0.1;
107 this.velocityY = -Math.random() * 0.3 - 0.1;
108 }
109 } else {
110 let tries = 0;
111 do {
112 this.x = Math.random();
113 this.y = Math.random();
114 this.velocityX = -Math.random() * 0.05 - 0.1;
115 this.velocityY = -Math.random() * 0.2 + 0.1;
116 } while (this.tooCloseToAnyOtherParticle() && (tries++ < 10));
117 }
118
119 this.rotation = Math.random() * Math.PI * 2;
120 this.rotationSpeed = (Math.random() * 0.003 - 0.0015) *
121 (Math.random() > 0.5 ? 1 : -1);
122
123 const opacity = Math.random() * 0.4 + 0.2;
124 this.color = `rgba(${
125 base.map((x) => x + Math.floor(x * opacity)).join(",")
126 }, 1)`;
127 }
128
129 tooCloseToAnyOtherParticle() {
130 for (let i = 0; i < cotyledonParticles.length; i++) {
131 const otherParticle = cotyledonParticles[i];
132 const distance = Math.sqrt(
133 (this.x - otherParticle.x) ** 2 + (this.y - otherParticle.y) ** 2,
134 );
135 if (distance < 0.1) {
136 return true;
137 }
138 }
139 }
140
141 update() {
142 if (this.velocityY < 0.01) {
143 this.velocityY += 0.00025;
144 }
145 this.velocityX -= 0.0001;
146 this.x += this.velocityX / 1300;
147 this.y += this.velocityY / 1000;
148 this.rotation += this.rotationSpeed;
149 return this.x < -0.05 || (this.y > 1 && this.velocityY < 0);
150 }
151
152 draw() {
153 if (!ctx) return;
154
155 ctx.save();
156 ctx.translate(this.x * canvas.width, this.y * canvas.height);
157 ctx.rotate(this.rotation);
158 ctx.scale(this.size, this.size);
159 ctx.translate(-50, -50);
160 ctx.fillStyle = this.color;
161 ctx.fill(clover);
162 ctx.restore();
163 }
164 }
165
166 class BlobParticle {
167 x: number;
168 y: number;
169 opacity: number;
170 state: 0 | 1 | 2;
171 stateTime: number;
172 stayDuration: number;
173 innerColor: string;
174 rot: number = Math.random() * Math.PI * 2;
175
176 constructor() {
177 this.x = Math.random() * 0.6 + 0.2;
178 this.y = Math.random() * 0.6 + 0.2;
179
180 this.opacity = 0; // Start fully transparent
181
182 this.state = 0;
183 this.stateTime = 0;
184 this.stayDuration = Math.random() * 10000 + 5000; // Random stay duration between 5-15 seconds
185
186 const colorMultiplier = Math.random() * 0.5 + 1.5; // 0.5-1.0 multiplier
187 const colorValues = base.map((x) => Math.floor(x * colorMultiplier));
188 this.innerColor = `rgba(${colorValues.join(",")}, 1)`;
189 }
190
191 update(deltaTime: number) {
192 this.stateTime += deltaTime;
193
194 if (this.state === 0) {
195 this.opacity = Math.min(1, this.stateTime / 15000);
196 if (this.stateTime >= 15000) {
197 this.state = 1;
198 this.stateTime = 0;
199 }
200 } else if (this.state === 1) {
201 if (this.stateTime >= this.stayDuration) {
202 this.state = 2;
203 this.stateTime = 0;
204 }
205 } else if (this.state === 2) {
206 this.opacity = Math.max(0, 1 - (this.stateTime / 15000));
207 if (this.stateTime >= 15000) {
208 return true;
209 }
210 }
211 return false;
212 }
213
214 draw() {
215 if (!ctx) return;
216
217 const screenX = this.x * canvas.width;
218 const screenY = this.y * canvas.height;
219 const screenSize = (Math.min(canvas.width, canvas.height) * 2) / blobSize;
220
221 ctx.save();
222 ctx.translate(screenX - screenSize * 0.5, screenY - screenSize * 0.5);
223 ctx.scale(screenSize, screenSize);
224 ctx.rotate(this.rot);
225 ctx.globalAlpha = this.opacity * 0.2;
226 ctx.globalCompositeOperation = "overlay";
227 ctx.drawImage(blobTextureCanvas, 0, 0);
228 ctx.restore();
229 }
230 }
231
232 const cotyledonParticles: CotyledonParticle[] = [];
233 const blobParticles: BlobParticle[] = [];
234 let blobParticleTop: BlobParticle = new BlobParticle();
235 for (let i = 0; i < 80; i++) {
236 cotyledonParticles.push(new CotyledonParticle("random"));
237 }
238 for (let i = 0; i < 9; i++) {
239 const blobParticle = new BlobParticle();
240 if (i < 4) {
241 blobParticle.state = 1;
242 blobParticle.opacity = 1;
243 blobParticle.stayDuration = Math.random() * 10000;
244 } else {
245 blobParticle.state = i < 7 ? 2 : 0;
246 blobParticle.stateTime = Math.random() * 15000;
247 }
248 if (i > 0) {
249 do {
250 blobParticle.x = Math.random();
251 blobParticle.y = Math.random();
252 } while (
253 blobParticles.some((p) =>
254 Math.sqrt((p.x - blobParticle.x) ** 2 + (p.y - blobParticle.y) ** 2) <
255 0.1
256 )
257 );
258 }
259 blobParticles.push(blobParticle);
260 }
261
262 let lastTime = performance.now();
263
264 function animate(currentTime: number) {
265 if (!running) return;
266 if (!ctx) return;
267
268 const deltaTime = currentTime - lastTime;
269 lastTime = currentTime;
270
271 ctx.clearRect(0, 0, canvas.width, canvas.height);
272
273 for (let i = blobParticles.length - 1; i >= 0; i--) {
274 const shouldRemove = blobParticles[i].update(deltaTime);
275 if (shouldRemove) {
276 blobParticles[i] = new BlobParticle();
277 } else {
278 blobParticles[i].draw();
279 }
280 }
281
282 for (let i = cotyledonParticles.length - 1; i >= 0; i--) {
283 const shouldRemove = cotyledonParticles[i].update();
284 if (shouldRemove) {
285 cotyledonParticles[i] = new CotyledonParticle("edge");
286 } else {
287 cotyledonParticles[i].draw();
288 }
289 }
290
291 if (blobParticleTop.update(deltaTime)) {
292 blobParticleTop = new BlobParticle();
293 }
294 blobParticleTop.draw();
295
296 requestAnimationFrame(animate);
297 }
298
299 let clickedButton = false;
300 const enterButton = panel.querySelector("button#enter")!;
301 enterButton.addEventListener("click", () => {
302 if (clickedButton) return;
303 clickedButton = true;
304 const first = panel.querySelector("#first")! as HTMLElement;
305 const second = panel.querySelector("#captcha")! as HTMLElement;
306 first.style.transition = second.style.transition = "opacity 1s ease-in-out";
307 first.style.opacity = "0";
308 second.style.opacity = "0";
309 setTimeout(() => {
310 first.style.display = "none";
311 second.style.display = "block";
312 setTimeout(() => {
313 second.style.opacity = "1";
314
315 document.getElementById("enter2")?.addEventListener("click", () => {
316 second.style.opacity = "0";
317 let p = fetch("/file/cotyledon", {
318 method: "POST",
319 body: "I AGREE",
320 });
321 setTimeout(() => {
322 p.then(() => {
323 location.reload();
324 });
325 }, 1000);
326 });
327 }, 10);
328 }, 1000);
329 });
330 const imageButtons = panel.querySelectorAll(".image-grid button")!;
331 imageButtons.forEach((button) => {
332 let canClick = true;
333 button.addEventListener("click", () => {
334 if (!canClick) return;
335 canClick = false;
336 const image = button.querySelector("img")!;
337 image.style.transition = "opacity 0.05s linear";
338 image.style.opacity = "0";
339 setTimeout(() => {
340 image.style.transition = "opacity 2s linear";
341 let newNum;
342 do {
343 newNum = Math.floor(Math.random() * 18); // 0-17 inclusive
344 } while (
345 document.querySelector(`img[src="/captcha/image/${newNum}.jpeg"]`)
346 );
347 image.setAttribute("src", `/captcha/image/${newNum}.jpeg`);
348 setTimeout(() => {
349 image.style.opacity = "0.75";
350 canClick = true;
351 }, 50);
352 }, 300);
353 });
354 });
355
356 // Start animation
357 animate(performance.now());
358 return () => {
359 window.removeEventListener("resize", resizeCanvas);
360 running = false;
361 };
362};
src/file-viewer/static/captcha/0.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/0.jpeg differ
src/file-viewer/static/captcha/1.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/1.jpeg differ
src/file-viewer/static/captcha/10.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/10.jpeg differ
src/file-viewer/static/captcha/11.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/11.jpeg differ
src/file-viewer/static/captcha/12.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/12.jpeg differ
src/file-viewer/static/captcha/13.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/13.jpeg differ
src/file-viewer/static/captcha/14.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/14.jpeg differ
src/file-viewer/static/captcha/15.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/15.jpeg differ
src/file-viewer/static/captcha/16.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/16.jpeg differ
src/file-viewer/static/captcha/17.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/17.jpeg differ
src/file-viewer/static/captcha/2.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/2.jpeg differ
src/file-viewer/static/captcha/3.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/3.jpeg differ
src/file-viewer/static/captcha/4.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/4.jpeg differ
src/file-viewer/static/captcha/5.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/5.jpeg differ
src/file-viewer/static/captcha/6.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/6.jpeg differ
src/file-viewer/static/captcha/7.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/7.jpeg differ
src/file-viewer/static/captcha/8.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/8.jpeg differ
src/file-viewer/static/captcha/9.jpeg created
Binary files /dev/null and b/src/file-viewer/static/captcha/9.jpeg differ
src/file-viewer/views/canvas.astro created+12
......@@ -0,0 +1,12 @@
1---
2import { useInlineScript } from "../framework/page-resources.ts";
3
4const { script } = Astro.props;
5useInlineScript('canvas_' + script as any);
6useInlineScript('canvas_demo');
7---
8<canvas id="canvas"
9 data-canvas={script}
10 data-standalone="true"
11 style="position: fixed; top: 0; left: 0; width: 100vw; height: 100vh;"
12></canvas>
src/file-viewer/views/canvas.client.ts created+10
......@@ -0,0 +1,10 @@
1const canvas = document.querySelector("canvas");
2const id = canvas?.getAttribute("data-canvas");
3if (!id) {
4 throw new Error("No canvas id found");
5}
6const func = (window as any)["canvas_" + id];
7if (!func) {
8 throw new Error("No canvas function found");
9}
10func(canvas, document.body);
src/file-viewer/views/clofi.client.ts created+685
......@@ -0,0 +1,685 @@
1const filesContainer = document.querySelector(".files")!;
2
3// push the scrollbar to the end of the view.
4let distanceFromEnd = 0;
5let fakeScrollToEnd: number | null = null;
6filesContainer.scrollLeft = filesContainer.scrollWidth -
7 filesContainer.clientWidth;
8window.addEventListener("resize", () => {
9 if (fakeScrollToEnd) return;
10 const { scrollWidth, clientWidth } = filesContainer;
11 if (scrollWidth <= clientWidth) {
12 distanceFromEnd = 0;
13 } else {
14 filesContainer.scrollLeft = scrollWidth - clientWidth - distanceFromEnd;
15 }
16}, { passive: false });
17let lastScrollLeft = filesContainer.scrollLeft;
18filesContainer.addEventListener("scroll", (ev) => {
19 const { scrollWidth, scrollLeft, clientWidth } = filesContainer;
20 if (scrollWidth <= clientWidth) {
21 distanceFromEnd = 0;
22 } else {
23 distanceFromEnd = scrollWidth - scrollLeft - clientWidth;
24 if (fakeScrollToEnd && scrollLeft < lastScrollLeft) {
25 cancelAnimationFrame(fakeScrollToEnd);
26 fakeScrollToEnd = null;
27 }
28 }
29 lastScrollLeft = scrollLeft;
30});
31const lerp = (a: number, b: number, t: number) => a + t * (b - a);
32function snapToEnd(initScrollStart: number) {
33 if (fakeScrollToEnd) {
34 cancelAnimationFrame(fakeScrollToEnd);
35 }
36 let lastTime = performance.now();
37 let scrollStart = initScrollStart ?? filesContainer.scrollLeft;
38 if (scrollStart >= filesContainer.scrollWidth) {
39 return;
40 }
41 fakeScrollToEnd = requestAnimationFrame(function tick() {
42 const now = performance.now();
43 const dt = now - lastTime;
44 lastTime = now;
45
46 const f = 1 - (0.98 ** dt);
47 const { scrollWidth, clientWidth } = filesContainer;
48 const target = Math.floor(scrollWidth - clientWidth);
49 scrollStart = lerp(scrollStart, target, f);
50 filesContainer.scrollLeft = scrollStart;
51 if (Math.abs(scrollStart - target) < 0.2) {
52 fakeScrollToEnd = null;
53 } else {
54 fakeScrollToEnd = requestAnimationFrame(tick);
55 }
56 });
57}
58
59interface CacheEntry {
60 html: string;
61 expires: number;
62}
63// It is intentional that the existing page is NOT put into the cache. This is
64// just to avoid the differences between the partials and the full page
65// (subtle differences in activeFilename & isLast)
66let currentFile: string = location.pathname.replace(/^\/file/, "");
67let navigationId = 0;
68const cache = new Map<string, CacheEntry>();
69const prefetching = new Map<string, Promise<CacheEntry>>();
70const fetchLater: string[] = [];
71let hasCotyledonSpeedbump = false;
72
73function prefetchEntry(
74 filePath: string,
75 lazy = false,
76): void | Promise<CacheEntry> {
77 console.assert(filePath[0] === "/", "filePath must start with a /");
78 const existingEntry = cache.get(filePath);
79 if (existingEntry) {
80 if (existingEntry.expires > Date.now()) {
81 return;
82 }
83 cache.delete(filePath);
84 }
85
86 const existingPromise = prefetching.get(filePath);
87 if (existingPromise) return existingPromise;
88
89 // lazy prefetches should be limited
90 if (lazy && prefetching.size > 2) {
91 if (!fetchLater.includes(filePath)) {
92 fetchLater.push(filePath);
93 }
94 return;
95 }
96
97 if (filePath === "/cotyledon") {
98 ensureCanvasReady("cotyledon");
99 }
100
101 const promise = fetch(`/file${filePath}$partial`)
102 .then((resp) => {
103 if (resp.status !== 200) {
104 throw new Error(`Failed to fetch ${filePath}`);
105 }
106 return resp.text();
107 })
108 .then((html) => {
109 const entry: CacheEntry = { html, expires: Date.now() + 1000 * 60 * 20 };
110 cache.set(filePath, entry);
111 prefetching.delete(filePath);
112
113 if (fetchLater.length > 0 && prefetching.size < 2) {
114 const filePath = fetchLater.shift()!;
115 prefetchEntry(filePath, false);
116 }
117
118 return entry;
119 });
120 prefetching.set(filePath, promise);
121
122 return promise;
123}
124
125function fetchEntry(filePath: string): Promise<CacheEntry> {
126 const pf = prefetchEntry(filePath);
127 if (pf) return pf;
128 return Promise.resolve(cache.get(filePath)!);
129}
130
131type CanvasFn = (canvas: HTMLCanvasElement, panel: HTMLElement) => void;
132const fetchCanvas = new Map<string, Promise<CanvasFn>>();
133function ensureCanvasReady(id: string): Promise<CanvasFn> {
134 let func = (globalThis as any)["canvas_" + id];
135 if (func) return Promise.resolve(func);
136 let promise = fetchCanvas.get(id);
137 if (promise) return promise;
138 let resolve: (c: CanvasFn) => void;
139 promise = new Promise<CanvasFn>((r) => resolve = r);
140 fetchCanvas.set(id, promise);
141 const script = document.createElement("script");
142 script.src = `/js/canvas/${id}.js`;
143 script.async = true;
144 script.onload = () => {
145 func = (globalThis as any)["canvas_" + id];
146 fetchCanvas.delete(id);
147 if (func) {
148 resolve(func);
149 } else {
150 console.error(`Error loading canvas script: ${id}`);
151 }
152 };
153 script.onerror = () => {
154 console.error(`Error loading canvas script: ${id}`);
155 };
156 document.head.appendChild(script);
157 return promise;
158}
159
160interface Tooltip {
161 tooltip: HTMLElement;
162 top: number;
163 index: number;
164}
165
166const panels: Panel[] = [];
167
168class Panel {
169 index: number;
170 panel: HTMLElement;
171 content: HTMLElement;
172 width: number;
173 tooltips: Tooltip[] | null;
174 linkFlags: number[] | null = null;
175 basenames: string[] | null = null;
176 unmountCanvas: (() => void) | null = null;
177
178 constructor(panel: HTMLElement, index: number) {
179 console.assert(panel.classList.contains("panel"));
180 this.panel = panel;
181 this.index = index;
182 this.content = panel.querySelector(".content.primary")!;
183
184 if (index === 0) {
185 this.panel.classList.add("first");
186 }
187
188 const canvas = panel.querySelector(
189 "canvas[data-canvas]",
190 ) as HTMLCanvasElement;
191 if (canvas) {
192 canvas.width = canvas.clientWidth;
193 canvas.height = canvas.clientHeight;
194 requestAnimationFrame(() => {
195 canvas.width = canvas.clientWidth;
196 canvas.height = canvas.clientHeight;
197 });
198 const id = canvas.getAttribute("data-canvas")!;
199 let cancelled = false;
200 this.unmountCanvas = () => (cancelled = true);
201 ensureCanvasReady(id).then((func) => {
202 if (cancelled) return;
203 this.unmountCanvas = func(canvas, panel) as any;
204 });
205 if (id === "cotyledon") {
206 filesContainer.classList.add("ctld-sb");
207 const group = document.querySelector(
208 "[data-group='cotyledon']",
209 )! as HTMLElement;
210 if (group) {
211 group.setAttribute("inert", "true");
212 group.style.opacity = "0.5";
213 group.style.pointerEvents = "none";
214 hasCotyledonSpeedbump = true;
215 }
216 }
217 }
218
219 const ul = panel.querySelector("ul");
220 if (!ul) {
221 this.width = 0;
222 this.linkFlags = null;
223 this.basenames = null;
224 this.tooltips = null;
225 return;
226 }
227 this.width = ul.offsetWidth;
228 const links = panel.querySelectorAll("ul > li > a.li");
229
230 this.content.setAttribute("data-clover", `${index}`);
231
232 this.tooltips = [];
233 this.linkFlags = new Array(links.length).fill(0);
234 const basenames = this.basenames = new Array(links.length);
235 for (let i = 0; i < links.length; i++) {
236 const link = links[i] as HTMLAnchorElement;
237 link.setAttribute("data-clover", `${index};${i}`);
238 link.addEventListener("mouseenter", onLinkMouseEnter);
239 basenames[i] = link.classList.contains("readme")
240 ? "readme.txt"
241 : link.getAttribute("href")!.split("/").pop()!;
242 }
243 }
244
245 update(newActiveFile: string) {
246 console.assert(newActiveFile);
247 const p = this.panel;
248 p.querySelector(".li.active")?.classList.remove("active");
249 const basenames = this.basenames;
250 if (!basenames) return;
251 const ul = p.querySelector("ul")!;
252 this.width = ul.offsetWidth;
253 console.assert(!newActiveFile.includes("/"));
254 if (hasCotyledonSpeedbump) {
255 newActiveFile = "__";
256 }
257
258 const linkIndex = basenames.indexOf(newActiveFile);
259 if (linkIndex === -1) return;
260 const link = p.querySelector(`[data-clover="${this.index};${linkIndex}"]`)!;
261 link.classList.add("active");
262
263 const newActiveTooltip = this.tooltips!.findIndex((t) =>
264 t.index === linkIndex
265 );
266 for (let i = 0; i < this.tooltips!.length; i++) {
267 const { tooltip } = this.tooltips![i];
268 tooltip.classList[i === newActiveTooltip ? "add" : "remove"]("active");
269 }
270 }
271
272 hideReadme() {
273 this.panel.classList.remove("last");
274 const lastHsplit = this.panel.querySelector(".hsplit")!;
275 if (lastHsplit) {
276 lastHsplit.className = "hsplit-hidden";
277 const previousReadme = this.panel.querySelector(
278 ".content.readme",
279 )! as HTMLElement;
280 console.assert(previousReadme, "No readme found");
281 previousReadme.style.display = "none";
282 }
283 }
284
285 showReadme() {
286 this.panel.classList.add("last");
287 const hsplit = this.panel.querySelector(".hsplit-hidden")!;
288 if (hsplit) {
289 hsplit.className = "hsplit";
290 const previousReadme = this.panel.querySelector(
291 ".content.readme",
292 )! as HTMLElement;
293 console.assert(previousReadme, "No readme found");
294 previousReadme.style.display = "block";
295 }
296 }
297
298 destroy() {
299 if (this.unmountCanvas) {
300 this.unmountCanvas();
301 }
302 this.panel.querySelectorAll("audio,video").forEach((el) =>
303 (el as HTMLVideoElement | HTMLAudioElement).pause()
304 );
305 this.panel.remove();
306 }
307}
308
309function onContentScrollForTooltip(ev: Event) {
310 const content = ev.target as HTMLElement;
311 const panelIndex = parseInt(content.getAttribute("data-clover")!);
312 const panel = panels[panelIndex];
313 const scrollTop = content.scrollTop;
314 for (const tooltip of panel.tooltips!) {
315 tooltip.tooltip.style.transform = tooltipTransform(tooltip.top, scrollTop);
316 }
317}
318
319function tooltipTransform(offsetTop: number, scrollTop: number) {
320 return `translateY(${offsetTop - scrollTop}px)`;
321}
322
323let activeTooltip: HTMLElement | null = null;
324let activeTooltipCancel: (() => void) | null = null;
325
326function onLinkMouseEnter(e: MouseEvent) {
327 const link = e.target as HTMLAnchorElement;
328 console.assert(link.classList.contains("li"));
329 const attr = link.getAttribute("data-clover")!;
330 console.assert(attr && attr.match(/^\d+;\d+$/));
331 const [panelIndex, linkIndex] = attr.split(";").map(Number);
332 const panel = panels[panelIndex];
333 console.assert(panel, `panel${panelIndex}`);
334 const linkWidths = panel.linkFlags;
335 let filePath: string | null = null;
336 if (linkWidths![linkIndex] == 0) {
337 // filter only links that truncate their text
338 // insane discovery: while this is recommended online, it doesn't
339 // account for the `...` itself, meaning when just the file size
340 // is truncated, a tooltip won't be available.
341 // > if (link.scrollWidth <= link.offsetWidth) continue;
342 const lastChild = link.lastElementChild! as HTMLElement;
343 linkWidths![linkIndex] = lastChild?.offsetLeft !== undefined
344 ? (lastChild.offsetLeft + lastChild.offsetWidth) ^ 0
345 : 1;
346
347 const href = (link as HTMLAnchorElement).getAttribute("href") ?? null;
348 filePath = href?.startsWith("/file") ? href.slice(5) || "/" : null;
349 }
350 if (filePath) {
351 prefetchEntry(filePath, true);
352 }
353 if (linkWidths![linkIndex] > panel.width) {
354 if (activeTooltipCancel) {
355 activeTooltipCancel();
356 activeTooltipCancel = null;
357 }
358 maybeBuildTooltipUi(link, linkIndex, panel);
359 }
360}
361
362function cancelOnMouseLeave() {
363 activeTooltipCancel!();
364 activeTooltipCancel = null;
365}
366
367function maybeBuildTooltipUi(
368 link: HTMLAnchorElement,
369 linkIndex: number,
370 panel: Panel,
371) {
372 if (activeTooltip) {
373 activeTooltip.remove();
374 buildTooltipUi(link, linkIndex, panel, false);
375 } else {
376 link.addEventListener("mouseleave", cancelOnMouseLeave);
377 const timer = setTimeout(() => {
378 activeTooltipCancel = null;
379 link.removeEventListener("mouseleave", cancelOnMouseLeave);
380 buildTooltipUi(link, linkIndex, panel, true);
381 }, 150);
382 activeTooltipCancel = () => {
383 clearTimeout(timer);
384 link.removeEventListener("mouseleave", cancelOnMouseLeave);
385 };
386 }
387}
388
389function buildTooltipUi(
390 link: HTMLAnchorElement,
391 linkIndex: number,
392 panel: Panel,
393 animateIn: boolean,
394) {
395 const tooltip = activeTooltip = document.createElement("div");
396 tooltip.classList.add("tooltip");
397 if (link.classList.contains("active")) {
398 tooltip.classList.add("active");
399 }
400 if (animateIn) {
401 tooltip.style.animation = "fadeIn .1s ease-out forwards";
402 }
403 tooltip.innerHTML = link.innerHTML;
404 const top = link.parentElement!.offsetTop;
405 tooltip.style.transform = tooltipTransform(top, panel.content.scrollTop);
406 panel.panel.appendChild(tooltip);
407 panel.tooltips!.push({ tooltip, top, index: linkIndex });
408 if (panel.tooltips!.length === 1) {
409 panel.content.addEventListener("scroll", onContentScrollForTooltip);
410 }
411
412 link.addEventListener("mouseleave", (e) => {
413 tooltip.style.animation = "fadeIn .3s .2s ease reverse forwards";
414 const timer = setTimeout(() => {
415 activeTooltipCancel = null;
416 tooltip.remove();
417 activeTooltip = null;
418
419 const tt = panel.tooltips = panel.tooltips!.filter((t) =>
420 t.tooltip !== tooltip
421 );
422 if (tt.length === 0) {
423 panel.content.removeEventListener("scroll", onContentScrollForTooltip);
424 }
425 }, 500);
426 activeTooltipCancel = () => {
427 clearTimeout(timer);
428 };
429 }, { once: true });
430}
431
432function addPanel(panel: HTMLElement, activeFile?: string) {
433 const p = new Panel(panel, panels.length);
434 panels.push(p);
435 if (activeFile) {
436 p.update(activeFile);
437 }
438}
439
440async function maybeInterceptClick(event: MouseEvent, element: HTMLElement) {
441 const href = (element as HTMLAnchorElement).href;
442 const url = new URL(href, window.location.origin);
443 if (maybeNavigate(url, true)) {
444 event.preventDefault();
445 }
446}
447
448type URLLike = Pick<URL, "pathname" | "origin" | "search">;
449function maybeNavigate(url: URLLike, pushState: boolean) {
450 if (!url.pathname.startsWith("/file")) return false;
451 if (url.origin !== location.origin) return false;
452 if (url.search !== "") return false;
453 navigate(url.pathname, pushState);
454 return true;
455}
456
457async function navigate(pathname: string, pushState: boolean) {
458 const filePath = pathname.slice(5) || "/";
459
460 const currentNavigationId = ++navigationId;
461
462 if (filePath === currentFile) return;
463
464 const currentSplit = splitSlashes(currentFile);
465 const filePathSplit = splitSlashes(filePath);
466
467 // Find the first index where the currentSplit and filePathSplit differ, then
468 // add all the paths after that to panelsToFetch
469 let deleteCount = Math.max(currentSplit.length - filePathSplit.length, 0);
470 let appendPanels = [];
471 for (let i = -1; i < filePathSplit.length; i++) {
472 if (currentSplit[i] !== filePathSplit[i]) {
473 deleteCount = currentSplit.length - i;
474 appendPanels = [];
475 for (let j = i; j < filePathSplit.length; j++) {
476 appendPanels.push("/" + filePathSplit.slice(0, j + 1).join("/"));
477 }
478 break;
479 }
480 }
481
482 // Before fetching, prepare to mark the panels as loading
483 const loadingPanels = new Set<HTMLElement>();
484 {
485 let lastPanel = filesContainer.lastElementChild;
486 let toDelete = deleteCount;
487 while (lastPanel && toDelete > 0) {
488 lastPanel.querySelectorAll(".content").forEach((content) => {
489 loadingPanels.add(content as HTMLElement);
490 });
491 lastPanel = lastPanel.previousElementSibling;
492 toDelete--;
493 }
494 if (deleteCount == 0) {
495 const last = filesContainer.lastElementChild!;
496 console.assert(last, "Last panel is not a panel");
497
498 const readme = last.querySelector(".content.readme")!;
499 if (readme) {
500 loadingPanels.add(readme as HTMLElement);
501 }
502 }
503 const folderWithReadme = panels[panels.length - deleteCount - 1];
504 const readmes = folderWithReadme.panel.querySelectorAll(".readme");
505 if (readmes.length === 1) {
506 deleteCount += 1;
507 appendPanels.unshift(
508 "/" + currentSplit.slice(0, panels.length - deleteCount).join("/"),
509 );
510 }
511 }
512
513 console.assert(
514 deleteCount > 0 || appendPanels.length > 0,
515 "No difference found",
516 );
517 let timer = loadingPanels.size > 0
518 ? setTimeout(() => {
519 if (navigationId !== currentNavigationId) {
520 return; // cancelled
521 }
522 document.querySelectorAll(".loading")
523 .forEach((thing) => thing.classList.remove("loading"));
524 for (const panel of loadingPanels) {
525 panel.classList.add("loading");
526 }
527 timer = null;
528 }, 100)
529 : null;
530
531 // Fetch the data
532 let appendEntries;
533 try {
534 appendEntries = await Promise.all(appendPanels.map(fetchEntry));
535 } catch (e) {
536 console.error("error", e);
537 if (navigationId === currentNavigationId) {
538 console.error(e);
539 location.href = "/file" + (filePath.length > 1 ? filePath : "");
540 }
541 return; // cancelled
542 }
543 if (navigationId !== currentNavigationId) {
544 return; // cancelled
545 }
546 if (timer) clearTimeout(timer);
547 else {for (const panel of loadingPanels) {
548 panel.classList.remove("loading");
549 }}
550 currentFile = filePath;
551
552 if (pushState) {
553 history.pushState(null, "", `/file${filePath.length > 1 ? filePath : ""}`);
554 }
555
556 const startScrollleft = filesContainer.scrollLeft;
557
558 if (currentSplit[0] !== filePathSplit[0]) {
559 if (currentSplit[0] === "cotyledon") {
560 filesContainer.classList.remove("ctld-et", "ctld-sb");
561 }
562 if (parseInt(currentSplit[0]) < 2025) {
563 filesContainer.classList.remove("ctld", "ctld-" + currentSplit[0]);
564 }
565 if (parseInt(filePathSplit[0]) < 2025) {
566 filesContainer.classList.add("ctld", "ctld-" + filePathSplit[0]);
567 }
568 }
569
570 // Make the last panel into a regular panel
571 panels[panels.length - 1].hideReadme();
572
573 // Delete the panels that are no longer needed
574 for (let i = 0; i < deleteCount; i++) {
575 const panel = panels.pop();
576 console.assert(panel, "No panel found");
577 if (panel) {
578 panel.destroy();
579 }
580 }
581
582 // Update the last panel
583 const currentFileSplit = splitSlashes(currentFile);
584 const activeFile = currentFileSplit[panels.length - 1];
585 panels[panels.length - 1]?.update(activeFile ?? "readme.txt");
586
587 // Insert the new panels
588 if (appendEntries.length > 0) {
589 let lastNewPanel: HTMLElement | null = null;
590 for (const entry of appendEntries) {
591 const panel = document.createElement("div");
592 panel.classList.add("panel");
593 if (panels.length >= 2) {
594 panel.classList.add("fade-slide-in");
595 }
596 panel.innerHTML = entry.html;
597 filesContainer.appendChild(panel);
598 lastNewPanel = panel;
599 const current = currentFileSplit[panels.length];
600 addPanel(panel, current ?? "readme.txt");
601 if (current) {
602 panels[panels.length - 1].hideReadme();
603 }
604 }
605 console.assert(lastNewPanel, "No last new panel found");
606 lastNewPanel!.classList.add("last");
607
608 // Automatically play videos
609 const video = lastNewPanel!.querySelector("video") ||
610 lastNewPanel!.querySelector("audio");
611 if (video) {
612 const timer = setTimeout(() => {
613 video.play();
614 }, 50);
615 video.play().then(() => {
616 clearTimeout(timer);
617 }, () => {});
618 }
619 } else {
620 // Make the last panel the .last panel
621 const lastPanel = filesContainer.lastElementChild!;
622 console.assert(lastPanel, "No last panel found");
623 lastPanel.classList.add("last");
624 panels[panels.length - 1].showReadme();
625 }
626
627 updateWidths();
628 filesContainer.scrollLeft = startScrollleft;
629 requestAnimationFrame(() => {
630 updateWidths();
631 filesContainer.scrollLeft = startScrollleft;
632 snapToEnd(startScrollleft);
633 });
634}
635
636function updateWidths() {
637 for (const panel of panels.slice(-2)) {
638 const ul = panel.panel.querySelector("ul")!;
639 if (ul) {
640 panel.width = ul.offsetWidth;
641 }
642 }
643}
644
645function splitSlashes(path: string) {
646 if (path.length <= 1) return [];
647 return path.slice(1).split("/");
648}
649
650requestAnimationFrame(() => {
651 document.querySelectorAll(".panel").forEach((panel) =>
652 addPanel(panel as HTMLElement)
653 );
654 (document.querySelector(".files")! as HTMLElement).addEventListener(
655 "click",
656 (event, element = event.target as HTMLAnchorElement) => {
657 if (
658 !(event.button ||
659 event.which != 1 ||
660 event.metaKey ||
661 event.ctrlKey ||
662 event.shiftKey ||
663 event.altKey ||
664 event.defaultPrevented)
665 ) {
666 while (element && element !== document.body) {
667 if (
668 element.nodeName.toUpperCase() === "A"
669 ) {
670 maybeInterceptClick(event, element);
671 return;
672 }
673 element =
674 (element.assignedSlot ?? element.parentNode) as HTMLAnchorElement;
675 }
676 }
677 },
678 );
679});
680
681window.addEventListener("popstate", (event) => {
682 if (!maybeNavigate(window.location, false)) {
683 location.reload();
684 }
685});
src/file-viewer/views/clofi.css created+798
......@@ -0,0 +1,798 @@
1html, body {
2 height: 100vh;
3 width: 100vw;
4 overflow: hidden;
5 --dark-bg: #27143f;
6 --bar: #804fc9;
7}
8@font-face {
9 font-family: c1;
10 src: url(/cydn_header.woff2);
11 font-variation-settings: "wght" 50;
12}
13body {
14 display: grid;
15 background-color: var(--dark-bg);
16}
17.files {
18 background-color: var(--bg);
19 --scroll-bg: var(--dark-bg);
20 display: flex;
21 flex-direction: row;
22 overflow-x: scroll;
23 overflow-y: hidden;
24 min-height: 100vh;
25 border-bottom: 0;
26 box-sizing: border-box;
27 --tooltip: lch(from var(--bg) calc(l - 2) c h);
28 --muted: lch(from var(--dark-bg) 60 20 h / 0.8);
29 z-index: 1;
30}
31.ctld {
32 --c: 4.5;
33 --bg: lch(13 var(--c) var(--hue));
34 --dark-bg: lch(10 var(--c) var(--hue));
35 --bar: lch(90 96 var(--hue));
36 --primary: lch(90 96 var(--hue));
37}
38.ctld-2017 {
39 --hue: 120;
40}
41.ctld-2018 {
42 --hue: 40;
43}
44.ctld-2019 {
45 --hue: 290;
46 --c: 10;
47}
48.ctld-2020 {
49 --hue: 220;
50 --c: 10;
51}
52.ctld-2021 {
53 --hue: 70;
54 --c: 20;
55}
56.ctld-2022 {
57 --hue: 150;
58 --c: 20;
59}
60.ctld-2023 {
61 --hue: 5;
62 --c: 10;
63}
64.ctld-et {
65 --hue: 150;
66 --c: 0;
67}
68.ctld-2024, .ctld-sb {
69 --bg: #191919;
70 --dark-bg: #101010;
71 --fg: #a7a7a7;
72 --bar: white;
73 --primary: white;
74 .active {
75 font-weight: bold;
76 }
77}
78.ctld-2024 {
79 --dark-bg: #00000080;
80 --scroll-bg: #0000004d;
81 .content:not(.file-view-image):not(.file-view-video):not(.file-view-audio) {
82 background-color: #00000050;
83 }
84}
85.ctld-2024 .convo {
86 --primary: #ff6c5c;
87}
88.files::-webkit-scrollbar {
89 height: 24px;
90 background-color: transparent;
91}
92.files::-webkit-scrollbar-thumb {
93 background-color: var(--bar);
94 border: 6px solid var(--dark-bg);
95 border-radius: 12px;
96}
97.files::-webkit-scrollbar-track {
98 background-color: var(--dark-bg);
99}
100.files .panel {
101 position: relative;
102 flex: 0 0 auto;
103 min-width: 235px;
104 max-width: 235px;
105 height: 100%;
106 min-height: calc(100vh - 59px); /* safari hack */
107 display: flex;
108 flex-direction: column;
109}
110.files .panel div.header {
111 display: none;
112}
113.files .panel .header {
114 white-space: nowrap;
115 font-size: 1rem;
116 font-weight: bold;
117 background-color: var(--dark-bg);
118 padding: 0.5rem 0.5rem 0.5rem 0.25rem;
119 color: var(--primary);
120 --color: var(--primary);
121 overflow: hidden;
122 text-overflow: ellipsis;
123 flex-shrink: 0;
124}
125.actions {
126 display: flex;
127 gap: 0.5rem;
128 height: 19px;
129 margin-right: 4px;
130 & > * {
131 position: relative;
132 width: 22px;
133 display: flex;
134 &::before {
135 position: absolute;
136 top: -3px;
137 width: 24px;
138 height: 24px;
139 }
140 }
141}
142.files .panel .content {
143 position: relative;
144 flex: 1;
145 overflow-y: scroll;
146 overflow-x: hidden;
147}
148a.header {
149 display: flex;
150}
151.files .panel.last {
152 min-width: min(calc(100vw - 255px), calc(90% - 20rem));
153 max-width: none;
154 div.header {
155 display: flex;
156 }
157 a.header {
158 display: none;
159 }
160}
161.files .panel.first:not(.last) {
162 max-width: 216px;
163 min-width: 216px;
164}
165.files .panel.first .content:not(.readme) {
166 max-width: 200px;
167 min-width: 200px;
168}
169.panel:first-child {
170 border-left: 16px solid var(--dark-bg);
171}
172.panel:last-child {
173 flex: 1;
174}
175.files .panel .hsplit {
176 display: flex;
177 flex-direction: row-reverse;
178 height: calc(100vh - 59px);
179 .content {
180 min-width: 235px;
181 flex: 0 0 auto;
182 }
183 .content.readme {
184 min-width: 300px;
185 flex: 1;
186 }
187}
188.content {
189 height: calc(100vh - 59px);
190}
191.files .panel ul {
192 white-space: nowrap;
193 list-style-type: none;
194 display: flex;
195 flex-direction: column;
196 &, li {
197 margin: 0;
198 padding: 0;
199 }
200 li a {
201 &:active {
202 --muted: red !important;
203 }
204 position: relative;
205 display: block;
206 text-overflow: ellipsis;
207 font-size: 0.5rem;
208 overflow: hidden;
209 color: var(--muted);
210 & > * {
211 color: var(--fg);
212 font-size: 1rem;
213 }
214 &:hover:not(.active) {
215 background-color: rgb(from var(--dark-bg) r g b / 0.5);
216 }
217 &:active {
218 background-color: var(--dark-bg) !important;
219 color: red;
220 date {
221 color: red;
222 }
223 }
224 }
225}
226.li, .tooltip {
227 padding: 0.5rem 0.2rem 0.5rem 0.2rem;
228 color: var(--fg);
229 &.active {
230 background-color: var(--dark-bg);
231 color: var(--primary);
232 --color: var(--primary);
233 --muted: var(--primary);
234 }
235 date {
236 color: var(--muted);
237 letter-spacing: -0.08em;
238 padding-right: 0.3rem;
239 transform: scaleX(0.95);
240 display: inline-block;
241 &.inline {
242 padding-right: 0;
243 }
244 }
245}
246pre {
247 padding: 1rem;
248 font-size: 1rem;
249}
250.files .panel ul a.readme {
251 display: flex;
252 font-weight: bold;
253 align-items: center;
254 color: #91fff2;
255 &.active {
256 --muted: #91fff2;
257 }
258 .line {
259 display: block;
260 width: 58px;
261 margin-right: 8px;
262 margin-left: 2px;
263 height: 2px;
264 background-color: var(--muted);
265 }
266}
267.panel .content::-webkit-scrollbar {
268 width: 10px;
269}
270.panel .content::-webkit-scrollbar-thumb {
271 background-color: var(--bar);
272 border: 2px solid var(--dark-bg);
273 border-radius: 8px;
274}
275.panel .content::-webkit-scrollbar-track {
276 background-color: var(--scroll-bg);
277}
278.tooltip {
279 position: absolute;
280 left: 0;
281 top: 35px;
282 background-color: var(--tooltip);
283 pointer-events: none;
284 padding-right: 1rem;
285 border-bottom-right-radius: 8px;
286 border-top-right-radius: 8px;
287 white-space: nowrap;
288 z-index: 100;
289}
290h3 {
291 padding-left: 0.25rem;
292 font-size: 1rem;
293 margin: 0;
294 margin-top: 8px;
295 margin-bottom: 2px;
296 text-decoration: underline;
297 text-underline-offset: 1px;
298 text-decoration-thickness: 2px;
299}
300@keyframes fadeIn {
301 from {
302 opacity: 0;
303 }
304 to {
305 opacity: 1;
306 }
307}
308.file-view {
309 display: flex;
310 flex-direction: column;
311}
312.bold-slash {
313 font-weight: bold;
314 text-shadow: 1px 0 0 var(--color);
315}
316.size {
317 display: inline-block;
318 font-size: 0.9rem;
319 color: var(--muted);
320 padding-left: 0.4rem;
321}
322.first .size {
323 display: inline-block;
324 font-size: 0.7rem;
325 padding-left: 0.2rem;
326 transform: translateY(1px);
327}
328.mobile-back {
329 display: none;
330}
331.actions .download::before {
332 content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiIGZpbGw9IiNmZmZmZmYiPjxwYXRoIGQ9Ik00ODAtMzIwIDI4MC01MjBsNTYtNTggMTA0IDEwNHYtMzI2aDgwdjMyNmwxMDQtMTA0IDU2IDU4LTIwMCAyMDBaTTI0MC0xNjBxLTMzIDAtNTYuNS0yMy41VDE2MC0yNDB2LTEyMGg4MHYxMjBoNDgwdi0xMjBoODB2MTIwcTAgMzMtMjMuNSA1Ni41VDcyMC0xNjBIMjQwWiIvPjwvc3ZnPg==);
333 transform: scale(1.2);
334}
335.actions .full-screen::before {
336 content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyNHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNMTIwLTEyMHYtMzIwaDgwdjE4NGw1MDQtNTA0SDUyMHYtODBoMzIwdjMyMGgtODB2LTE4NEwyNTYtMjAwaDE4NHY4MEgxMjBaIi8+PC9zdmc+);
337}
338.ico {
339 display: inline-block;
340 height: 19px;
341 position: relative;
342 width: 19px;
343 margin-right: 2px;
344 &::before {
345 content: " ";
346 position: absolute;
347 transform: translate(-2px, 3px);
348 width: 20px;
349 height: 20px;
350 background-color: var(--muted);
351 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNMjU5LjcyLTY0cS00MC40NSAwLTY5LjA4LTI4Ljc5UTE2Mi0xMjEuNTggMTYyLTE2MnYtNjM2cTAtNDAuNDIgMjguNzktNjkuMjFRMjE5LjU3LTg5NiAyNjAtODk2aDMwNGwyMzQgMjMzdjUwMXEwIDQwLjQyLTI4LjggNjkuMjFRNzQwLjQtNjQgNjk5Ljk2LTY0SDI1OS43MlpNNTA0LTYwMmgxOTZMNTA0LTc5OHYxOTZaIi8+PC9zdmc+);
352 }
353}
354.header .ico::before {
355 transform: translate(-2px, 0);
356}
357/* file icons alter the mask image. 24x24 */
358.ico-dir::before {
359 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNMTYzLjA0LTEyMC4wOXEtNTEuMyAwLTg3LjEyLTM1LjgzLTM1LjgzLTM1LjgyLTM1LjgzLTg3LjEydi00NzMuOTJxMC01MS4zIDM1LjgzLTg3LjEyIDM1LjgyLTM1LjgzIDg3LjEyLTM1LjgzaDIxMS41M0w0ODAtNzM0LjQ4aDMxNi45NnE1MS4zIDAgODcuMTIgMzUuODMgMzUuODMgMzUuODMgMzUuODMgODcuMTN2MzY4LjQ4cTAgNTEuMy0zNS44MyA4Ny4xMi0zNS44MiAzNS44My04Ny4xMiAzNS44M0gxNjMuMDRabTAtMTIyLjk1aDYzMy45MnYtMzY4LjQ4SDQyOS4yMkwzMjMuNzgtNzE2Ljk2SDE2My4wNHY0NzMuOTJabTAgMHYtNDczLjkyIDQ3My45MloiLz48L3N2Zz4=);
360}
361.active .ico-dir::before, .ico-dir-open::before {
362 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNMTU3LjgzLTEyNC42NXEtNDYuOTMgMC04MC4wNi0zMy4xMi0zMy4xMi0zMy4xMy0zMy4xMi04MC4wNnYtNDg0LjM0cTAtNDcuMTcgMzMuMTItODAuMTggMzMuMTMtMzMgODAuMDYtMzNoMjE2LjQxTDQ4MC03MjkuNTloMzIyLjE3cTQ3LjE3IDAgODAuMTggMzMuMTMgMzMgMzMuMTIgMzMgODAuMDVINDMzLjEzTDMyNy4zNy03MjIuMTdIMTU3LjgzdjQ3NC40NWw4NS40Ny0yODguNjloNzExLjcybC05MS4yOCAzMDYuMTVxLTE2LjY3IDU3LjMtNTAuOTIgODEuNDYtMzQuMjUgMjQuMTUtOTkuMDggMjQuMTVIMTU3LjgzWm0xMTUuODQtMTEzLjE4aDQ3My45NGw1NC42NS0xODUuNDFIMzI4LjA5bC01NC40MiAxODUuNDFabTAgMCA1NC40Mi0xODUuNDEtNTQuNDIgMTg1LjQxWk0xNTcuODMtNjE2LjQxdi0xMDUuNzYgMTA1Ljc2WiIvPjwvc3ZnPg==);
363}
364.ico-webpage::before {
365 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNNDgwLTY0cS04NiAwLTE2Mi0zMi41dC0xMzIuNS04OVExMjktMjQyIDk2LjUtMzE4VDY0LTQ4MHEwLTg2IDMyLjUtMTYydDg5LTEzMi41UTI0Mi04MzEgMzE4LTg2My41VDQ4MC04OTZxODYgMCAxNjIgMzIuNXQxMzIuNSA4OVE4MzEtNzE4IDg2My41LTY0MlQ4OTYtNDgwcTAgODYtMzIuNSAxNjJ0LTg5IDEzMi41UTcxOC0xMjkgNjQyLTk2LjVUNDgwLTY0Wm0wLTEwMnExNS0xNiAzMS02M3QyNS05OUg0MjRxOSA1MiAyNSA5OXQzMSA2M1ptLTEwMS0xMnEtMTMtMjctMjIuNS02NVQzNDAtMzI4SDIwMXEyNyA1NCA3NSA5My41VDM3OS0xNzhabTIwMiAwcTU1LTE3IDEwMy01Ni41dDc1LTkzLjVINjIwcS03IDQ3LTE2LjUgODVUNTgxLTE3OFpNMTcwLTQxMGgxNTlxLTEtMTctMS41LTM1LjVUMzI3LTQ4MnEwLTE4IC41LTM1LjVUMzI5LTU1MEgxNzBxLTUgMTctNi41IDM0LjVUMTYyLTQ4MHEwIDE4IDEuNSAzNS41VDE3MC00MTBabTI0MyAwaDEzNHEyLTE4IDIuNS0zNS41dC41LTM0LjVxMC0xNy0uNS0zNXQtMi41LTM1SDQxM3EtMiAxNy0yLjUgMzV0LS41IDM1cTAgMTcgLjUgMzV0Mi41IDM1Wm0yMTggMGgxNTlxNS0xNyA2LjUtMzQuNVQ3OTgtNDgwcTAtMTgtMS41LTM2dC02LjUtMzRINjMxcTEgMTcgMS41IDM1LjV0LjUgMzYuNXEwIDE4LS41IDM1LjVUNjMxLTQxMFptLTExLTIyMmgxMzlxLTI3LTU0LTc1LTkzLjVUNTgxLTc4MnExMyAyNyAyMi41IDY1dDE2LjUgODVabS0xOTYgMGgxMTJxLTktNTItMjUtOTguNVQ0ODAtNzk5cS0xNSAyMi0zMSA2OC41VDQyNC02MzJabS0yMjMgMGgxMzlxNy00NyAxNi41LTg1dDIyLjUtNjVxLTU1IDE3LTEwMyA1Ni41VDIwMS02MzJaIi8+PC9zdmc+);
366}
367.ico-image::before {
368 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNMjEyLTc2cS01Ny4xMiAwLTk2LjU2LTM5LjQ0UTc2LTE1NC44OCA3Ni0yMTJ2LTUzNnEwLTU3LjEzIDM5LjQ0LTk2LjU2UTE1NC44OC04ODQgMjEyLTg4NGg1MzZxNTcuMTMgMCA5Ni41NiAzOS40NFE4ODQtODA1LjEzIDg4NC03NDh2NTM2cTAgNTcuMTItMzkuNDQgOTYuNTZRODA1LjEzLTc2IDc0OC03NkgyMTJabTQtMTg2aDUyOEw1NzEtNTAyIDQ1MC0zNDFsLTkxLTEyMS0xNDMgMjAwWm0xMjQuMjQtMjcwcTM3LjE4IDAgNjIuNDctMjUuNTNRNDI4LTU4My4wNSA0MjgtNjIwLjI0cTAtMzcuMTgtMjUuNTMtNjIuNDdRMzc2Ljk1LTcwOCAzMzkuNzYtNzA4cS0zNy4xOCAwLTYyLjQ3IDI1LjUzUTI1Mi02NTYuOTUgMjUyLTYxOS43NnEwIDM3LjE4IDI1LjUzIDYyLjQ3UTMwMy4wNS01MzIgMzQwLjI0LTUzMloiLz48L3N2Zz4=);
369}
370.ico-video::before {
371 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNMTk4LTE2MnEtMzkuNzMgMC02OC44Ni0yOS4xNFExMDAtMjIwLjI3IDEwMC0yNjB2LTQ0MHEwLTQwLjQyIDI5LjE0LTY5LjIxUTE1OC4yNy03OTggMTk4LTc5OGg0NDBxNDAuNDIgMCA2OS4yMSAyOC43OVE3MzYtNzQwLjQyIDczNi03MDB2MTU0bDE3Mi0xNzJ2NDc2TDczNi00MTR2MTU0cTAgMzkuNzMtMjguNzkgNjguODZRNjc4LjQyLTE2MiA2MzgtMTYySDE5OFoiLz48L3N2Zz4=);
372}
373.ico-blend::before {
374 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiNmZmYiIHZpZXdCb3g9IjAgMCAyMCAyMCI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNi4zNiAxNC4xYy0uMTItLjM5LS4yLS45LS4yLTEuMTZsLS4wMi0uMDFjMC0uMjYuMDUtLjcuMDUtLjdsLTMuOSAzLjIxYy0uNy41Ni0xLjYxLjU1LTIuMDQgMC0uNDMtLjU0LS4yMS0xLjQuNDYtMS45MmwuMDMtLjAyIDcuMTktNS42LTQuMDIuMDFjLS42OCAwLTEuMTMtLjQ2LTEtMS4wMS4xMy0uNTUuNzYtLjk4IDEuNDEtLjk4aDcuOTRzLS42OC0xLjAzLTEuMzItMS41Yy0uNDctLjM1LTEuMi0uNzgtMS4yLS43OHMtLjQ2LS4xNy0xLjI4LS42OGMtLjgyLS41MS0uMi0xLjcuNTktMS45LjUgMCAxLjM4LjQzIDIuMjEuODMgMi44NCAxLjQgNS43IDQuMiA2LjMgNC44Mi41OS42MiAxLjEzIDEuMjUgMS41NCAxLjlhNS45IDUuOSAwIDAgMS0uNyA3LjE3IDcuNyA3LjcgMCAwIDEtMi4zIDEuOTUgNy40MyA3LjQzIDAgMCAxLTYuMS4wMWMtLjktLjQtMi4yMi0xLjU4LTIuMjItMS41OHMtMS4xNS0xLjIyLTEuNDItMi4wNVptNi44MiAxLjg4YzIuMyAwIDQuMTYtMS44IDQuMTYtNCAwLTIuMjEtMS44Ni00LTQuMTYtNFM5IDkuNzcgOSAxMS45OGMwIDIuMiAxLjg3IDQgNC4xNyA0WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PGVsbGlwc2UgY3g9IjEzLjI3IiBjeT0iMTIuMDYiIHJ4PSIxLjgxIiByeT0iMS45NSIvPjwvc3ZnPg==);
375}
376.ico-fusion::before {
377 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMCAyMCI+PGNpcmNsZSBjeD0iOS4yMiIgY3k9IjE3LjU4IiByPSIxLjUiIGZpbGw9IiNEOUQ5RDkiLz48cGF0aCBmaWxsPSIjRDlEOUQ5IiBkPSJNMTYuNDMgMi45NUEyLjk1IDIuOTUgMCAwIDEgMTEuNyA1LjNhMi45NCAyLjk0IDAgMCAwLTQuMDEgMS4xMSAyLjk1IDIuOTUgMCAxIDEtLjg1LTMuNDMgMi43NiAyLjc2IDAgMCAwIDMuOS0xLjEyIDIuOTUgMi45NSAwIDAgMSA1LjY5IDEuMDlabS0uNjkgNy40NWEyLjE4IDIuMTggMCAwIDEtMy41IDEuNzMgMi4xNyAyLjE3IDAgMCAwLTIuOTYuODIgMi4xOCAyLjE4IDAgMSAxLS42Mi0yLjU0IDIuMDQgMi4wNCAwIDAgMCAyLjg3LS44MiAyLjE4IDIuMTggMCAwIDEgNC4yMS44WiIvPjwvc3ZnPg==);
378}
379.ico-audio::before {
380 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNNTM2LTc4di0xMDFxMTA2LTIzIDE3My0xMDguNVQ3NzYtNDgxcTAtMTA3LTY4LTE5MC41VDUzNi03ODF2LTEwMXExNDcgMjMgMjQyLjUgMTM3VDg3NC00ODJxMCAxNTAtOTUgMjY1LjVUNTM2LTc4Wk04Ni0zNjV2LTIzMmgxNThsMjIwLTIyMnY2NzZMMjQ0LTM2NUg4NlptNDUwIDQ3di0zMjRxNDkgMjEgNzguNSA2NC41VDY0NC00ODFxMCA1NC0yOS41IDk3LjVUNTM2LTMxOFoiLz48L3N2Zz4=);
381}
382.ico-archive::before {
383 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNNDQ0LjQzLTU3Ljk2di00MDMuNDNMMTA0LjA5LTY1NC4yMnYzMzMuNTdxMCAzMC45NSAxNS4yNiA1Ny42OXQ0Mi4yMiA0MmwyODIuODYgMTYzWm03Mi0xIDI4MS41Ny0xNjJxMjYuOTYtMTUuMjYgNDIuMjItNDIgMTUuMjYtMjYuNzQgMTUuMjYtNTcuNjl2LTMzNS43TDUxNi40My00NjMuODN2NDA0Ljg3Wm0xNzQuMTQtNTg3Ljg3IDEzNC42NS03NS4zOS0yODguMTgtMTY1LjNxLTI2LjUyLTE1LjI2LTU3LjA0LTE1LjI2dC01Ny40OCAxNS4yNmwtNzQuNjEgNDMuMyAzNDIuNjYgMTk3LjM5Wk00NzgtNTI1LjI2bDE0MC04MC0zNDQuMjItMTk3Ljk2LTE0MC41NiA4MS41N0w0NzgtNTI1LjI2WiIvPjwvc3ZnPg==);
384}
385.ico-text::before {
386 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNOTgtMjA4di0xMjhoNTI0djEyOEg5OFptMC0yMDh2LTEyOGg3NjR2MTI4SDk4Wm0wLTIwOXYtMTI4aDc2NHYxMjhIOThaIi8+PC9zdmc+);
387}
388.ico-link::before {
389 transform: translate(-2px, 3px);
390 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNNDMyLTI4OEgyODhxLTc5LjY4IDAtMTM1Ljg0LTU2LjIzUTk2LTQwMC40NSA5Ni00ODAuMjMgOTYtNTYwIDE1Mi4xNi02MTZxNTYuMTYtNTYgMTM1Ljg0LTU2aDE0NHY3MkgyODhxLTUwIDAtODUgMzV0LTM1IDg1cTAgNTAgMzUgODV0ODUgMzVoMTQ0djcyWm0tOTYtMTU2di03MmgyODh2NzJIMzM2Wm0xOTIgMTU2di03MmgxNDRxNTAgMCA4NS0zNXQzNS04NXEwLTUwLTM1LTg1dC04NS0zNUg1Mjh2LTcyaDE0NHE3OS42OCAwIDEzNS44NCA1Ni4yMyA1Ni4xNiA1Ni4yMiA1Ni4xNiAxMzZRODY0LTQwMCA4MDcuODQtMzQ0IDc1MS42OC0yODggNjcyLTI4OEg1MjhaIi8+PC9zdmc+);
391}
392.ico-readme::before {
393 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNNDI0LTI2N2gxMTJ2LTI2MUg0MjR2MjYxWm01NS42MS0zMTlxMjUuODkgMCA0My4xNC0xNi44NlE1NDAtNjE5LjczIDU0MC02NDUuNjFxMC0yNS44OS0xNi44Ni00My4xNFE1MDYuMjctNzA2IDQ4MC4zOS03MDZxLTI1Ljg5IDAtNDMuMTQgMTYuODZRNDIwLTY3Mi4yNyA0MjAtNjQ2LjM5cTAgMjUuODkgMTYuODYgNDMuMTRRNDUzLjczLTU4NiA0NzkuNjEtNTg2Wm0uNjcgNTM2cS04OC45MiAwLTE2Ny43NS0zMy4xLTc4LjgyLTMzLjExLTEzNy41Ny05MS44NlQ4My4xLTMxMi40OVE1MC0zOTEuMjggNTAtNDgwLjQ2cTAtODkuNDQgMzMuMTYtMTY3LjQ5IDMzLjE3LTc4LjA1IDkyLjE4LTEzNi45NCA1OS4wMS01OC44OSAxMzcuNTMtOTJRMzkxLjM5LTkxMCA0ODAuNDYtOTEwcTg5LjQzIDAgMTY3LjUyIDMzLjA5IDc4LjA5IDMzLjEgMTM2Ljk2IDkxLjk3IDU4Ljg3IDU4Ljg3IDkxLjk3IDEzNy4yMVE5MTAtNTY5LjM4IDkxMC00ODAuMTl0LTMzLjExIDE2Ny41MnEtMzMuMTEgNzguMzItOTIgMTM3LjMzUTcyNi0xMTYuMzMgNjQ3LjcyLTgzLjE2IDU2OS40NS01MCA0ODAuMjgtNTBaIi8+PC9zdmc+);
394}
395.ico-chat::before {
396 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNNTAtNDZ2LTc0MXEwLTUzLjgzIDM3LjA5LTkwLjkxUTEyNC4xOC05MTUgMTc4LTkxNWg2MDRxNTMuODMgMCA5MC45MSAzNy4wOVE5MTAtODQwLjgzIDkxMC03ODd2NDU5cTAgNTMuODMtMzcuMDkgOTAuOTFRODM1LjgzLTIwMCA3ODItMjAwSDIwNEw1MC00NlptMTg0LTMzOGgzNDd2LTcySDIzNHY3MlptMC0xMzhoNDkydi03MkgyMzR2NzJabTAtMTM4aDQ5MnYtNzJIMjM0djcyWiIvPjwvc3ZnPg);
397}
398.ico-snow::before {
399 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNNDU2LTI4MyAzMzYtMTYxcS04IDgtMTYuNSA4dC0xNy41LTdxLTgtOS04LTE4dDgtMTdsMTU0LTE1M3YtMTA4SDM1MEwxOTQtMzAycS04IDktMTcgOC41dC0xNy04LjVxLTgtOS04LTE3LjV0OS0xNy41bDEyNC0xMTlIMTI4cS03IDAtMTQuNS02LjVUMTA2LTQ3OXEwLTcgNi41LTE1dDE2LjUtOGgxNTZMMTYxLTYyM3EtOC04LTgtMTYuNXQ3LTE2LjVxOS05IDE4LTl0MTcgOWwxNTUgMTU0aDEwNnYtMTEwTDMwMi03NjRxLTgtOC04LTE3dDgtMTdxOS04IDE3LjUtOHQxNy41IDlsMTE5IDEyMHYtMTU0cTAtNyA2LjUtMTV0MTYuNS04cTcgMCAxNSA4dDggMTV2MTU0bDEyMS0xMjJxOC04IDE2LjUtOHQxNi41IDhxOSA4IDkgMTd0LTkgMTdMNTAyLTYxMnYxMTBoMTA4bDE1NC0xNTVxOC04IDE3LTh0MTcgOHE4IDkgOCAxNy41dC05IDE3LjVMNjc1LTUwMmgxNTZxNyAwIDE1IDh0OCAxNXEwIDEwLTggMTYuNXQtMTUgNi41SDY3NWwxMjMgMTIwcTkgOCA5IDE2LjV0LTggMTcuNXEtOCA4LTE3IDguNXQtMTgtNy41TDYxMC00NTZINTAydjEwOGwxNTQgMTU0cTkgOCA5IDE3LjV0LTggMTYuNXEtOSA4LTE3LjUgOHQtMTYuNS04TDUwMi0yODN2MTU1cTAgNy04IDE0LjV0LTE1IDcuNXEtMTAgMC0xNi41LTYuNVQ0NTYtMTI5di0xNTRaIi8+PC9zdmc+);
400}
401.ico-code::before {
402 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNMzE5LTIwMCAzOC00ODBsMjgyLTI4MiA5MSA5MC0xOTAgMTkxIDE5MCAxODktOTIgOTJabTMyMiAxLTkxLTkxIDE5MC0xOTAtMTkwLTE5MCA5MS05MCAyODEgMjgwLTI4MSAyODFaIi8+PC9zdmc+);
403}
404.ico-json::before {
405 mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJNNjE0LjA0LTE1Ni42NXYtMTAzLjk0aDM1LjE4cTIwLjc4IDAgMzUuNDgtMTQuODMgMTQuNzEtMTQuODIgMTQuNzEtMzUuNnYtNDkuNDZxMC00Ni41MiAzMC4yNi04MC4xNiAzMC4yNi0zMy42NCA3Ni41NS00MC42NHYtMi4yNHEtNDYuNTItMy45Ni03Ni42Ny0zNi43Mi0zMC4xNC0zMi43Ni0zMC4xNC03OS4yOHYtNDkuN3EwLTIwLjc4LTE0LjcxLTM1LjQ4LTE0LjctMTQuNzEtMzUuNDgtMTQuNzFoLTM1LjE4di0xMDMuOTRINjc1cTUzLjQzIDAgOTAuODkgMzcuOTZ0MzcuNDYgOTEuNjN2NDkuNDZxMCAyMC43NyAxNC4zMyAzNS42IDE0LjMyIDE0LjgzIDMyLjgyIDE0LjgzaDQ4Ljg1djE4Ny43NEg4NTAuNXEtMTguNSAwLTMyLjgyIDE0LjcxLTE0LjMzIDE0LjcxLTE0LjMzIDM1LjQ5djQ5LjY5cTAgNTMuNjctMzcuNDYgOTEuNjMtMzcuNDYgMzcuOTYtOTAuODkgMzcuOTZoLTYwLjk2Wm0tMzI5LjA0IDBxLTUzLjQzIDAtOTAuODktMzcuOTZ0LTM3LjQ2LTkxLjYzdi00OS42OXEwLTIwLjc4LTE0LjcxLTM1LjQ5dC0zNi40OC0xNC43MUg2MC42NXYtMTg3Ljc0aDQ0LjgxcTIxLjc3IDAgMzYuNDgtMTQuODMgMTQuNzEtMTQuODMgMTQuNzEtMzUuNnYtNDkuNDZxMC01My42NyAzNy40Ni05MS42MyAzNy40Ni0zNy45NiA5MC44OS0zNy45Nmg2MC45NnYxMDMuOTRoLTM0Ljk0cS0yMC43OCAwLTM1LjYgMTQuNzEtMTQuODMgMTQuNy0xNC44MyAzNS40OHY0OS43cTAgNDcuNTItMzAuMTQgODAuNzgtMzAuMTUgMzMuMjYtNzYuNDMgMzQuMjJ2Mi4zOXE0Ni4yOCA1Ljg1IDc2LjQzIDM5Ljk5IDMwLjE0IDM0LjE0IDMwLjE0IDgxLjY2djQ5LjQ2cTAgMjAuNzggMTQuODMgMzUuNiAxNC44MiAxNC44MyAzNS42IDE0LjgzaDM0Ljk0djEwMy45NEgyODVaIi8+PC9zdmc+);
406}
407.loading {
408 animation: loading 2s linear infinite;
409 background-color: hsl(from var(--bg) h s calc(l + 20) / 50%) !important;
410}
411@keyframes loading {
412 from {
413 opacity: 0.4;
414 }
415 50% {
416 opacity: 0.7;
417 }
418 to {
419 opacity: 0.4;
420 }
421}
422.mobile {
423 display: none !important;
424}
425.file-view-image, .file-view-video, .file-view-audio {
426 background-color: lch(from var(--dark-bg) calc(l - 3) calc(c - 15) h);
427}
428.file-view-video, .file-view-audio {
429 display: flex;
430 justify-content: center;
431 align-items: center;
432 & > * {
433 max-width: 100%;
434 max-height: 100%;
435 object-fit: contain;
436 }
437}
438.file-view-download {
439 p:first-child {
440 margin-top: 2rem;
441 }
442 p {
443 margin: 0.5rem 2rem;
444 max-width: 60ch;
445 }
446 code {
447 background-color: lch(from var(--dark-bg) calc(l - 5) calc(c - 5) h);
448 padding: 0.3rem 0.5rem;
449 border-radius: 0.3rem;
450 }
451}
452.speedbump {
453 z-index: 1;
454 position: relative;
455 canvas {
456 position: absolute;
457 top: 0;
458 left: 0;
459 width: 100%;
460 height: 100%;
461 z-index: -1;
462 }
463 header {
464 font-family: c1;
465 height: max(min(40vh, 400px), 100px);
466 color: #00ff80;
467 letter-spacing: 0.8ch;
468 margin-right: -0.8ch;
469 font-size: 6vw;
470 display: flex;
471 align-items: center;
472 justify-content: center;
473 font-variation-settings: "wght" 50;
474 text-shadow: 0 0 20px #00ff8022, 0 0 10px #00ff8033;
475 margin-bottom: 2rem;
476 h1 {
477 flex: 1;
478 margin: 0;
479 padding: 0;
480 display: flex;
481 align-items: center;
482 justify-content: center;
483 }
484 }
485 p {
486 max-width: 50ch;
487 margin: 0 auto 1rem auto;
488 color: #ecffea88;
489 line-height: 1.5;
490 letter-spacing: 0.01em;
491 word-spacing: 0.3em;
492 text-align: center;
493 font-size: 1.2rem;
494 }
495 button {
496 background-color: #00ff80bb;
497 color: #111318;
498 border: none;
499 padding: 0.5rem 1rem;
500 border-radius: 0.3rem;
501 font-size: 1.2rem;
502 font-weight: 400;
503 cursor: pointer;
504 letter-spacing: 0.5rem;
505 padding-right: 0.5rem;
506 }
507 .enter-container {
508 display: flex;
509 justify-content: center;
510 align-items: center;
511 margin-top: 1rem;
512 }
513 .image-grid {
514 display: grid;
515 grid-template-columns: repeat(3, 1fr);
516 grid-template-rows: repeat(3, 1fr);
517 gap: 0.5rem;
518 margin: 0 auto;
519 background-color: #050d06;
520 padding: 0.5rem;
521 border-radius: 0.75rem;
522 button {
523 background-color: #0c1f0e;
524 width: 100%;
525 max-width: 100px;
526 aspect-ratio: 1/1;
527 padding: 0;
528 margin: 0;
529 cursor: pointer;
530 border-radius: 0.5rem;
531 img {
532 width: 100%;
533 height: 100%;
534 display: block;
535 opacity: 0.75;
536 border-radius: 0.5rem;
537 }
538 &:hover {
539 img {
540 opacity: 0.85;
541 }
542 }
543 }
544 }
545}
546.lyrics {
547 align-self: flex-start;
548}
549.fullscreen-canvas {
550 position: fixed;
551 top: 0;
552 left: 0;
553 width: 100vw;
554 height: 100vh;
555 z-index: -1;
556 pointer-events: none;
557 user-select: none;
558 touch-action: none;
559}
560.cotyledon-link {
561 position: absolute;
562 bottom: 0;
563 right: 0;
564 color: #27143f;
565 padding: 0.5rem 1rem;
566 border-radius: 0.3rem;
567}
568.convo {
569 padding: 1rem;
570 .line {
571 margin-bottom: 0.5rem;
572 }
573 /* different colors for different ppl */
574 .s-other_a {
575 padding-left: 4rem;
576 color: var(--primary);
577 }
578 .s-other_b {
579 padding-left: 8rem;
580 color: hsl(from var(--primary) calc(h + 200) s l);
581 }
582 .s-other_b2 {
583 padding-left: 4rem;
584 color: hsl(from var(--primary) calc(h + 200) s l);
585 }
586 .s-other_c {
587 padding-left: 12rem;
588 color: hsl(from var(--primary) calc(h + 100) s l);
589 }
590 .s-other_d {
591 padding-left: 4rem;
592 color: hsl(from var(--primary) calc(h + 50) s l);
593 }
594 .s-other_e {
595 padding-left: 4rem;
596 color: hsl(from var(--primary) calc(h + 80) s l);
597 }
598 .s-other_f {
599 padding-left: 4rem;
600 color: #00ff80;
601 }
602 hr {
603 margin-top: 2rem;
604 margin-bottom: 2rem;
605 border: none;
606 border-top: 2px solid var(--muted);
607 }
608}
609:not(.active) .ext {
610 font-size: 80%;
611 color: var(--muted);
612}
613.file-view-code {
614 color: lch(from var(--primary) 90 10 h / 0.88);
615
616 .comment {
617 color: var(--muted);
618 }
619 .keyword {
620 font-weight: bold;
621 color: lch(from var(--primary) 100 20 h / 1);
622 }
623 .string {
624 color: lch(from var(--primary) calc(l + 30) calc(c + 30) h);
625 }
626 .constant {
627 color: lch(from var(--primary) calc(l + 30) calc(c - 30) h);
628 }
629 .method {
630 color: lch(from var(--primary) l c calc(h - 25));
631 }
632 .class {
633 color: lch(from var(--primary) l c calc(h + 25));
634 }
635 .builtin {
636 color: var(--primary);
637 font-weight: bold;
638 }
639 .parameter {
640 font-style: italic;
641 }
642 .variable {
643 color: lch(from var(--primary) 90 30 h / 0.88);
644 }
645}
646.for_everyone {
647 max-width: 69ch;
648 padding: 1rem 3rem;
649 font-family: rmo, monospace;
650 line-height: 1;
651 &:last-child {
652 padding-bottom: 3rem;
653 }
654 &:first-child {
655 padding-top: 3rem;
656 }
657 p {
658 /* line */
659 margin: 0;
660 min-height: 1rem;
661 margin-bottom: 0.5rem;
662 }
663 p.normal {
664 line-height: 1.5;
665 }
666 blockquote {
667 margin-left: 0;
668 padding-left: 1rem;
669 border-left: 2px solid #f66244;
670 color: #ffbfb2;
671 line-height: 1.5;
672 p {
673 margin-bottom: 0.5rem;
674 }
675 }
676}
677.fade-slide-in {
678 animation: fadeSlideIn 0.4s cubic-bezier(0.3, 0.8, 0.3, 1);
679}
680@keyframes fadeSlideIn {
681 from {
682 opacity: 0.5;
683 transform: translateY(12px);
684 }
685 to {
686 opacity: 1;
687 transform: translateY(0);
688 }
689}
690/* MOBILE */
691@media (max-width: 1000px) {
692 html, body {
693 overflow: unset;
694 width: unset;
695 height: unset;
696 }
697 .mobile {
698 display: inline !important;
699 }
700 .desktop {
701 display: none !important;
702 }
703 h3 {
704 padding-left: 1rem;
705 font-size: 1.2rem;
706 }
707 body {
708 overflow-y: auto;
709 }
710 .files {
711 overflow-x: unset;
712 overflow-y: unset;
713 border-bottom: 16px solid var(--dark-bg);
714 min-height: 100vh;
715 .panel {
716 overflow-x: hidden;
717 border: none !important;
718 }
719 .panel, .panel .hsplit {
720 height: unset;
721 min-height: unset;
722 }
723 .panel .header {
724 padding: 0.75rem;
725 gap: 1rem;
726 align-items: center;
727 }
728 .mobile-back {
729 margin-left: -0.75rem;
730 display: block;
731 width: 48px;
732 height: 48px;
733 &::before {
734 display: block;
735 content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyNHB4IiBmaWxsPSIjRkZGRkZGIj48cGF0aCBkPSJtMzEzLTQ0MCAyMjQgMjI0LTU3IDU2LTMyMC0zMjAgMzIwLTMyMCA1NyA1Ni0yMjQgMjI0aDQ4N3Y4MEgzMTNaIi8+PC9zdmc+);
736 transform: scale(2);
737 transform-origin: top left;
738 }
739 }
740 .full-screen, .download {
741 width: 48px;
742 height: 48px;
743 &::before {
744 transform: scale(2);
745 }
746 }
747 .panel ul li a {
748 display: flex;
749 flex-direction: column-reverse;
750 padding: 0.5rem 1rem;
751 text-overflow: unset;
752 white-space: wrap;
753 date {
754 font-size: 0.9rem;
755 padding-right: 0;
756 }
757 .size {
758 padding-left: 0;
759 }
760 .size:not(:first-child) {
761 padding-left: 0.5rem;
762 }
763 }
764 .first .size {
765 font-size: 0.9rem;
766 &::before {
767 content: "(";
768 }
769 &::after {
770 content: ")";
771 }
772 }
773 }
774 .panel:not(.last) {
775 display: none;
776 }
777 .panel {
778 position: relative;
779 min-width: unset !important;
780 max-width: unset !important;
781 border-left-width: 10px !important;
782 }
783 .content {
784 height: unset !important;
785 min-width: unset !important;
786 max-width: unset !important;
787 overflow: unset !important;
788 }
789 .hsplit {
790 display: block !important;
791 }
792 .li.readme {
793 display: none !important;
794 }
795 .tooltip {
796 display: none !important;
797 }
798}
src/file-viewer/views/clofi.tsx created+1007
......@@ -0,0 +1,1007 @@
1import "./clofi.css";
2import assert from "node:assert";
3import path, { dirname } from "node:path";
4import { MediaFile } from "../db.ts";
5import { useInlineScript } from "../framework/page-resources.ts";
6import { escapeUri, formatDuration, formatSize } from "../media/share.ts";
7import {
8 highlightConvo,
9 highlightHashComments,
10 highlightLinksInTextView,
11} from "../media/text-formatting.ts";
12import { TestID } from "../test/id.ts";
13import { ForEveryone } from "../media/cotyledon.tsx";
14
15export const theme = {
16 bg: "#312652",
17 fg: "#f0f0ff",
18 primary: "#fabe32",
19};
20
21export const extensionToViewer: {
22 [key: string]: (props: {
23 file: MediaFile;
24 siblingFiles?: MediaFile[];
25 }) => any;
26} = {
27 ".html": IframeView,
28 ".txt": TextView,
29 ".md": TextView,
30 ".mp4": VideoView,
31 ".mkv": VideoView,
32 ".webm": VideoView,
33 ".avi": VideoView,
34 ".mov": VideoView,
35 ".mp3": AudioView,
36 ".flac": AudioView,
37 ".wav": AudioView,
38 ".ogg": AudioView,
39 ".m4a": AudioView,
40 ".jpg": ImageView,
41 ".jpeg": ImageView,
42 ".png": ImageView,
43 ".gif": ImageView,
44 ".webp": ImageView,
45 ".avif": ImageView,
46 ".heic": ImageView,
47 ".svg": ImageView,
48 ".chat": ChatView,
49 ".json": CodeView,
50 ".jsonc": CodeView,
51 ".toml": CodeView,
52 ".ts": CodeView,
53 ".js": CodeView,
54 ".tsx": CodeView,
55 ".jsx": CodeView,
56 ".css": CodeView,
57 ".py": CodeView,
58 ".lua": CodeView,
59 ".sh": CodeView,
60 ".bat": CodeView,
61 ".ps1": CodeView,
62 ".cmd": CodeView,
63 ".yaml": CodeView,
64 ".yml": CodeView,
65 ".xml": CodeView,
66 ".zig": CodeView,
67 ".astro": CodeView,
68 ".mdx": CodeView,
69 ".php": CodeView,
70 ".diff": CodeView,
71 ".patch": CodeView,
72};
73
74export default function MediaList({
75 file,
76 hasCotyledonCookie,
77}: {
78 file: MediaFile;
79 hasCotyledonCookie: boolean;
80}) {
81 useInlineScript("file_viewer");
82
83 const dirs: MediaFile[] = [];
84 let dir: MediaFile | null = file;
85 assert(dir);
86 do {
87 dirs.unshift(dir);
88 dir = dir?.getParent();
89 } while (dir);
90 const parts = file.path.split("/");
91
92 const isCotyledon = parseInt(parts[1]) < 2025;
93
94 return (
95 <div class={"files" + (isCotyledon ? " ctld ctld-" + parts[1] : "")}>
96 {dirs.map((entry, i) => {
97 const isLast = i === dirs.length - 1;
98 return (
99 <MediaPanel
100 file={entry}
101 isLast={isLast}
102 activeFilename={parts[i + 1]}
103 hasCotyledonCookie={hasCotyledonCookie}
104 />
105 );
106 })}
107 </div>
108 );
109}
110
111const specialCaseViewers: Record<string, any> = {
112 "/2024/for everyone": ForEveryone,
113};
114
115export function MediaPanel({
116 file,
117 isLast,
118 activeFilename,
119 hasCotyledonCookie,
120}: {
121 file: MediaFile;
122 isLast: boolean;
123 activeFilename: string | null;
124 hasCotyledonCookie: boolean;
125}) {
126 const showsActions = file.path !== "/2024/for everyone";
127 const label = file.path === "/"
128 ? (
129 "clo's files"
130 )
131 : (
132 <>
133 {file.kind === MediaFile.Kind.directory
134 ? (
135 <span>
136 {file.basename}
137 <span class="bold-slash">/</span>
138 </span>
139 )
140 : (
141 <>
142 {file.basename}
143 <div style="flex:1" />
144 {showsActions && (
145 <div class="actions">
146 <a
147 class="custom full-screen"
148 href={`/file${escapeUri(file.path)}?view=embed`}
149 aria-label="full screen"
150 >
151 </a>
152 <a
153 class="custom download"
154 href={`/file${escapeUri(file.path)}?dl`}
155 aria-label="download"
156 >
157 </a>
158 </div>
159 )}
160 </>
161 )}
162 </>
163 );
164 let View = specialCaseViewers[file.path] ??
165 (extensionToViewer[file.extension.toLowerCase()] as any) ??
166 DownloadView;
167 if (View === VideoView && file.size > 500_000_000) {
168 View = DownloadViewTooBig;
169 }
170 const mobileBtn = file.path !== "/" && (
171 <a
172 href={`/file${escapeUri(path.dirname(file.path).replace(/\/$/, ""))}`}
173 className="custom mobile-back"
174 />
175 );
176 const canvases: Record<string, string> = {
177 "/2017": "2017",
178 "/2018": "2018",
179 "/2019": "2019",
180 "/2020": "2020",
181 "/2021": "2021",
182 "/2022": "2022",
183 "/2023": "2023",
184 "/2024": "2024",
185 };
186 if (canvases[file.path]) {
187 useInlineScript(`canvas_${canvases[file.path]}` as any);
188 }
189 return (
190 <div
191 class={(isLast ? "panel last" : "panel") +
192 (file.path === "/" ? " first" : "")}
193 >
194 {canvases[file.path] && (
195 <canvas
196 class="fullscreen-canvas"
197 data-canvas={canvases[file.path]}
198 >
199 </canvas>
200 )}
201 {file.kind === MediaFile.Kind.directory && (
202 <a class="custom header" href={`/file${escapeUri(file.path)}`}>
203 <div class="ico ico-dir-open"></div>
204 {label}
205 </a>
206 )}
207 <div class="header">
208 {mobileBtn}
209 {<div class={`ico ico-${fileIcon(file, true)}`}></div>}
210 {label}
211 </div>
212
213 {file.kind === MediaFile.Kind.directory
214 ? (
215 <DirView
216 dir={file}
217 activeFilename={activeFilename}
218 isLast={isLast}
219 hasCotyledonCookie={hasCotyledonCookie}
220 />
221 )
222 : (
223 <div
224 class={`content file-view${
225 View.class ? " file-view-" + View.class : ""
226 }`}
227 >
228 <View file={file} />
229 </div>
230 )}
231 </div>
232 );
233}
234
235const readmeFile = "readme.txt";
236const priorityFiles = ["readme.txt", "index.html"];
237
238function sorterFromDirSort(dirsort: string) {
239 const array: string[] = JSON.parse(dirsort);
240 if (array.length === 1 && array[0] === "a-z") {
241 return sortAlphabetically;
242 }
243 return (a: MediaFile, b: MediaFile) => {
244 const aIndex = array.indexOf(a.basename);
245 const bIndex = array.indexOf(b.basename);
246 if (bIndex == -1 && aIndex >= 0) return -1;
247 if (aIndex == -1 && bIndex >= 0) return 1;
248 if (aIndex >= 0 && bIndex >= 0) {
249 return aIndex - bIndex;
250 }
251 return sortDefault(a, b);
252 };
253}
254
255function sortNumerically(a: MediaFile, b: MediaFile) {
256 const n1 = parseInt(a.basenameWithoutExt);
257 const n2 = parseInt(a.basenameWithoutExt);
258 return n1 - n2;
259}
260
261function sortDefault(a: MediaFile, b: MediaFile) {
262 // First check if either file is in the priority list
263 const aIndex = priorityFiles.indexOf(a.basename.toLowerCase());
264 const bIndex = priorityFiles.indexOf(b.basename.toLowerCase());
265
266 if (aIndex !== -1 && bIndex !== -1) {
267 // Both are priority files, sort by priority order
268 return aIndex - bIndex;
269 } else if (aIndex !== -1) {
270 // Only a is a priority file
271 return -1;
272 } else if (bIndex !== -1) {
273 // Only b is a priority file
274 return 1;
275 }
276
277 // Then sort directories before files
278 if (a.kind !== b.kind) {
279 return a.kind === MediaFile.Kind.directory ? -1 : 1;
280 }
281
282 // Finally sort by date (newest first), then by name (a-z) if dates are the same
283 const dateComparison = b.date.getTime() - a.date.getTime();
284 if (dateComparison !== 0) {
285 return dateComparison;
286 }
287 // If dates are the same, sort alphabetically by name
288 return a.basename.localeCompare(b.basename);
289}
290
291function sortAlphabetically(a: MediaFile, b: MediaFile) {
292 // First check if either file is in the priority list
293 const aIndex = priorityFiles.indexOf(a.basename.toLowerCase());
294 const bIndex = priorityFiles.indexOf(b.basename.toLowerCase());
295
296 if (aIndex !== -1 && bIndex !== -1) {
297 // Both are priority files, sort by priority order
298 return aIndex - bIndex;
299 } else if (aIndex !== -1) {
300 // Only a is a priority file
301 return -1;
302 } else if (bIndex !== -1) {
303 // Only b is a priority file
304 return 1;
305 }
306
307 // If dates are the same, sort alphabetically by name
308 return a.basename.localeCompare(b.basename);
309}
310
311function isNumericallyOrdered(files: MediaFile[]) {
312 return !files.some((x) => Number.isNaN(parseInt(x.basenameWithoutExt)));
313}
314
315function sortChronologicalStartToEnd(a: MediaFile, b: MediaFile) {
316 const aIndex = priorityFiles.indexOf(a.basename.toLowerCase());
317 const bIndex = priorityFiles.indexOf(b.basename.toLowerCase());
318
319 if (aIndex !== -1 && bIndex !== -1) {
320 return aIndex - bIndex;
321 } else if (aIndex !== -1) {
322 return -1;
323 } else if (bIndex !== -1) {
324 return 1;
325 }
326
327 const dateComparison = a.date.getTime() - b.date.getTime();
328 if (dateComparison !== 0) {
329 return dateComparison;
330 }
331 return a.basename.localeCompare(b.basename);
332}
333
334const sortOverrides: Record<string, (a: MediaFile, b: MediaFile) => number> = {
335 "/2024": sortChronologicalStartToEnd,
336 "/2023": sortChronologicalStartToEnd,
337 "/2022": sortChronologicalStartToEnd,
338 "/2021": sortChronologicalStartToEnd,
339 "/2020": sortChronologicalStartToEnd,
340 "/2019": sortChronologicalStartToEnd,
341 "/2018": sortChronologicalStartToEnd,
342 "/2017": sortChronologicalStartToEnd,
343};
344
345function DirView({
346 dir,
347 activeFilename,
348 isLast,
349 hasCotyledonCookie,
350}: {
351 dir: MediaFile;
352 activeFilename: string | null;
353 isLast: boolean;
354 hasCotyledonCookie: boolean;
355}) {
356 if (dir.path === "/") {
357 return (
358 <RootDirView
359 dir={dir}
360 activeFilename={activeFilename}
361 isLast={isLast}
362 hasCotyledonCookie={hasCotyledonCookie}
363 />
364 );
365 }
366 const isCotyledon = parseInt(dir.path.split("/")?.[1]) < 2025;
367 const unsortedFiles = dir
368 .getPublicChildren()
369 .filter((f) => !f.basenameWithoutExt.startsWith("_unlisted"));
370 const sorter = dir.dirsort
371 ? sorterFromDirSort(dir.dirsort)
372 : isNumericallyOrdered(unsortedFiles)
373 ? sortNumerically
374 : isCotyledon
375 ? sortChronologicalStartToEnd
376 : (sortOverrides[dir.path] ?? sortDefault);
377 const sortedFiles = unsortedFiles.sort(sorter);
378 const readme = sortedFiles.find((f) => f.basename === readmeFile);
379 if (readme && isLast) activeFilename ||= readmeFile;
380 const main = (
381 <div class="content primary">
382 <ul>
383 {sortedFiles.map((file) => {
384 return (
385 <ListItem file={file} active={activeFilename === file.basename} />
386 );
387 })}
388 </ul>
389 </div>
390 );
391
392 if (readme && isLast) {
393 return (
394 <div class="hsplit">
395 <ReadmeView file={readme} siblingFiles={sortedFiles} />
396 {main}
397 </div>
398 );
399 }
400
401 return main;
402}
403
404const unknownDate = new Date("1970-01-03");
405const unknownDateWithKnownYear = new Date("1970-02-20");
406
407function ListItem({
408 file,
409 active,
410 noDate,
411}: {
412 file: MediaFile;
413 active: boolean;
414 noDate?: boolean;
415}) {
416 const dateTime = file.date;
417 let shortDate = dateTime < unknownDateWithKnownYear
418 ? (
419 dateTime < unknownDate
420 ? (
421 "??.??.??"
422 )
423 : <>xx.xx.{21 + Math.floor(dateTime.getTime() / 86400000)}</>
424 )
425 : (
426 `${(dateTime.getMonth() + 1).toString().padStart(2, "0")}.${
427 dateTime
428 .getDate()
429 .toString()
430 .padStart(2, "0")
431 }.${dateTime.getFullYear().toString().slice(2)}`
432 );
433
434 let basenameWithoutExt = file.basenameWithoutExt;
435
436 let meta = file.kind === MediaFile.Kind.directory
437 ? formatSize(file.size)
438 : (file.duration ?? 0) > 0
439 ? formatDuration(file.duration!)
440 : null;
441 if (meta && dirname(file.path) !== "/") {
442 meta = `(${meta})`;
443 }
444
445 const isReadme = file.basename === readmeFile;
446
447 return (
448 <li>
449 <a
450 class={(active ? "active " : "") + (isReadme ? "readme " : "") +
451 "li custom"}
452 href={file.extension === ".lnk"
453 ? file.contents
454 : isReadme
455 ? `/file${escapeUri(path.dirname(file.path).replace(/\/$/, ""))}`
456 : `/file${escapeUri(file.path)}`}
457 >
458 <span>
459 {file.basename === readmeFile
460 ? <>{!noDate && <div class="line"></div>}</>
461 : <>{!noDate && <date>{shortDate}</date>}</>}
462 <span class="size mobile">{meta}</span>
463 </span>
464
465 <span>
466 {path.dirname(file.path) !== "/" && (
467 <span className={`ico ico-${fileIcon(file)}`}></span>
468 )}
469 {basenameWithoutExt}
470 <span class="ext">{file.extension}</span>
471 {file.kind === MediaFile.Kind.directory
472 ? <span class="bold-slash">/</span>
473 : (
474 ""
475 )}
476
477 <span class="size desktop">{meta}</span>
478 </span>
479 </a>
480 </li>
481 );
482}
483
484function fileIcon(file: MediaFile, dirOpen?: boolean) {
485 if (file.kind === MediaFile.Kind.directory) {
486 return dirOpen ? "dir-open" : "dir";
487 }
488 if (file.basename === "readme.txt") {
489 return "readme";
490 }
491 if (file.path === "/2024/for everyone") {
492 return "snow";
493 }
494 const ext = path.extname(file.basename).toLowerCase();
495 if (
496 ext === ".mp4" ||
497 ext === ".mkv" ||
498 ext === ".webm" ||
499 ext === ".avi" ||
500 ext === ".mov"
501 ) {
502 return "video";
503 }
504 if (
505 ext === ".mp3" ||
506 ext === ".flac" ||
507 ext === ".wav" ||
508 ext === ".ogg" ||
509 ext === ".m4a"
510 ) {
511 return "audio";
512 }
513 if (
514 ext === ".jpg" ||
515 ext === ".jpeg" ||
516 ext === ".png" ||
517 ext === ".gif" ||
518 ext === ".webp" ||
519 ext === ".avif" ||
520 ext === ".heic" ||
521 ext === ".svg"
522 ) {
523 return "image";
524 }
525 if (ext === ".comp" || ext === ".fuse" || ext === ".setting") return "fusion";
526 if (ext === ".txt" || ext === ".md") return "text";
527 if (ext === ".html") return "webpage";
528 if (ext === ".blend") return "blend";
529 if (
530 ext === ".zip" ||
531 ext === ".rar" ||
532 ext === ".7z" ||
533 ext === ".tar" ||
534 ext === ".gz" ||
535 ext === ".bz2" ||
536 ext === ".xz"
537 ) {
538 return "archive";
539 }
540 if (ext === ".lnk") return "link";
541 if (ext === ".chat") return "chat";
542 if (
543 ext === ".ts" ||
544 ext === ".js" ||
545 ext === ".tsx" ||
546 ext === ".jsx" ||
547 ext === ".css" ||
548 ext === ".py" ||
549 ext === ".lua" ||
550 ext === ".sh" ||
551 ext === ".bat" ||
552 ext === ".ps1" ||
553 ext === ".cmd" ||
554 ext === ".php"
555 ) {
556 return "code";
557 }
558 if (ext === ".json" || ext === ".toml" || ext === ".yaml" || ext === ".yml") {
559 return "json";
560 }
561 return "file";
562}
563
564function RootDirView({
565 dir,
566 activeFilename,
567 isLast,
568 hasCotyledonCookie,
569}: {
570 dir: MediaFile;
571 activeFilename: string | null;
572 isLast: boolean;
573 hasCotyledonCookie: boolean;
574}) {
575 const children = dir.getPublicChildren();
576 let readme: MediaFile | null = null;
577
578 const groups = {
579 // years 2025 and onwards
580 years: [] as MediaFile[],
581 // named categories
582 categories: [] as MediaFile[],
583 // years 2017 to 2024
584 cotyledon: [] as MediaFile[],
585 };
586 const colorMap = {
587 years: "#a2ff91",
588 categories: "#9c91ff",
589 cotyledon: "#ff91ca",
590 };
591 for (const child of children) {
592 const basename = child.basename;
593 if (basename === readmeFile) {
594 readme = child;
595 continue;
596 }
597
598 const year = basename.match(/^(\d{4})/);
599 if (year) {
600 const n = parseInt(year[1]);
601 if (n >= 2025) {
602 groups.years.push(child);
603 } else {
604 groups.cotyledon.push(child);
605 }
606 } else {
607 groups.categories.push(child);
608 }
609 }
610
611 if (readme && isLast) activeFilename ||= readmeFile;
612
613 const main = (
614 <div class="content primary">
615 {readme && (
616 <ul>
617 <ListItem
618 file={readme}
619 active={activeFilename === readmeFile}
620 noDate
621 />
622 </ul>
623 )}
624 {Object.entries(groups).map(([key, files]) => {
625 if (key === "cotyledon" && !hasCotyledonCookie) {
626 return null;
627 }
628 if (key === "years" || key === "cotyledon") {
629 files.sort((a, b) => {
630 return b.basename.localeCompare(a.basename);
631 });
632 } else {
633 files.sort((a, b) => {
634 return a.basename.localeCompare(b.basename);
635 });
636 }
637 return (
638 <div class="group" data-group={key}>
639 <h3 style={`color:${colorMap[key as keyof typeof colorMap]};`}>
640 {key}
641 </h3>
642 <ul>
643 {files.map((file) => (
644 <ListItem
645 file={file}
646 active={activeFilename === file.basename}
647 noDate={key === "cotyledon"}
648 />
649 ))}
650 </ul>
651 </div>
652 );
653 })}
654 </div>
655 );
656
657 if (readme && isLast) {
658 return (
659 <div class="hsplit">
660 <ReadmeView
661 file={readme}
662 siblingFiles={children}
663 extra={!hasCotyledonCookie && (
664 <>
665 <a href="/file/cotyledon" class="custom cotyledon-link desktop">
666 cotyledon
667 </a>
668 </>
669 )}
670 />
671 {main}
672 {!hasCotyledonCookie && (
673 <>
674 <a href="/file/cotyledon" class="custom cotyledon-link mobile">
675 cotyledon
676 </a>
677 </>
678 )}
679 </div>
680 );
681 }
682
683 return main;
684}
685
686function TextView({
687 file,
688 siblingFiles = [],
689}: {
690 file: MediaFile;
691 siblingFiles?: MediaFile[];
692}) {
693 const contents = file.contents;
694
695 if (file.path.startsWith("/2021/phoenix-write/maps")) {
696 const basename = file.basename;
697 if (basename.includes("map") && basename.endsWith(".txt")) {
698 return (
699 <pre
700 style="white-space:normal;max-width:73ch"
701 dangerouslySetInnerHTML={{
702 __html: highlightHashComments(contents),
703 }}
704 ></pre>
705 );
706 }
707 }
708
709 return (
710 <pre
711 style="white-space:pre-wrap;max-width:70ch"
712 dangerouslySetInnerHTML={{
713 __html: highlightLinksInTextView(
714 contents,
715 siblingFiles.filter((f) => f.kind === MediaFile.Kind.file),
716 ),
717 }}
718 ></pre>
719 );
720}
721
722function ChatView({ file }: { file: MediaFile }) {
723 const contents = file.contents;
724 return (
725 <div
726 style="max-width:70ch"
727 class="convo"
728 dangerouslySetInnerHTML={{
729 __html: highlightConvo(contents),
730 }}
731 >
732 </div>
733 );
734}
735
736function CodeView({ file }: { file: MediaFile }) {
737 const highlightedContents = file.contents;
738 if (!highlightedContents) {
739 if (file.size > 1_000_000) {
740 return <DownloadViewTooBig file={file} />;
741 }
742 return <DownloadViewCodeNotComputed file={file} />;
743 }
744 return (
745 <pre
746 style="white-space:pre-wrap"
747 dangerouslySetInnerHTML={{
748 __html: highlightedContents,
749 }}
750 />
751 );
752}
753
754function VideoView({ file }: { file: MediaFile }) {
755 useInlineScript("video_player");
756 const dimensions = file.parseDimensions() ?? { width: 1920, height: 1080 };
757 return (
758 <>
759 <video
760 controls
761 preload
762 style={`background:transparent;aspect-ratio:${
763 simplifyFraction(
764 dimensions.width,
765 dimensions.height,
766 )
767 }`}
768 >
769 <source
770 src={"/file" + file.path}
771 type={contentTypeFromExt(file.path)}
772 />
773 </video>
774 </>
775 );
776}
777
778function AudioView({
779 file,
780 onlyAudio = false,
781}: {
782 file: MediaFile;
783 onlyAudio?: boolean;
784}) {
785 const parent = file.getParent();
786 let lyricsFile: MediaFile | null = null;
787 if (parent && !onlyAudio) {
788 const siblings = parent.getPublicChildren();
789 // show lyrics only if
790 // - this media file is the only audio file
791 // - there is lyrics.txt in the same directory
792 const audioFiles = siblings.filter(
793 (f) =>
794 f.kind === MediaFile.Kind.file &&
795 extensionToViewer[path.extname(f.basename)] === AudioView,
796 );
797 if (
798 audioFiles.length === 1 &&
799 siblings.find((f) => f.basename === "lyrics.txt")
800 ) {
801 lyricsFile = siblings.find((f) => f.basename === "lyrics.txt")!;
802 }
803 }
804 return (
805 <>
806 <audio controls preload="none" style="width:100%;">
807 <source
808 src={"/file" + file.path}
809 type={`audio/${path.extname(file.path).substring(1)}`}
810 />
811 </audio>
812 {lyricsFile && (
813 <div class="lyrics">
814 <h2 style="margin-left:1rem;margin-bottom:-0.2rem;margin-top:0.5rem;">
815 lyrics
816 </h2>
817 <TextView file={lyricsFile} siblingFiles={[]} />
818 </div>
819 )}
820 </>
821 );
822}
823
824function ImageView({ file }: { file: MediaFile }) {
825 return (
826 <img
827 src={"/file" + file.path}
828 alt={file.basename}
829 style="max-width:100%;max-height:100%;object-fit:contain;margin:auto;display:block;"
830 />
831 );
832}
833
834function IframeView({ file }: { file: MediaFile }) {
835 return (
836 <>
837 <iframe
838 style="flex:1;height:100%;border:none"
839 src={"/file" + file.path + "?view=embed"}
840 />
841 </>
842 );
843}
844
845const helptexts: Record<string, any> = {
846 ".blend": (
847 <p>
848 <code>.blend</code> files can be open in{" "}
849 <a href="https://www.blender.org" target="_blank">
850 Blender
851 </a>
852 .
853 </p>
854 ),
855 ".comp": <FusionHelp ext="comp" name="composition files (project/scene)" />,
856 ".setting": <FusionHelp ext="setting" name="macro/template" />,
857 ".fuse": <FusionHelp ext="setting" name="FUSE Plugin (lua source code)" />,
858};
859
860function FusionHelp({ ext, name }: { ext: string; name: string }) {
861 return (
862 <>
863 <p>
864 <code>.{ext}</code> files are{" "}
865 <a
866 href="https://www.blackmagicdesign.com/products/fusion"
867 target="_blank"
868 >
869 Fusion
870 </a>{" "}
871 {name}.
872 </p>
873 <p>
874 Blackmagic Fusion is paid-only since mid-2019 (the "Studio" version).
875 The last free version is Fusion 9.0.2, which exists for MacOS, Linux,
876 and Microsoft Windows on{" "}
877 <a href="https://www.blackmagicdesign.com/support" target="_blank">
878 Blackmagic Design's support page
879 </a>
880 .
881 </p>
882 <p>
883 Alternatively, you can use DaVinci Resolve, however I do not recommend
884 it as it is very unstable, at least as of when I last tried version 18.
885 </p>
886 </>
887 );
888}
889function DownloadView({ file }: { file: MediaFile }) {
890 const help = helptexts[path.extname(file.basename)];
891 return help
892 ? (
893 <>
894 {help}
895 <p>
896 File download:{" "}
897 <a href={"/file" + file.path + "?dl"} aria-label="download">
898 {file.basename}
899 </a>
900 .
901 </p>
902 </>
903 )
904 : (
905 <>
906 <p>
907 No built-in viewer for <code>{path.extname(file.basename)}</code>{" "}
908 files.
909 </p>
910 <p>
911 Instead, you may download it:{" "}
912 <a href={"/file" + file.path + "?dl"} aria-label="download">
913 {file.basename}
914 </a>
915 .
916 </p>
917 </>
918 );
919}
920
921function DownloadViewTooBig({ file }: { file: MediaFile }) {
922 return (
923 <div style="padding:0.5rem">
924 <p>
925 This file is too large to view in the browser right now (
926 <code>{formatSize(file.size)}</code>). Later, this file viewer will
927 properly process video files for web streaming.
928 </p>
929 <p>
930 Instead, you may download it:{" "}
931 <a href={"/file" + file.path + "?dl"} aria-label="download">
932 {file.basename}
933 </a>
934 .
935 </p>
936 </div>
937 );
938}
939
940function DownloadViewCodeNotComputed({ file }: { file: MediaFile }) {
941 return (
942 <div style="padding:0.5rem">
943 <p>
944 This file has not been pre-processed for code highlighting. This either
945 means it is not a valid UTF-8 text file (<code>.ts</code>{" "}
946 can be TypeScript or an MPEG "Transport Stream"), or there is a bug in
947 the file indexing logic.
948 </p>
949 <p>
950 Instead, you may download it:{" "}
951 <a href={"/file" + file.path + "?dl"} aria-label="download">
952 {file.basename}
953 </a>
954 .
955 </p>
956 </div>
957 );
958}
959
960function ReadmeView({
961 file,
962 siblingFiles,
963 extra,
964}: {
965 file: MediaFile;
966 siblingFiles: MediaFile[];
967 extra?: any;
968}) {
969 // let showFileCandidates = siblingFiles.filter(f =>
970 // f.kind === MediaFile.Kind.file
971 // && (extensionToViewer[path.extname(f.basename)] === AudioView
972 // || extensionToViewer[path.extname(f.basename)] === VideoView)
973 // );
974 return (
975 <div class="content readme" data-testid={TestID.Readme}>
976 {/* {showFileCandidates.length === 1 && <AudioView file={showFileCandidates[0]} onlyAudio />} */}
977 <TextView file={file} siblingFiles={siblingFiles} />
978 {extra}
979 </div>
980 );
981}
982
983const gcd = (a: number, b: number): number => (b ? gcd(b, a % b) : a);
984function simplifyFraction(n: number, d: number) {
985 const divisor = gcd(n, d);
986 return `${n / divisor}/${d / divisor}`;
987}
988
989export function contentTypeFromExt(src: string) {
990 src = src.toLowerCase();
991 if (src.endsWith(".m3u8")) return "application/x-mpegURL";
992 if (src.endsWith(".webm")) return "video/webm";
993 if (src.endsWith(".mp4")) return "video/mp4";
994 if (src.endsWith(".mkv")) return "video/x-matroska";
995 if (src.endsWith(".avi")) return "video/x-msvideo";
996 if (src.endsWith(".mov")) return "video/quicktime";
997 if (src.endsWith(".ogg")) return "video/ogg";
998 throw new Error("Unknown video extension: " + path.extname(src));
999}
1000
1001// Add class properties to the components
1002AudioView.class = "audio";
1003ImageView.class = "image";
1004VideoView.class = "video";
1005TextView.class = "text";
1006DownloadView.class = "download";
1007CodeView.class = "code";
src/friend-auth.ts created+75
......@@ -0,0 +1,75 @@
1let friendPassword = "";
2try {
3 friendPassword = require("./friends/hardcoded-password.ts").friendPassword;
4} catch {}
5
6export const app = new Hono();
7
8const cookieAge = 60 * 60 * 24 * 30; // 1 month
9
10function checkFriendsCookie(c: Context) {
11 const cookie = c.req.header("Cookie");
12 if (!cookie) return false;
13 const cookies = cookie.split("; ").map((x) => x.split("="));
14 return cookies.some(
15 (kv) =>
16 kv[0].trim() === "friends_password" &&
17 kv[1].trim() &&
18 kv[1].trim() === friendPassword,
19 );
20}
21
22export function requireFriendAuth(c: Context) {
23 const k = c.req.query("password") || c.req.query("k");
24 if (k) {
25 if (k === friendPassword) {
26 return c.body(null, 303, {
27 Location: "/friends",
28 "Set-Cookie":
29 `friends_password=${k}; Path=/; HttpOnly; SameSite=Strict; Max-Age=${cookieAge}`,
30 });
31 } else {
32 return c.body(null, 303, {
33 Location: "/friends",
34 });
35 }
36 }
37 if (checkFriendsCookie(c)) {
38 return undefined;
39 } else {
40 return serveAsset(c, "/friends/auth", 403);
41 }
42}
43
44app.get("/friends", (c) => {
45 const friendAuthChallenge = requireFriendAuth(c);
46 if (friendAuthChallenge) return friendAuthChallenge;
47 return serveAsset(c, "/friends", 200);
48});
49
50let incorrectMap: Record<string, boolean> = {};
51app.post("/friends", async (c) => {
52 const ip = c.header("X-Forwarded-For") ?? getConnInfo(c).remote.address ??
53 "unknown";
54 if (incorrectMap[ip]) {
55 return serveAsset(c, "/friends/auth/fail", 403);
56 }
57 const data = await c.req.formData();
58 const k = data.get("password");
59 if (k === friendPassword) {
60 return c.body(null, 303, {
61 Location: "/friends",
62 "Set-Cookie":
63 `friends_password=${k}; Path=/; HttpOnly; SameSite=Strict; Max-Age=${cookieAge}`,
64 });
65 }
66 incorrectMap[ip] = true;
67 await setTimeout(2500);
68 incorrectMap[ip] = false;
69 return serveAsset(c, "/friends/auth/fail", 403);
70});
71
72import { type Context, Hono } from "hono";
73import { serveAsset } from "#sitegen/assets";
74import { setTimeout } from "node:timers/promises";
75import { getConnInfo } from "hono/bun";
src/friends/.gitignore created+4
......@@ -0,0 +1,4 @@
1# this directory is private, and not checked into the git repository
2# instead, it is version-controlled via computer clover's backup system.
3*
4!.gitignore
src/pages/friends/auth.fail.marko created+9
......@@ -0,0 +1,9 @@
1<main>
2 <p>incorrect or outdated password</p>
3 <p>please contact clover</p>
4 <form method="post" action="/friends">
5 <h1>try again</h1>
6 <input type="password" name="password"/>
7 <button type="submit">enter</button>
8 </form>
9</main>
src/pages/friends/auth.marko created+8
......@@ -0,0 +1,8 @@
1<main>
2 <form method="post" action="/friends">
3 <h1>what's the password</h1>
4 <input type="password" name="password"/>
5 <button type="submit">enter</button>
6 <p>(clover will give the password to you if you're a friend)</p>
7 </form>
8</main>
src/pages/subscribe.client.ts created+97
......@@ -0,0 +1,97 @@
1// @ts-nocheck
2// manually obfuscated to make it very difficult to reverse engineer
3// if you want to decode what the email is, visit the page!
4// stops people from automatically scraping the email address
5//
6// Unfortunately this needs a rewrite to support Chrome without
7// hardware acceleration and some Linux stuff. I will probably
8// go with a proof of work alternative.
9requestAnimationFrame(() => {
10 const hash = "SHA";
11 const a = [
12 { parentElement: document.getElementById("subscribe") },
13 function (b) {
14 let c = 0, d = 0;
15 for (let i = 0; i < b.length; i++) {
16 c = (c + b[i] ^ 0xF8) % 8;
17 d = (c * b[i] ^ 0x82) % 193;
18 }
19 a[c + 1]()[c](d, b.buffer);
20 },
21 function () {
22 const i = a[4](a[3]());
23 const b = i.innerText = a.pop();
24 if (a[b.indexOf("@") / 3]) {
25 i.href = "mailto:" + b;
26 }
27 },
28 function () {
29 return a[a.length % 10];
30 },
31 function (x) {
32 return x.parentElement;
33 },
34 function (b, c) {
35 throw new Uint8Array(
36 c,
37 0,
38 64,
39 c.parentElement = this[8].call(b.call(this)).location,
40 );
41 },
42 function (b, c) {
43 this.width = 8;
44 this.height = 16;
45 b.clearColor(0.5, 0.7, 0.9, 1.0);
46 b.clear(16408 ^ this.width ^ this.height);
47 const e = new Uint8Array(4 * this.width * this.height);
48 b.readPixels(0, 0, this.width, this.height, b.RGBA, b.UNSIGNED_BYTE, e);
49 let parent = a[this.width / 2](this);
50 while (parent.tagName !== "BODY") {
51 parent = a[2 * this.height / this.width](parent);
52 }
53 try {
54 let d = [hash, e.length].join("-");
55 const b = a[0.25 * this.height](a.pop()(parent)).subtle.digest(d, e);
56 [, d] = a;
57 b.then(c.bind(a, a[this.width].bind(globalThis))).catch(d);
58 } catch (e) {
59 fetch(e).then(a[5]).catch(a[2]);
60 }
61 },
62 function (b, c) {
63 const d = a.splice(
64 9,
65 1,
66 [
67 a[3]().parentElement.id,
68 c.parentElement.hostname,
69 ].join(String.fromCharCode(b)),
70 );
71 var e = new Error();
72 Object.defineProperty(e, "stack", {
73 get() {
74 a[9] = d;
75 },
76 });
77 a[2].call(console.log(e));
78 },
79 function () {
80 return this;
81 },
82 "[failed to verify your browser]",
83 function (a) {
84 a = a.parentElement.ownerDocument.defaultView;
85 return { parentElement: a.navigator.webdriver || a.crypto };
86 },
87 ];
88 try {
89 const c = document.querySelector("canvas");
90 const g = c.getContext("webgl2") || c.getContext("webgl");
91 a[0].parentElement.innerText = "[...loading...]";
92 g.field || requestAnimationFrame(a[6].bind(c, g, a[5]));
93 } catch {
94 a.pop();
95 fetch(":").then(a[5]).catch(a[2]);
96 }
97});
src/pages/subscribe.css created+17
......@@ -0,0 +1,17 @@
1#subscribe[href] {
2 display: flex;
3 justify-content: center;
4 align-items: center;
5 font-size: 1.5rem;
6 font-weight: bold;
7 text-align: center;
8}
9#subscribe:not([href]) {
10 opacity: 0.5;
11}
12.flex {
13 display: flex;
14 justify-content: center;
15 align-items: center;
16 height: 50px;
17}
src/pages/subscribe.marko created+39
......@@ -0,0 +1,39 @@
1import './subscribe.css';
2export const meta = {
3 title: "paper clover mailing list",
4 description: "subscribe to the mailing list",
5};
6
7client import "./subscribe.client.ts";
8
9<main>
10<h1>mailing list</h1>
11<canvas style="display: none;"></canvas>
12<p>
13 the mailing list is used for big project updates. this is about once every
14 couple of months.
15</p>
16<p>
17 the list is currently managed manually. to get added, please email anything
18 with the word "subscribe" in the subject or body to the following address:
19</p>
20<code class="flex">
21 <a id="subscribe">
22 [please enable javascript, this is an anti-spam/scraping measure]
23 </a>
24</code>
25<p>
26 to unsubscribe, send an email asking to unsubscribe. for those who are close
27 friends with me, add your name and i'll add you to the 'friends' list, where i
28 send life updates in addition to new content (1-2 times per month).
29</p>
30<p>
31 alternatively, you can join <a href="/discord">the discord</a> to receive mentions in the <code>#new</code> channel.
32</p>
33<br>
34<br>
35<br>
36<p>
37 <a href="/">back to home</a>
38</p>
39</main>
src/pages/waterfalls.css created+31
......@@ -0,0 +1,31 @@
1.waterfalls {
2 max-width: 110ch;
3}
4.waterfalls > figure {
5 margin-top: 2rem;
6 margin-bottom: 2rem;
7}
8.contain {
9 max-width: 80ch;
10 margin: auto;
11}
12.waterfalls_bg1 {
13 position: absolute;
14 top: 0;
15 left: 0;
16 width: 100vw;
17 height: 1000px;
18 background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCIgdmlld0JveD0iMCAwIDQgNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCAxTDEgMEwyID1MMSAyTDIgM0wzIDJMNCAzTDMgNEwyIDNMMSAyTDAgMVoiIGZpbGw9IiM1QkNFRkEiLz48cGF0aCBkPSJNMSA0TDAgM0wxIDJMMiAzTDMgMkwyIDFMMyAwTDQgMUwzIDJMMiAzTDEgNFoiIGZpbGw9IiNGNUE5QjgiLz48L3N2Zz4=);
19 background-position: 50% -100px;
20 filter: blur(1px);
21 mask-image: linear-gradient(0, transparent 0%, #0004 100%);
22 z-index: -2;
23}
24.waterfalls p, .waterfalls h1 {
25 text-shadow: 0 0 4px #000, 0 0 8px #000, 1px 1px 0px #000;
26}
27body {
28 color: white;
29 background-position: 50% -10px;
30 background-image: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAD6APoAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQICAQEBAQMCAgICAwMEBAMDAwMEBAYFBAQFBAMDBQcFBQYGBgYGBAUHBwcGBwYGBgb/2wBDAQEBAQEBAQMCAgMGBAMEBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgb/wAARCAEsASwDAREAAhEBAxEB/8QAHAAAAwEBAQEBAQAAAAAAAAAABAUGAwcCAQAK/8QANhAAAgEDBAEDAwMDBAIBBQAAAQIDAAQRBRIhMUETIlEGYXEUMoEjQpEVM1KhYnIkB0OxwfH/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8A/lY9Lnofk0GLKVYY+eAaD22dp+figxIyORxQZGONcuR0KDG3lmlLBc7Q3HFAHfWs7ZZicDzmgTGDkIeyaDGSL9PIAf2n5FAUV9JFlADLjkCgxOoKBhU5/FAI17MxyGK/zQONL1WTcI5G4Pk90FI19Ii7k5GO6BBda5qA3bHwo+KCbub+5ujmaVm+xNAHQF2VlNfTJDCpYscZFB2jRvo+G2ss3AHqug5P4oJbVtGlsZyyqTGTwRQLFGAAaAuLx/60BjkBSSM4FBGXdu9zdyNjgGgHmsSowy7fwKAH0I42BOMZoLHTJIZYBAwBRlxQKJoBpt7u25jdsjiguLKSGeJXULyKAo4zwOBQaRFkYOOMdUD54E1GAOP9xe6BxpOjw+ixkwCF80CK+iEczKvKqfFAicgMcnFBmzhQTkGgFEhLZ/tzQexHGeTjJ+1AQrAnjx80BC26yqXBwfgUAjIVJGCaDxQZyRmQbR54NA0gjt7aBQQNx7oE9/dpvAVcKT3QT13t3h14IPIoBrgCaDcP3LQZWsu6Jo5OARwTQLZIXVyqqT8YFB6isLiQnCk5+1BsNNvI23LG2fOBQOrS7ZYmimUg7fNAsnAdJSDwDQIeqAi1tpLqVYo1JLHkgUHbPpXQrbTwkkqBpz8igt55cNjpftQKbqOC4V45ADkHBNBz3UdLktpCwUmMnjigARSOTx9qAnG5MHyPNALHaqjM2OSecigHvoAYX45AzQQ9y2VYeRQaadqBtnAY+35zQO7i7/1MKiLynTUBFlfyWCmKQHjwaB3a6vE5O8DJ57oKqwniuyqqF5OO6C8stJRUWRWx5K0H2+u4bWGRRgMV4x80EW8nqgv8g0E9dzLE3JBOOBQLDcNIe+B4oN0bHHye6BkgG0cA/egFV8MSD55HxQHwOxO0Hg+aA1oFbABG74zQBTQFDn7+aAWg/EFhg5NAq1GI+luXsHigmnlY8eR80HhZGUFQeD2DQaTssUKlcA55oMY5y2GGCR3QMIL0x4Bxx9qBxFfr6W7AJ20AqPFcOd6BSfPVAJewpFC4Xomgn7azmu5dkSk5PJxQdQ0HQUtFV5FzKftQXdtA6MGIIFARdLIzHZ7vjFAKLSZyrsMY7oML5fUX0BFuJ8leqCUutNkgOQvf2oFpBBweCKD8ATnA6oMZlDoykjJFBzrU4Hgnbg7c8GgWuBgEYH3oHeiuTKir8igqdQsPVQSIMMBzQTZ9SBiCCGHjFA+0PUWt7hGmYrHu55oOoyfWFtbwBYCHYrQJ1v5dXJXdguaD3ft/p1udxG7YfNBzG51YvOdzDGeqAyC/iIBZh15NAU98jMqxMCT3g0D2EkxqT380BXoQKcswGTyaDcXNjED/AFVB+QaACXXLKBiwk3EdAGgJsdYttU3x4CuOuKD88RDkDyaDzK8UCguwH2oFc19bSKyHkEUEtcKqyEp+00AzMFx5oBbiXKhQTjPzQDxyFD9qBhFIsmMnBoD1f0uMgig1WTdypxj4oNRHJeMIV7PfFBb6NosdnGGdQXI7IoKaNvTZWA/aeqBysnqR7h8eKDP1RFkjk0A730jZC8CgGad2yc4J7NAJcN7GZ+ePNBLOiyszLgAd80CDUNWjtQY0OWHZFBJy61cu3DEZ8ZoAri7e4Hv5PkmgWSFgNp5+OKCp+noE3h2YbvAoOiRxhgOiMdUC6+0eO4BZQFb7UEzeWVxbIcrkD+4UAEEsxIBJIz5oKXTdXTTZA8xyCOqD9revjU1Ig4UDzQc3lEhlYknOegKD6skgIG8gA/NBc6RZQvEshkBcjJyaCujjRUVdw4Hk0EvrkstvANjsGPwaCL9e5b9zscnjmg+ks2Msfv5oKb6aR/1DOM7QO6C6nuhFC3sJfwRQR93JNMSW3bc9UC9I3OeSfzQbNFhSTk8c5oFrod5A80HiW1JG8tj7UC9htJHf3FB+VipypwaA+GWR8bhkCgZ2kTzSCNFJJPgUHSNJ0X0VWRkJkI+KClFrKFyF66FB4aGVBkocfig/JK0eRyB8UA/6ve5XPIPPNB7oP1Al1O8VI2QH3fAoJUSOAyhj7++aCa1DTJVdn9zBucmgRNbPG/uU4z8UBCxR4yBj5oAbpFZtoA4+aB7oEG+UKDjkUHS449gHJPHmg9kgAk9CglNXv8kwoBzncaCfTaPIzQBXDCRtnjNBpDHtUgA7fxQKplxKQAaAd1JGPI+aBzo100MojkY7CeOaC+RGZQyscEcYoE+uRNNGm0Z5HVBPR2ZGAwx8mg+fo2kmWFBnJ5oLvTbJbOEDHuP7jQOfTWQhWAOe80AmoaWsERlVcgjqgl1tZWJZEYD4xQfZbeYpgIQAOTigSMpViDnOfNBrdRkWoYnB8UCCgIt4Gmbge0dmgb29o8jrHGpOT4oOkaHoiQBGdfexFB0SJY4UAK5fHxQYtdbDnbnFBhJqcZO104+cUAkuyRQwXAPRFAkktZIrhXGSrHwaBt6JxncM4zigW3lwtvGxJw3xQRM8zTSM5PZ4FB4j/ev5oG5EJhIkCk44JoABpEd8G2AAA0AUmgC3yTkgGgkNStDDNwpAz8UDz6ei2yBsgdZFBdBwe+KD64yjknAC8mg5vqM6C4cAjO6gVvcN0p/mg9WsTTTYwSaDpmi/TX6+3IZCuPJ4oE2pfT1tZ3LozgkHvdQLv9GtX6cZ/wDagFl0KRBvhJYjkYNA7tJJI4FSRSGXjkUB89sSP+SZ4oFV2kcftUe4ngCgL02wEf8AVce4jugedUBcZAYE8UBzv+oCwgbgxHBoGMukRW1vGZEUNJ0MUCS508MDtAUecCg53qdv+nuTjkZoBr2Rf0ijyfFBO0FZpdkzQAIuXk+1BeaVo62yCWRQXYZ5FBXWCAyhjgKpoG87Ju3KcgigWyLkE/bmgXNEXYfc90GdxdGBRGoBC90BFpdQ3iFGCh1/bzQZTS/py+/PA4IoIfULtriVhk7Q1AuJxyaD4jjcO+OqDX1mlPpg/wCKB96iWFmrqR6jAcZoN7W7t71feRuxyDQTP1DaBhmNAQp/cBQK9FVlk6IxQWAOQDQYXTk28iK2CRig5neW0yysWJPuPIoM4oWY5wTjugotHhHr5ZRweKDtOmyGKAJGAuV8D7UHOPqESfrpMtyaBEu9f7j/AAaBrZSsATIcqD1QNP8A47+7C80H2zmWRRG/J/FBhcacvriUHco6AoDVAUADxQfaDcnAJ+KBxoyq0vqMBhDnFAZqmoJdyogO0RnjmgmtYv7m1tiYV3gryyig5hNqT3Ln1hyW7oMLtjIFVMkDvFBha28lzMkaKWJbnAoOyaPpyW0EXqKN23nI80D6aZETnAAFAr/1IruCcZ+KAyx1D1JNjnO770DeVioGMYNB4kwsZI/djv4oJy4B5JPdAuiMyTqyZVS3OKB/clZERZP7x3QR+p2n6aUsB7G6NAnZi32HxQeR33j70B9jbBpt27rkjFANqdwzTFQSFXoUAUFy8TBg3H2NBRQXMd0hVyCcchjQJ7iaGxlYREFj4oHNlK0sQZuzQC38hjTd0M80EzK3rsAfJxmgsNI0SD9M0smORnmg9QaeiXZKACMNxiguLKZFYIByeqCF+pFIvXJ46xQII4yxz4oN2OAFX/qg9qWA5J/zQMbdFDAg0DRW5wTkEfFB8dCh+x6IoPFBsWAAJOMigWT61Lp0pCco+M0BVvfxXaiQNknsZoHCRJcRmNxlWHINBz7W/p2SGV5oQShOTigV2VjJPIIlQsScE0HQNG0GKxxJIgMh55FBVErgADGKBZf52jnzQImbP48Cg9wSGKVHzgA80FtHMk0aEYOF5oBJ7kZKjgeTQK3ZNxIO4jwKDKD1JJc7AAG4yKBxdLugwF9wHGBQJLtRd2jK3+5F3mgjGG0kHjB80GZceOaCh0RRIxJ62nIoMNasFUNJH3gkjNBJAlTjHnkUDS2trhsNHlQfJoF17azRzBpSWBP7gKCr00D9OuDmg31S0LwRkDO770CmPRnEbTsQoQZwTQEWmqSykWeRtU4yKCjjQIo8kjugIjkaNlYHGDQIdfb1pQ/yPmgRxHaME44+aDUAZyOSTQbiIEcsB/NAwiRQQAf5FAWIySGzz4GaDdmEkQz+5RQD0Hxjwc/FBJ62wHYoEmn6i1rcLknYTjugvZNcit4VdG5YZ4oFU/1IZx6bAbG/dk0Dz6YuNNMzB1Hqnlc0FjOAJDtGF8UGVAs1H/bP5oEVBnIwUH5oKHSrsm2Kt44zQe5thPLEk9YoA96o2Ao5PG6g0S4KuvSrnqgdpKjr2DnugnppViu5IwOHHIoJK+wJ3C8AsaAE5IODg0DrQ7gxTbGPBBzmgaajMrEj5ByKCVt7cTXJJ/aD1QUiI7ssMS4wMcDxQPY9Et5osT+5yOCaDCPTBZuI+493BNB81VlSOMr+1aCJ1HU5GX01covkA0AOnTFZ0YHktyTQdFjO5FPnHNB7oEuqQu2HHIGKCf8AcGII4oCIsnA6x0aBgsQIyWH+aDaFwTxzQMhnb98cUGYIAYHyKDzQfDjHPX3oE2q2qTQsQRlV4oOcXAMchBOME4NAytxJOoAJbig+PFKJREFbcTgACg6r9LfTawRLf3hKnGVUigrJQJXAj/b4JoPxtZcZAz+KBNqcUqpypxk54oJ8h8cKc/igxaKUqfY35xQF6X6o3R4IB7JFA3uURCpLYbHJoFFwJCCysGAPGKBf6r7sMT+DQPIZmVFIz9qBRfu/6pSCctQKLxGSXL9sOTQCUDa1suFmEqj7ZoNdRlUR7twLKOTmgA0gPMxKoTlu8UF7YRRqpwAZAOTQH5xyTgjzQfCPXO0As3gAUCH6gJsrfa6Nu8cUHKbp3lcsFOOfFAVpzFp41IP7qDp8QxGv45oNKAe4AKHIB4oJq7jCNuUYyecUGCEL55NAakq7RmgIgXBHuGB96BqpGBz0OaDyiGQnAwB3QZtgMVyOD80GcgYoQv7vFAmmtruRGTcMHxmgjdT02WJskgnPVBpp7m3KlsZyMg0HRNA0y11G8juZNoCDLAmgtrydd4ghIWKLgAUGsbf0xtHIoHlou9BvB4HFBrc2Ecse0gHnmgl7nTI4WLBBgn5oBRDGMjaDnsUHkxIgJRAG+RQJrmQOGB7AoFTCQZKscfBoAnuzG25gO/igNj1u3KhWTGPJWg+vItxKJjj015BFB8mspL5RLGeB1zQI7mwuYSdyEgfFAKJpVG3ewA8UHqNtzYkYlc8g0FjZT2EFowtwDLt6xzQH6TJI+93zyxxmgeypvUFOSfFAytrdbCIXMqgluVBoFt9CmqbjKFIJ4oM7L6V0y7GwIu7zkUBA/wDp5AknrRDbt6FAm1S1l0slXjYqPIFAnh1GGQhSSD9xQer+4jjiBRgxYdUE80zSA5PIFB4V8kBs/wAUG4VSMgmg1BI6JFAXbOxYck89UDm6ZbW0aQcMRweqDn8msPHKzFyRnoGgaWmtRSgbz+eaBv8AqYzGZFYEAfNBF6ndJNK2DwD3QKFfPnBHwaCp0K/mgkCq5G7jg0F/Z75XD8tuPOaCljiKKHbx/bQe21BgRGgI+CBQOoLoMgVn92OSTQD3aq6nGOuKCclQI5wMUGTdH8UEjesUcsPHdAEJTjep4PYoFF3JuJ7GTQKTklQDyzUFLJiCyiUH3v3zQPbO7W3tFDYzig8PexXG5cA0CS9sw39SJeD2QKBA5KHaOMd0Fd9OWBmDSyD2480FjHAkPtUAAeAKA62dUkUuMqD1QftV1P15FiQERqAMUGMIYL3wfAoHOnlbdvWZwmDkgmgvdL1S1vBsUqSOKD1quj2t7EweJWyPig4pr30q1pK0tsPaMnAFBzrUnltztYng4xmgyt5coD39xzQMItvH/dAaI/8AiRg0GKsSSD/FA50qD1ZgWB2g5zQBfVeopEjRIw4XGAaDk8twzk4PBNAXYiWV1RMkk+KC4Fu9vZtuJ3MvOaCPnWT1WIBPJ4oFzTMjkHPdA0sL8xzR8Zyfmg7Hp94BbRlFAJUZPmgYjUXPBHdB+WY7t7cf8aAgXntODg/mgJjv96gN385oPkw34YcfegBuSyx7UHGOTQRV2/ucEgd5oEjz+mxUH20Ak7buVwQfig3srJ5WErDaiHOTQb3EvqThQfZHxnNBpNMWUAHAA4xQCxyFZlBJwWGTmgtrhYotK9RNrMw5NBzs5eXr9z9Cg6ro8ItrOMgEFh8UG89yiPjcB+TQb28iyHsfwaD3Nah3D7gF+aApHt402hlJx2TQLriTcTtY8+AaAjT7+SzkV42PB5yaDp2la3HfwlGZQ4XkE0A9/AsobIBBB8UHE/rDQdsnrRghSecCgjkiES7COR3mg2iIQ4bkZ4oC9x4wpI8UG0MXqkMB33QOpL6DTbVjwHKnnNByrVr176dnySueqBRDayTSBEUnJoOh6PpCWyCRwC57zQN7xAYyMcYoJtrVWdgqZOewKCV1CAw3DKw76FBnbKFdSQeDwKDqeiXQlgUEZCL8UDuMgsSevvQeXudz4HCg4GKD0ZBu3Lnk80DCA8HAz+KA71Sy4UePigHuNywyM3/E55oOb3lzukcZ5z3QKXLOxUAnPRoD7WxkwZJPag8E0Hua62D0YuF84oBWljCEAe7/AJYoBhMRkHkeDQZlyTkEigKGqXCwNb7yyEYxQB27/wDyEZv+Q7oOr212otI+uF4xQJ9SkyVcMQfNBnp11IWI3HA+9BSNOXi75/NAvkdweyCe+aD0X2+4nrrNB49U43DJyfmgMtL6a2dZI3K/IBoOh6VqS3sQV2G8DmgmvrEAW2VwcY5xQcgkYbmORn4oPAYH7H4oN1lZRjugYTahbWUZGRuHxQI2J1kkertAP7c0Gq6La20ZeQhsfIoMreXT7eQsqc57xQOI9TiYhUB/igPYiWI+D44oF0eyPcWGD8mgl9XhE0gkXsUCxVC8nH2FB1H6TsYpbYFpFVm7zQUOo2f6YBYgGDDlloEXoTl8Kjn+OKA6Cxu5GwYyAfkUFVY6akQ33DqoI5BNBpe3NjaW0voKGcLwaCMttXS7EkMxAJ45NAlurexSRiWyc9ZoMhbxkBoYN3wcUH57a4dcyHYg/txQA3UESx7kA3Ac0Cd+v5oMqDw5PQBx5IoM8H4P+KD6h2up6wfNBe29yi2G7IDbeBQJ5LqW5znJVegKBjp6OORx80Db9V7xCpyT3ig2MUh95OF88UAc0pLY4wPFB6WTgDOR4GaAiIFivHNA8s4rqGRWQsq5BPigM+pZon0w5bMgHIoOOAPI7bckZ+KAuO1kYg480DFbSMDDkbqCI1CKRY97OSc80GGm3UkEwIzjPOKChvb4zgBSNpHVADDHHMMHGRQMreHY4HXwTQM3uvRHPQHzQKLi99UnBAx4BoFs9wm0qf55oEs1wBwD+KDW31u/tQFilKgdAGgbwfVuqggNNu+zUFJZ/Wt0gUSRI3yQKB3D9Wy3GAAEJ+1BS2X6q+2ksSp8igoX0dBZysxydhoORzxCG4kCnGHI4NAunVywcMSM85oLTS2jNqh4yBznugHu23M3OAPGKCZuXVD7jxQPdNsbHUINoKh9vNAcfp62TIwc/gUG9t9O2ZJDJmgMfQLCJSdg4HxQc81a0VbhlhXABPIFBrp2+QfppQVQnzQU9vpkcStgbgRwaAV3FtvzxigTQapElyXkIODxQUf+v2UsHplsH5oBhNZygFJ1ye8mgKhjhLAmVSv5oHUNxaQAbFDEdE0GhvbiU4QbV/8AGg8tYy3aFJNxDDjNBM3GgzWcjMP2sT4oEd5JNbsFU4FArae4ZiQ7D8GgTTtNOSpHmgZWdhGkeWGSRQZXlnMoLRAkeBQC2EpjuVWXIBODmgsCseA2QBjg5oEN/cANtDcfagSy3aIOD+KBVLd7wwHZ80Aqljknqg94J6GaAqNBngUFJYadJcjKqcYoK7T9LhhKmXG7IzxQdM0l4YlVVAwPigpJ5w1rIq9lDig4lqVu/wCplxz7zxigyjtiwy/xQGQK0R2o5CnsA0Bs0alPUZvaBzQSdwj3tyI4QducZxQXek/TcunxLcyS4yMgA0B8l4gfY55B7oNUmUe4HjFAhudXxLJECSM/4NAmit2u5mYe4Fs0DxrCGOLgAOB3igUPq5tGaJznHANBM3+pNcs2w4B7oFYAOSxoPwLDrJH4oNgzAcEqceDQFW813uAV2bmgtdLSd1UzAjigs7S3RcMQMUDP1IYwCMA/cUC3UZoXQiQqAB2aDmd7JazyukbqStAhljkRyo5HjAoPrxenId6bWzzkUBadH80BMYDDDcjPRoMptMilIdRtb5AoFOqNLaiNQ/HkZoJ+aSSRSTuLfJoFjJI7ck4+9A903R/1UMhP7scZoARZtFcmBxgg4GRQUVtoUkgDbRgjPAoHEP0/GGDPtGD0BQU1nFFbYRFAB7OKBjd2YjCTJyjcnB6oCtPu03KqIeOzQOZtTZEK7TnHmgkrrEkrORyxOaDAgEEDjP2oPBCjAOSR8UAl5JNKohT2p5NBlDGIQu3hlPdA8TVrloxC7kqBxzQBzSbjuJyc95oMf1k0S4yWXHzQJ2V5Z2cEqGPOaB3ZMlqCSwJ2/NABqGslSyoxzjGQaCQubmSdyzf5oMIxnJGT9hQELE7dCgKjgIHu8dUBUSQ5wzKMnzQUFpbRIA67T8EUD63kAA6A+5oGiX8MSn1JlAHgtQRuufU4SQpBJwvW1qCQvfqO9vE2F2UDzmgSxXEscgcMxOeee6CpgE9xGsvpSHPnbQdC17QEkJmt1O4dgCghmieElHBDA8gig1i8f+1AwT9ooJrUbdrm4VewBQDy6cY0JKnqgTyRomSRyDQOdHvURguQDkZBNAbrFqpC3kIwRjNAz0W/E0YjfG5RQP2cEgf9UHtI2ODtbA+BQPrAiRGt5lJUjjNA80rTYYZS0i+3OckUC/WVhM5EOAoPdBLXB2nn5oBWlVR8fmgFaQux54FARGQ/g0Hv0+Dzk/igH2kNxkCg9MCRx/igzKN8A5oBpyUjbaPcTxQerezuJIwWDcjjNAtu9OIJPZ80CxYlZyjDrgUApX0Jtp4Unig3uC9ugkiOVYUC976ZwckD5oBjK5y24kjzQP8AStRP+27H7Emgc3U0yws6OQCOCKCUvLi5AyZnIPjNApLMxyxJPyTQfKCy+mPpmfVZ1eRGEKkZJFB2630ixtoUhCLhB8UGEs44JwQexQS+q6OLgG4hA6yQBQSpgaNtrAgqeBig3QEDn54oMjApffgZoP0sQZGHYx1QQV9/TlkQ9buBQKoppIJN6Ej3UFDFqct4BBnCng5oChHLpzCRMlW6IoDoNZlDguc/P2oKnT9WSaRUdgATQdQ0u1tpoVdgCT0RQb3t3FZqVUg4Xqghzcm5d38FjigR6jcJESMgnPHNAi9dpG7OD1zQEI2AD9uc0DCF19Mkd0G6OGGf/wAUBbRRGMMB7j2aAIxsCf8ArNBnQfBEjyKX/aDQMpbyONQsaDAGBxQTF1dN6zCQ4BFAmmdRIXU4+aDG8AlRHX92OaD4hLQ+lJ2R7SaBf+jdyQCMZ45oD4dHZlyWAHjmg1/0OeIGSNhleeDQEGeYW7QyryKBReIDCGIwaBRQU2g6LJfzK8ilYxzyKDumjxQ2kQihQKFHYFATJL7zk4/igHFgTn1HGPig8XCOq+nHgDyTQT13pild+QXzzignZYmibaQaDNVLf/ugykkjTIZ1H80EbrcCuTLE4Pzg0E1/YR2RxQEac+Z1AHbd0HSBarPaqjAZ28Ggl7yzltWJwdvOCKDzZySRyLKT7VOcA0HRbf6yMVqkUI2uq47oB7fVp7+fEsmS7YwTQP7qJLG0Min3EZoOR6tqrtctlz+7gA0Hm11RRgkj/NAx/wBVEgCIMk/BoH1kW9A554oCo2zwMnJ6oGtsG4L5CjqgLEccuQuMigAuIPTJOCOKASg+lCRyP4oEWqQso3qDx8cUE6zFjyaD8rEEc8Z6oPN7OFdCpI46FB8jmLAEHnyM0B0V5IuASTz80DRr2RohszyKD9DKroVmGSes0CnVANm1PHgCg10bQJbx0kkBEeeiKDrGm6ckKrDEoG1e8d0FDbxCHO8gD5oMniZ2LI3B+9ALJcysx93AoMDI7dsTQZO2FYk+KCXnlSW4dGIGD3QTeq6otpmKEgt5xQRNxf3Erklj31mgyM0zjaSTn7UAkqOgJAIzQMdE9FZlaQEndxQdSttjopXo4xQETWsUyFHAIP2oJu80XYrNExAxnGaCWEMiSMuSCD4oGkN2bIrMCSynJoC7r6muNRj9EjaoGKCJvYmaZiSTk/NAMVZfn8g0FToDWh9spzJnzQXcD26LtyNpoPr3tha+53UHxmgwk+pLBQQuCR1igUTfVmz/AGEAwe8UFBpuqLqlsS/Ei+aDf0tpLNwvyaBbdanBCSFIJHigVTams6lSgwezmgRSABiQOCaAcvzx0KACZtz/ADjzQfEkZDx1QMoJY3I3HBoCvWKHCnIoN1fd7h3QNtP0xr+QGRTsU8feg6Da2sdtGqIMYFAdFI0bBh/NA13h0DblIxyKDH19vCkY8cUCsHcAfmg+0CnUb1YUKg8kcUEgzszl8nJPdAHeaUblDKBlgOaCYn0yVMttPBoM40ONpQcecUA90CAFxgH7UG2lRhrmNcHBPJoOrW8SpEmAP2igI6oJrWL10BiQkE9kUEuGwSTkk9mgFuZRkKDQaW8DHlV6HOKAG8iYP0STzQBmJ+Rg4xyaD3bF7eVXB4B5oOj2Mkd1CrjAOOaCX+oM+sqKSBjoGgQLHJxyevJoPRjyeQST1zQdA+nbeSK33NwWORQNdQluHi9NBx5IoJWe3kGS2TxzQYpCMd/kZoPs8YQYIHPfFAuCAtz0TwKDO4t44/PJ+1AuPZ80H0ZyMZz4xQMYQ+BuJPxmgqNG0uW9lXcCIxjJxQdRs9I9FFVFCj5oDxp0h4DD/NBhLZzRdgY+xoBXlaJGByPtQAregg+8jB6oGMUSLGgY4bHRoA72dbZGOR9s0ENcTtPIWY8Z4oMB2M/NA4glWNOcH29GgzhhivZShX2E8kCg9z6FbpllAI+woJLWtNdU3qmAvwtAv0eNfXTd4PdB0hHwqjHAHFBspDdnA80EBrt3GLh1UjjzQTjTEjjj70HqGJ5JVBGeaDqX01oZnYeqoCMOyKDb6i0nTrGRQFUtjk480EwIrEn3IPzQeX0q0nH9MgE/IoN7G0ksSVYkp4oF2qWbTzh1A6oAP0gjB3DBx8UG2nacbmYuw/pqeKC6gjWMKqjAAoGEMSyttbo/agXaxp5i2iFd277UCRdJnADlCM/IoBLuxkVGZ+x0MUCNFJcL/wCXdB+1WMIsfyQM0CSgaWtpmP1WB564oKLStIkupFZlIQHyKDqmkafHFtjRRhQM4FBRPKVUqoxjg0C97qVclSRx80Ap1GUttYZBNB+mTfgMOHHf5oE0uluJG2g4zxxQM7gqoE0R3KR4oInVLp5pSp4UUCknHJoM9/PXFB6aYlgg/u+BQUEDxWdozniRlO00A9jq3vMc3KluDQb6qqXcBWLyp6oIqztZIrsBlI2nzQWcbZAGckfeg+ySBFYHgFeTQQWqWQeVpFOcnJ5oFkFpJI4RVLEfA6oHFpaSRXCeohAB44oOvaKWWGML+5qBH9Wx++NieSOc/FBDBADnOcUBtsCrbzwB4oHKXMUnsPR6NB8lttp34yuPigSSp+pm9JFwAfcaCgtrdYEVVGCBQFLncMfNAZDJ6bZ4z80DWxt31C5Rf7QecUB9/DBDL+nXG5RyfvQTt9Zxem7OQAQcCg5pOqxXJ2n27uCKALVJg5RRjgc0CyJC8iqPJ8UHRdP0l7hYU27YxjJoLiCzS0jVEXHHJoHtjLHApZiCSOiaDeSRXyVOQxoA5kBHA78ZoA/SVcuxxt6JoFdxeSo+5WyB0KBlbatE0QMu3fnnIoBY/USzXskDnNAl1O0SWATxgAge7AoJJiSefB6oPNAXaxJLKnAyPmg11gupWMAhVAoJ9Xw3tJBBoHdlf4IjkJI8ZoMtTvIYiGjAL/IFARpczzKWc8k9ZoDrwMIXYc4HFBISyM5Ofmgrvp6wtyrTyquAvZoDZ7eCe4DRKNqnnigf2k4h9NVwMDFAt+qhvSGTvjxQQ0ab2A+9ASfb7RnPig+oCvOcHxigf2cwkTY48eaDMWccUrSIBhj3Qb0H1Thh+aDVgxxj+eaCl0y4W1t2mVhvxQLpbv8AUTs8mdx8igkfqQ6gI98Mjel8A0EAly+8CXJIPNB5nR5GaTwOhQO9A0ea8uFkZSEXnmg6/bxLbKqhRwBzQYXl5sOBnOaBWb2QDljnyM0DrS731cxscnNA0cn1AOcYoMLtspgHA+1BPTqCCF5OTk0C02z5P7jz4oKxFPo7Ac5HmgUco0lvJyrg7c0EdexejO6+M5GaAEv2AP5oGWkkNcopIzmgo9Ut45IWyOdvBNBzuaMxSMp4wxxQMbSxknUO3tUHug+X2mHbujJdh2AKA3R1KqUZSGHeRQUktv6lm+7Az5IoEsGl25UvcSBVHIzQLP1bRXLQQOfRJ8N4oK+2UCNSOSRyaAigC1dzJbopJyPNBKIApz96DcEHkf5xQboqjk5J+1AxtwB4xnxQGxEM2wkf5oPjoUYg/wAUHkdj80Ht5Aucf5FBLz6vcWlwybyYi3Kg0D+yvo7oBkOeeaB/6UVxCY5NpBXnNBz3WPp9baRposFSc4FBro2hy3vudCIh2cUHQbO0iso1jjVRtHJxQFkknJoEeocNkeKBVQF2U/oToT0TQWBmzH6pB5HFAomuck78kDxQBszOrbF2k+cUHxIJMcuAT2M0B9reRsgGaBdqtwEkidMA57oJrVpBI4YEHcBnFAnoNrOQ286vnAzQVd5dB4VIOQRzQSjxrPdgd880FDHC77YoR8cigpLOwghUeqA7HvNB8n02BXMsKgbjkgUGV3zaFUGCo5oOf6leuoZCcD7UCWB9zhgTkdGg6NpzFrdSe8UB9AHeQ+tHjNBLTRPGwB4APfzQfkznH+aBlEIyATk4oDYgG6H4BoCdgT3LwRQe5WDqp8+TQY0GcmcDjNBDawWWYkjH3oBdI1NrS4VXJ2E85oKO7+oXBxAccdg0C1tanlb+q24f8TQdE+l9WS5t2txFtIHYXigeOMOw+9B5oEWoHofNAsJxyaAeSTGCOMHgmgqbW5LW0YZsgigykkQkhQMgck0An6naSMqKDM3Kg8vk0Hi19QRcr4+KAXU9xRCTz0MigVXcJWGOQ8k0CskAZNAwtEtHXdK+DQGz3MAhMaNn4zQKdOhnubtiiMV8HFBe2KrA/pHBcjnigbspXk9fNBmrGRhGoJJ8Cgz1e0ms7NnVdzOvAHdBx+7gvLh3Poufd4FAHFBcROFeN1H3FB0zT1K2yAggkDugOoPEgypoJ+8QFTjv80C0Arklc/HNATFKRwV7NAzt2LEAHvqgOcHb+O6DPPAHxQfKDyzKvZ78UE1rcMEkRYEB/vQQDHbLjPO7ugobW0a5Qsp6FBrp2k3F/eLAikgv7iPzQdtsdPtNHtlhRFa4ZfcwoNUiMrEnC7jwDQbtYPjIIoJvVLGdGDbCQPgUCU207EAKf5oM5LC4Zf2j/NA20+B0QCYkBeqD7dSRI7ZBUHoigTzRhuY3zn70AgEg/wD7QCx63NCNuARjzQGpd/r1DngIeRQFwQpqAZTwF4GKAK70N0BMbZx0KBDLDLCxVwRg9igyRgGBPODyKCo0rVYYR6SxAyHyBQNLJZ3unldSATkCgqFIZCpGWHVA0tLMW9u15JgHHtDDugAe4/VuRKcr8E0GllaWRm9KSJCG6O2gox9IafdAOYUx2CEoEGt/Tk1nGWtI2IUcKBQc7e9uIJSlxEybT5oCZtRg/TnHDkUE565d2yxIJoPgLBiBk89UBSFSeVAx8CgYW7Rrg55HzQH7w6nbzkUHsRhYmkfjjjNAIsqMcBhn80HieH1lxuI+4oFc2l+op3uSAKCJvrCNJ8ISQDzQHWM5t2AHQHNB1n6ZNhDDLdnb6xXjPzQHev68pkzk7uBQNIw0hQA8g/FBQwBQqq5AOPNB+ubSOVSSB1QTN1aCE5AyPPFAHhT4H+KDC59sRYcY8Cgnp5FfIOCfPNAvkT2lkY8fegXPcOrEbqBDJyTjyRyKCgtdttYMzcMw4oGGm3P6aFmY8seDQaNq298E8ZoP0sH65CUQtgdiglbmMwu0eeQaB59OWQnuPUZcqvk0HQjEiEYUCg9IcMpHzQbalqEzxRxKNqL8UA1spYZI93wKBnA0MLb5j10KCm0r6ijEwgONgOAaC3dYrmIkbWBWg5t9R/TVtdb2jQLJjII4zQcX1uxl09WVgwwTign7N2YEkZ5oGkTZ4I580B4KlAf7vNB8oGlgrSSKvJBHNB8+orr0IBGjBcDBoOff6s8TDDE890D2010MFD857zQNbm/RbYyKexQQtzceqzP5z3QYpIG880Fjolyw9mSVOOKDothbsQGb2qfmgdnbCu5CCaAeO6meX3HhT80D2K8jIVSRuoBbva44wfuKBC42sR4oBbsYhbPH5oI25fY24HzzQDvIAuVbscigUSSe8+f5oPdnYmZ8yEKi90BF24YrFFn04/3UHkzBkC5wAOQKAN2xjnGO6C20e6tmsJFyBKE8mghbx91zISckvgUHQPpqAR2nqf3MvxQNry5WJQW4+1BlbXkbsBu8/NA1dYpUGW4XvAoPiXUEClVHX92aAWe6jlyR/AoMIpDEwKnac9g0Ftof1EY3W3uHO08BieKCpnkiuVLIwYEcUHO/qrR47q1kfCggfFBx/wDTi3JUY7ODQfRw27/qgMDl1JXvzQeo8t7R3nigqtMjFtA9xKADt4zQc1+ptU/UTsik4BOSDQRZdmPZ+wFBS6PYy3DhiCEHkigpNSg2QCNR7QORjugjpLeQbiAcEfFAtMjoxBzQUGiXkq3SDPG4UHXY7qUohDEccc8UG6XUr8FiT+aDRZvT4z7vOD5oPRvGOME7l8g0B0V2743ZIx5oPTqM7uKBRf7ijNu9vxQRN1IMsM557oE5nKMc8gmgzOWJZc4PwKBjczlQUh3BetwoAxMVUjHJ7NAIZG3FhxnxQfGYt3QfFuHiJ9NmA84agx3lnDMec90HRtEuyLRVHJ29A0Hu/mEkTFiOM8UCa1lb1l2njNBWwT+wqeeKAeUjH7s56oPAYKgY9D5oPIk3bjkUHpZCOc4IIwaCv0TV2RhFM/B6LGgb666TWEhjOcqckfig4TcsFmYHk5oBg/yKDeMkMCvNA7toRxK/Q55oAtc10Qwm3hPOOhQc5ljmuGaQqx3d8UBumaPJcyhnUhAfIoOjWtrHbRqiKBgc8UA18uR1kUCY2bSRtwAMd4oIu4iKXEkfw3FAXZkxSKwBBVvmg6rp8zyWitjugPV/SQsQc+KDBJzv3Ng/bNBssmXBGMHugawl9uVGcGgNZJmUO4Kp8kUCbViY7VipJOPFBzuV5HZhtbI+1BgltNM20oVGeyKBvFZQRIFkkG7s80GkoiRWTaP8UCQwyOG2oSPkCgH9KX/g3+KDy0ExGFRvvxQfBZ3J/wDsvz1xQZyQyxf7iFc/IoKnRrpVgcHBITqgHaSa5mcDdtzwvzQGWkDh8MNpzxQNZbgxFI1PLUDGO2aSPf4XknNADcOchRkAUGSvjHefkUBcMckhIVScnwKB5DYPhZGbZ880Die9hisJLdmDuUwMc0HGLkNJduCCvu4oCI7T/mwHxzQGK1rbLlnUkUCu+19V/pxceBQebKC11AepL7pB2tAVdC1s02pGpb4NAFHqvpDakQXPfFAztb+SVhkAD5xQMZ8Sx4GNwHmgXPOkaFDjOPFBKXsIMplHG490A6FVdFPW4ZNB2XQ7jSf00SySorBOQTQfbyJJpT+nljdc+0BhQDx6RducjAHzuoGVtpJjI9eVQM880FDDLYWaEDEjY6oEev6nK1pmCPYoPYFBMW2qpNAUuf3AcZ6oFr3cBk2RxKSTwcUBhsbmUBlAQfI+KDE6eg4kdmbyc0C+9YKCx6J4oCdEvbdpPQmQHeeCRQWLaXagBhGhVvO2g/RadaiQH0k5+1Aya1soxgRx5x1toIH6gjjkl2Rqox4AoElna3EbgqCEP7sDxQWVrbW7BXRVDEc8UA16VtnLZAGOMUErPqZ/UbxyAaBvB9UMi7CnB7FB7XWrWTPqJtyeTQFxX1g5B3AfagdwajEqgQoD/wCVAR69zcEe5hn70BkVjI5G/kHugXaj9OIf66ABhzgUEdqMDxLhMgg4ODQIGUyHDscecmgR6jGqSDZ8cmgK0uea3O/nZjmgJubn1W3M2eeqAm2VLhOhkHvFA0t0EZOeCKDzc3rRZAbn4zQKJLkvlmJz96BbcXYxyeM0CeS4Zj7SRz3QfhdXK4xNIMf+VAwttUvkI2zy5/8Aagpbf6k1SMACZyOv3UFFY6td3bosjSHceeaDoemab6wR3yeuzQMNfsYU0xyFUEDvFBx1tisyjB5oMBGUnWRes80FxHcxtbrhhu24xmgVOVLEndmgRXjNeS+nFgRqcbqCz0T6fsEtxcyyK0oGdpNAVc3iwttQ5QeCaD9FexvyCAR96BLqWpmOcIpA+TmgWJi9nGT+aCiSCCCMK205HeKCcv7w2Un9JhtPjNBOXmqyXR25xQLRjJLZNB6xuJKjGKDVFcjok0GsdvKz4G7nrNBX6XZzRlWdzj4oLm0SMAEkcDrFA0e6ihTLEKB0TQAXOp24hLmVSnzuoOa6lrVlNcGJCCpPJoEl5EGUvE3fQFAlS1eaQGTPB5zQPo4I1jVABjFAtvNNfl4iT8gUHzSpWgmMcwIyeM0D+a4t03DeufvQTF3dj1Dggj80Cie+zkL/ABigXySyyAbgcfOKD8ikDrs0GyRuSPaaA+3hkdgoU5zzxQWthoheNZJAR/FBU2CQWzKgQZHnFB0DTrsBVA6A+KDbWXNxYypkD2nzQciksz6hI4AagIWBUUAjJI7oCIFVGA574BoC3jhDHc4UnwaBJEiovtHfZoDYZ5YyFRyB8ZoNpHZlBY5J7oApHZDlSQc+KBZOxmkUyHJ+RQNrONY2Vl4JPZoPGp3UyA7Wxg/FBE3U8sjHcxOTQDp3+BQbqATg/FAVDGufPdAdEq7gMCgfWkMeA23nFA4gYjGPmgdQMQB+PNBO/Ul7cRoiowAOcjFBzK41K8dTG0p2kngUC3cc7snOe6CgsJXkjO85wBjNASn7vzQGr0PxQGRcjnngd0Hh7WF2DFMMOiKCT1MlLhlUkAE+aBNOSVGTQBBFyM5OT5oKpLKBtODlTuAHOaBTZxI7lSOKCptbG3OMqf8ANBQ2thaph1jG7GcmgoLIBpFjIynxQfbxFhuCUUDjzzQM7G5l93I9vXFBrdXczKULDaexignG/caDwVBxnxQeCxDcAcdE90CieR3kYs7ccDFB/9k=);
31}
src/pages/waterfalls.tsx created+63
......@@ -0,0 +1,63 @@
1import { Video } from "@/tags/Video.tsx";
2export default () => (
3 <main class="waterfalls">
4 <div class="waterfalls_bg1" />
5 <main class="waterfalls">
6 <div class="contain">
7 <h1>waterfalls and gender identity update</h1>
8 <p>
9 this is a song about identity, jealousness, and the seasons. more
10 specifically, it's a personal account of how it felt realizing i was a
11 transgender woman. enjoy.
12 </p>
13 </div>
14 <Video
15 title={
16 <>
17 <strong>music video</strong>: waterfalls
18 </>
19 }
20 width={1920}
21 height={1080}
22 poster="/file/2025/waterfalls/thumbnail.jpeg"
23 posterHash="hMM%+pl^]eOvxCXU$$Ew4TB~LceBsAacSiOq3*F;MevmthFf+]$*WM]%E2KybarEt7NIJ3K$J8r=igxbTERP"
24 sources={[
25 "/file/2025/waterfalls/stream/hls.m3u8",
26 "/file/2025/waterfalls/waterfalls.webm",
27 ]}
28 downloads={[
29 "/file/2025/waterfalls/waterfalls.mp3",
30 "/file/2025/waterfalls/waterfalls.mp4",
31 "/file/2025/waterfalls/waterfalls.webm",
32 "/file/2025/waterfalls/lyrics.txt",
33 "/file/2025/waterfalls/",
34 ]}
35 />
36 <div class="contain">
37 <p>
38 it's nice to be <em>free</em>.
39 </p>
40 <p>like paper airplanes in the wind.</p>
41 <p>the stars shine in the sky. it's beautiful.</p>
42 <p>
43 love
44 <br />
45 –clover caruso
46 </p>
47 <br />
48
49 <p>
50 <strong>more</strong>: <br />
51 <a href="/file/2025/waterfalls/fragments">fragments</a>
52 <br />
53 <a href="/q+a">q&a page</a>
54 </p>
55 </div>
56 </main>
57 </main>
58);
59
60export const theme = {
61 fg: "#fff",
62 bg: "#000",
63};
src/site.ts+1-1
......@@ -15,4 +15,4 @@ export const siteSections: Section[] = [
1515];
1616
1717import * as path from "node:path";
18import { Section } from "#sitegen";
18import type { Section } from "#sitegen";
src/tags/PhotoGrid.css created+16
......@@ -0,0 +1,16 @@
1photo-grid {
2 display: grid;
3 gap: 0.5rem;
4 div {
5 position: relative;
6 width: 100%;
7 height: 100%;
8 border: 2px solid #0009;
9 }
10 img {
11 position: absolute;
12 width: 100%;
13 height: 100%;
14 object-fit: cover;
15 }
16}
src/tags/PhotoGrid.tsx created+134
......@@ -0,0 +1,134 @@
1import "./PhotoGrid.css";
2import { MediaFile } from "@/file-viewer/models/MediaFile.ts";
3const { isArray } = Array;
4
5export interface PhotoGridProps {
6 style: any;
7 base: string;
8 width: number;
9 widths?: string[];
10 heights?: number[];
11 items: Item[];
12}
13
14type Item = [img: string, options?: ItemOptions];
15
16interface ItemOptions {
17 w?: number;
18 h?: number;
19 align?: keyof typeof alignments;
20}
21
22const alignments = {
23 bottom: "50% 80%",
24 "bottom-end": "50% 100%",
25 top: "50% 30%",
26 "top-end": "50% 0%",
27 left: "30% 50%",
28 "left-end": "0% 50%",
29 right: "80% 50%",
30 "right-end": "100% 50%",
31};
32
33const typicalPageWidth = 768;
34
35export function PhotoGrid({
36 style,
37 base,
38 width,
39 widths,
40 heights,
41 items,
42}: PhotoGridProps) {
43 if (!base.endsWith("/")) base += "/";
44 let rows: boolean[][] = [];
45 const row = (y: number) => (rows[y] ??= new Array(width).fill(false));
46 const anyCollide = (x: number, y: number, w: number, h: number) => {
47 for (let yy = 0; yy < h; yy++) {
48 const r = row(y + yy);
49 for (let xx = 0; xx < w; xx++) if (r[x + xx]) return true;
50 }
51 return false;
52 };
53
54 const firstRowHeight = heights?.[0] ?? 325;
55
56 let x = 0;
57 let y = 0;
58 let contents = [];
59 for (const item of items) {
60 const [img, { w = 1, h = 1, align } = {}] = isArray(item) ? item : [item];
61 if (w > width) throw new Error(`Item ${img} too wide (${w} > ${width})`);
62
63 while (anyCollide(x, y, w, h)) {
64 x += 1;
65 if (x > width - w) x = 0, y += 1;
66 }
67 for (let yy = 0; yy < h; yy++) {
68 const r = row(y + yy);
69 for (let xx = 0; xx < w; xx++) r[x + xx] = true;
70 }
71
72 const info = fileInfo(base, img);
73 contents.push(
74 <div
75 style={{
76 ...x === 0 && y === 0 &&
77 {
78 "aspect-ratio": ((w / width) * typicalPageWidth) / firstRowHeight,
79 },
80 "grid-area": `${y + 1} / ${x + 1} / ${1 + y + h} / ${1 + x + w}`,
81 }}
82 >
83 <img
84 {...info}
85 style={{
86 "object-position": align
87 ? (alignments as Record<string, string>)[align] ?? align
88 : "50% 50%",
89 }}
90 />
91 </div>,
92 );
93 }
94
95 const height = rows.length;
96 return (
97 <photo-grid
98 style={{
99 ...style,
100 "grid-template-columns": widths
101 ? mapSizes(widths).join(" ")
102 : `repeat(${width}, 1fr)`,
103 "grid-template-rows": heights
104 ? heights.map((h) => (h / firstRowHeight) + "fr")
105 .concat(new Array(height - heights.length).fill("1fr"))
106 .join(" ")
107 : `repeat(${height}, 1fr)`,
108 }}
109 >
110 {contents}
111 </photo-grid>
112 );
113}
114
115function fileInfo(base: string, img: string) {
116 const filePath = path.join(base, img);
117 const file = MediaFile.getByPath(filePath);
118 const dimensions = file?.parseDimensions();
119 if (!dimensions) {
120 throw new Error(`File does not exist or has no dimensions: ${filePath}`);
121 }
122 const src = "/file" + base + encodeURIComponent(img);
123 const alt = path.basename(img, path.extname(img));
124 return { src, alt, width: dimensions.width, height: dimensions.height };
125}
126
127function mapSizes(sizes: Array<string | number>) {
128 return sizes.map(mapSize);
129}
130function mapSize(size: string | number) {
131 return typeof size === "number" ? size + "px" : size;
132}
133
134import * as path from "node:path";
src/tags/Video.tsx+1-2
......@@ -14,7 +14,6 @@ export namespace Video {
1414 borderless?: boolean;
1515 }
1616}
17 function PrecomputedBlurhash({ hash }: { hash: string }) {
1817export function Video(
1918 { title, sources, height, poster, posterHash, width, borderless }:
2019 Video.Props,
......@@ -23,7 +22,7 @@ export function Video(
2322 return (
2423 <figure class={`video ${borderless ? "borderless" : ""}`}>
2524 <figcaption>{title}</figcaption>
26 {/* posterHash && <PrecomputedBlurhash hash={posterHash} /> */}
25 {posterHash && <PrecomputedBlurhash hash={posterHash} />}
2726 {poster && <img src={poster} alt="waterfalls" />}
2827 <video
2928 controls
src/tags/blurhash.tsx created+34
......@@ -0,0 +1,34 @@
1import * as blurhash from "blurhash";
2import sharp from "sharp";
3function decode83(str: string) {
4 return [...str].reduce(
5 (value, char) =>
6 value * 83 +
7 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~" //
8 .indexOf(char),
9 0,
10 );
11}
12function getSizeFromHash(hash: string) {
13 const sizeFlag = decode83(hash[0]);
14 const height = ((sizeFlag / 9) | 0) + 1;
15 const width = (sizeFlag % 9) + 1;
16 return { width, height };
17}
18export async function encodeBlurhashPng(hash: string) {
19 const size = getSizeFromHash(hash);
20 const data = blurhash.decode(hash, size.width, size.height);
21 return (await sharp(data, {
22 raw: { width: size.width, height: size.height, channels: 4 },
23 }).png({ colors: size.width * size.height }).toBuffer());
24}
25export async function PrecomputedBlurhash({ hash }: { hash: string }) {
26 const data = await encodeBlurhashPng(hash);
27 return (
28 <span
29 style={`background:url("data:image/png;base64,${
30 data.toString("base64url")
31 }")0px 0px/100% auto;`}
32 />
33 );
34}
tsconfig.json+1-1
......@@ -13,7 +13,7 @@
1313 "rootDir": ".",
1414 "skipLibCheck": true,
1515 "strict": true,
16 "verbaitimModuleSyntax": true,
16 "verbatimModuleSyntax": true,
1717 "target": "es2022"
1818 },
1919 "include": ["framework/**/*", "src/**/*"]