less.json 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. {
  2. "case_insensitive": true,
  3. "illegal": "[=>'\/<($\"]",
  4. "contains": [
  5. {
  6. "className": "comment",
  7. "begin": "\/\/",
  8. "end": "$",
  9. "contains": [
  10. {
  11. "begin": "\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b"
  12. },
  13. {
  14. "className": "doctag",
  15. "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
  16. "relevance": 0
  17. }
  18. ]
  19. },
  20. {
  21. "className": "comment",
  22. "begin": "\/\\*",
  23. "end": "\\*\/",
  24. "contains": [
  25. {
  26. "$ref": "#contains.0.contains.0"
  27. },
  28. {
  29. "className": "doctag",
  30. "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
  31. "relevance": 0
  32. }
  33. ]
  34. },
  35. {
  36. "className": "keyword",
  37. "begin": "@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",
  38. "starts": {
  39. "end": "[;{}]",
  40. "returnEnd": true,
  41. "contains": [
  42. {
  43. "$ref": "#contains.0"
  44. },
  45. {
  46. "$ref": "#contains.1"
  47. },
  48. {
  49. "className": "string",
  50. "begin": "~?'.*?'"
  51. },
  52. {
  53. "className": "string",
  54. "begin": "~?\".*?\""
  55. },
  56. {
  57. "className": "number",
  58. "begin": "\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
  59. "relevance": 0
  60. },
  61. {
  62. "begin": "(url|data-uri)\\(",
  63. "starts": {
  64. "className": "string",
  65. "end": "[\\)\\n]",
  66. "excludeEnd": true
  67. }
  68. },
  69. {
  70. "className": "number",
  71. "begin": "#[0-9A-Fa-f]+\\b"
  72. },
  73. {
  74. "begin": "\\(",
  75. "end": "\\)",
  76. "contains": {
  77. "$ref": "#contains.2.starts.contains"
  78. },
  79. "relevance": 0
  80. },
  81. {
  82. "className": "variable",
  83. "begin": "@@?[\\w\\-]+",
  84. "relevance": 10
  85. },
  86. {
  87. "className": "variable",
  88. "begin": "@{[\\w\\-]+}"
  89. },
  90. {
  91. "className": "built_in",
  92. "begin": "~?`[^`]*?`"
  93. },
  94. {
  95. "className": "attribute",
  96. "begin": "[\\w\\-]+\\s*:",
  97. "end": ":",
  98. "returnBegin": true,
  99. "excludeEnd": true
  100. },
  101. {
  102. "className": "meta",
  103. "begin": "!important"
  104. }
  105. ],
  106. "relevance": 0
  107. }
  108. },
  109. {
  110. "className": "variable",
  111. "variants": [
  112. {
  113. "begin": "@[\\w\\-]+\\s*:",
  114. "relevance": 15
  115. },
  116. {
  117. "begin": "@[\\w\\-]+"
  118. }
  119. ],
  120. "starts": {
  121. "end": "[;}]",
  122. "returnEnd": true,
  123. "contains": [
  124. {
  125. "$ref": "#contains.0"
  126. },
  127. {
  128. "$ref": "#contains.1"
  129. },
  130. {
  131. "$ref": "#contains.2.starts.contains.2"
  132. },
  133. {
  134. "$ref": "#contains.2.starts.contains.3"
  135. },
  136. {
  137. "$ref": "#contains.2.starts.contains.4"
  138. },
  139. {
  140. "$ref": "#contains.2.starts.contains.5"
  141. },
  142. {
  143. "$ref": "#contains.2.starts.contains.6"
  144. },
  145. {
  146. "$ref": "#contains.2.starts.contains.7"
  147. },
  148. {
  149. "$ref": "#contains.2.starts.contains.8"
  150. },
  151. {
  152. "$ref": "#contains.2.starts.contains.9"
  153. },
  154. {
  155. "$ref": "#contains.2.starts.contains.10"
  156. },
  157. {
  158. "$ref": "#contains.2.starts.contains.11"
  159. },
  160. {
  161. "$ref": "#contains.2.starts.contains.12"
  162. },
  163. {
  164. "begin": "{",
  165. "end": "}",
  166. "contains": {
  167. "$ref": "#contains"
  168. }
  169. }
  170. ]
  171. }
  172. },
  173. {
  174. "begin": "([\\w\\-]+|@{[\\w\\-]+})\\s*:",
  175. "returnBegin": true,
  176. "end": "[;}]",
  177. "relevance": 0,
  178. "contains": [
  179. {
  180. "className": "attribute",
  181. "begin": "([\\w\\-]+|@{[\\w\\-]+})",
  182. "end": ":",
  183. "excludeEnd": true,
  184. "starts": {
  185. "endsWithParent": true,
  186. "illegal": "[<=$]",
  187. "relevance": 0,
  188. "contains": {
  189. "$ref": "#contains.2.starts.contains"
  190. }
  191. }
  192. }
  193. ]
  194. },
  195. {
  196. "variants": [
  197. {
  198. "begin": "[\\.#:&\\[>]",
  199. "end": "[;{}]"
  200. },
  201. {
  202. "begin": "([\\w\\-]+|@{[\\w\\-]+})",
  203. "end": "{"
  204. }
  205. ],
  206. "returnBegin": true,
  207. "returnEnd": true,
  208. "illegal": "[<='$\"]",
  209. "relevance": 0,
  210. "contains": [
  211. {
  212. "$ref": "#contains.0"
  213. },
  214. {
  215. "$ref": "#contains.1"
  216. },
  217. {
  218. "beginKeywords": "when",
  219. "endsWithParent": true,
  220. "contains": [
  221. {
  222. "beginKeywords": "and not"
  223. },
  224. {
  225. "$ref": "#contains.0"
  226. },
  227. {
  228. "$ref": "#contains.1"
  229. },
  230. {
  231. "$ref": "#contains.2.starts.contains.2"
  232. },
  233. {
  234. "$ref": "#contains.2.starts.contains.3"
  235. },
  236. {
  237. "$ref": "#contains.2.starts.contains.4"
  238. },
  239. {
  240. "$ref": "#contains.2.starts.contains.5"
  241. },
  242. {
  243. "$ref": "#contains.2.starts.contains.6"
  244. },
  245. {
  246. "$ref": "#contains.2.starts.contains.7"
  247. },
  248. {
  249. "$ref": "#contains.2.starts.contains.8"
  250. },
  251. {
  252. "$ref": "#contains.2.starts.contains.9"
  253. },
  254. {
  255. "$ref": "#contains.2.starts.contains.10"
  256. },
  257. {
  258. "$ref": "#contains.2.starts.contains.11"
  259. },
  260. {
  261. "$ref": "#contains.2.starts.contains.12"
  262. }
  263. ]
  264. },
  265. {
  266. "className": "keyword",
  267. "begin": "all\\b"
  268. },
  269. {
  270. "className": "variable",
  271. "begin": "@{[\\w\\-]+}"
  272. },
  273. {
  274. "className": "selector-tag",
  275. "begin": "([\\w\\-]+|@{[\\w\\-]+})%?",
  276. "relevance": 0
  277. },
  278. {
  279. "className": "selector-id",
  280. "begin": "#([\\w\\-]+|@{[\\w\\-]+})"
  281. },
  282. {
  283. "className": "selector-class",
  284. "begin": "\\.([\\w\\-]+|@{[\\w\\-]+})",
  285. "relevance": 0
  286. },
  287. {
  288. "className": "selector-tag",
  289. "begin": "&",
  290. "relevance": 0
  291. },
  292. {
  293. "className": "selector-attr",
  294. "begin": "\\[",
  295. "end": "\\]"
  296. },
  297. {
  298. "className": "selector-pseudo",
  299. "begin": ":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+"
  300. },
  301. {
  302. "begin": "\\(",
  303. "end": "\\)",
  304. "contains": {
  305. "$ref": "#contains.3.starts.contains"
  306. }
  307. },
  308. {
  309. "begin": "!important"
  310. }
  311. ]
  312. }
  313. ]
  314. }