@eslint/css-tree 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +194 -0
  3. package/cjs/convertor/create.cjs +32 -0
  4. package/cjs/convertor/index.cjs +8 -0
  5. package/cjs/data-patch.cjs +7 -0
  6. package/cjs/data.cjs +120 -0
  7. package/cjs/definition-syntax/SyntaxError.cjs +16 -0
  8. package/cjs/definition-syntax/generate.cjs +139 -0
  9. package/cjs/definition-syntax/index.cjs +13 -0
  10. package/cjs/definition-syntax/parse.cjs +556 -0
  11. package/cjs/definition-syntax/scanner.cjs +113 -0
  12. package/cjs/definition-syntax/walk.cjs +57 -0
  13. package/cjs/generator/create.cjs +102 -0
  14. package/cjs/generator/index.cjs +8 -0
  15. package/cjs/generator/sourceMap.cjs +96 -0
  16. package/cjs/generator/token-before.cjs +170 -0
  17. package/cjs/index.cjs +65 -0
  18. package/cjs/lexer/Lexer.cjs +517 -0
  19. package/cjs/lexer/error.cjs +128 -0
  20. package/cjs/lexer/generic-an-plus-b.cjs +235 -0
  21. package/cjs/lexer/generic-const.cjs +12 -0
  22. package/cjs/lexer/generic-urange.cjs +149 -0
  23. package/cjs/lexer/generic.cjs +589 -0
  24. package/cjs/lexer/index.cjs +7 -0
  25. package/cjs/lexer/match-graph.cjs +530 -0
  26. package/cjs/lexer/match.cjs +632 -0
  27. package/cjs/lexer/prepare-tokens.cjs +54 -0
  28. package/cjs/lexer/search.cjs +65 -0
  29. package/cjs/lexer/structure.cjs +173 -0
  30. package/cjs/lexer/trace.cjs +73 -0
  31. package/cjs/lexer/units.cjs +38 -0
  32. package/cjs/parser/SyntaxError.cjs +74 -0
  33. package/cjs/parser/create.cjs +378 -0
  34. package/cjs/parser/index.cjs +8 -0
  35. package/cjs/parser/parse-selector.cjs +8 -0
  36. package/cjs/parser/sequence.cjs +47 -0
  37. package/cjs/syntax/atrule/container.cjs +32 -0
  38. package/cjs/syntax/atrule/font-face.cjs +12 -0
  39. package/cjs/syntax/atrule/import.cjs +101 -0
  40. package/cjs/syntax/atrule/index.cjs +27 -0
  41. package/cjs/syntax/atrule/layer.cjs +16 -0
  42. package/cjs/syntax/atrule/media.cjs +16 -0
  43. package/cjs/syntax/atrule/nest.cjs +16 -0
  44. package/cjs/syntax/atrule/page.cjs +16 -0
  45. package/cjs/syntax/atrule/scope.cjs +16 -0
  46. package/cjs/syntax/atrule/starting-style.cjs +12 -0
  47. package/cjs/syntax/atrule/supports.cjs +16 -0
  48. package/cjs/syntax/config/generator.cjs +9 -0
  49. package/cjs/syntax/config/lexer.cjs +14 -0
  50. package/cjs/syntax/config/mix.cjs +126 -0
  51. package/cjs/syntax/config/parser-selector.cjs +19 -0
  52. package/cjs/syntax/config/parser.cjs +49 -0
  53. package/cjs/syntax/config/walker.cjs +9 -0
  54. package/cjs/syntax/create.cjs +58 -0
  55. package/cjs/syntax/function/expression.cjs +11 -0
  56. package/cjs/syntax/function/var.cjs +43 -0
  57. package/cjs/syntax/index.cjs +14 -0
  58. package/cjs/syntax/node/AnPlusB.cjs +293 -0
  59. package/cjs/syntax/node/Atrule.cjs +103 -0
  60. package/cjs/syntax/node/AtrulePrelude.cjs +52 -0
  61. package/cjs/syntax/node/AttributeSelector.cjs +148 -0
  62. package/cjs/syntax/node/Block.cjs +96 -0
  63. package/cjs/syntax/node/Brackets.cjs +38 -0
  64. package/cjs/syntax/node/CDC.cjs +26 -0
  65. package/cjs/syntax/node/CDO.cjs +26 -0
  66. package/cjs/syntax/node/ClassSelector.cjs +31 -0
  67. package/cjs/syntax/node/Combinator.cjs +61 -0
  68. package/cjs/syntax/node/Comment.cjs +40 -0
  69. package/cjs/syntax/node/Condition.cjs +120 -0
  70. package/cjs/syntax/node/Declaration.cjs +166 -0
  71. package/cjs/syntax/node/DeclarationList.cjs +62 -0
  72. package/cjs/syntax/node/Dimension.cjs +30 -0
  73. package/cjs/syntax/node/Feature.cjs +101 -0
  74. package/cjs/syntax/node/FeatureFunction.cjs +67 -0
  75. package/cjs/syntax/node/FeatureRange.cjs +133 -0
  76. package/cjs/syntax/node/Function.cjs +45 -0
  77. package/cjs/syntax/node/GeneralEnclosed.cjs +68 -0
  78. package/cjs/syntax/node/Hash.cjs +30 -0
  79. package/cjs/syntax/node/IdSelector.cjs +33 -0
  80. package/cjs/syntax/node/Identifier.cjs +25 -0
  81. package/cjs/syntax/node/Layer.cjs +35 -0
  82. package/cjs/syntax/node/LayerList.cjs +43 -0
  83. package/cjs/syntax/node/MediaQuery.cjs +100 -0
  84. package/cjs/syntax/node/MediaQueryList.cjs +41 -0
  85. package/cjs/syntax/node/NestingSelector.cjs +29 -0
  86. package/cjs/syntax/node/Nth.cjs +54 -0
  87. package/cjs/syntax/node/Number.cjs +25 -0
  88. package/cjs/syntax/node/Operator.cjs +28 -0
  89. package/cjs/syntax/node/Parentheses.cjs +38 -0
  90. package/cjs/syntax/node/Percentage.cjs +25 -0
  91. package/cjs/syntax/node/PseudoClassSelector.cjs +67 -0
  92. package/cjs/syntax/node/PseudoElementSelector.cjs +69 -0
  93. package/cjs/syntax/node/Ratio.cjs +71 -0
  94. package/cjs/syntax/node/Raw.cjs +48 -0
  95. package/cjs/syntax/node/Rule.cjs +58 -0
  96. package/cjs/syntax/node/Scope.cjs +69 -0
  97. package/cjs/syntax/node/Selector.cjs +38 -0
  98. package/cjs/syntax/node/SelectorList.cjs +43 -0
  99. package/cjs/syntax/node/String.cjs +26 -0
  100. package/cjs/syntax/node/StyleSheet.cjs +83 -0
  101. package/cjs/syntax/node/SupportsDeclaration.cjs +38 -0
  102. package/cjs/syntax/node/TypeSelector.cjs +59 -0
  103. package/cjs/syntax/node/UnicodeRange.cjs +158 -0
  104. package/cjs/syntax/node/Url.cjs +54 -0
  105. package/cjs/syntax/node/Value.cjs +26 -0
  106. package/cjs/syntax/node/WhiteSpace.cjs +34 -0
  107. package/cjs/syntax/node/index-generate.cjs +103 -0
  108. package/cjs/syntax/node/index-parse-selector.cjs +39 -0
  109. package/cjs/syntax/node/index-parse.cjs +103 -0
  110. package/cjs/syntax/node/index.cjs +103 -0
  111. package/cjs/syntax/pseudo/index.cjs +60 -0
  112. package/cjs/syntax/pseudo/lang.cjs +37 -0
  113. package/cjs/syntax/scope/atrulePrelude.cjs +9 -0
  114. package/cjs/syntax/scope/default.cjs +76 -0
  115. package/cjs/syntax/scope/index.cjs +11 -0
  116. package/cjs/syntax/scope/selector.cjs +88 -0
  117. package/cjs/syntax/scope/value.cjs +29 -0
  118. package/cjs/tokenizer/OffsetToLocation.cjs +91 -0
  119. package/cjs/tokenizer/TokenStream.cjs +358 -0
  120. package/cjs/tokenizer/adopt-buffer.cjs +13 -0
  121. package/cjs/tokenizer/char-code-definitions.cjs +236 -0
  122. package/cjs/tokenizer/index.cjs +554 -0
  123. package/cjs/tokenizer/names.cjs +32 -0
  124. package/cjs/tokenizer/types.cjs +57 -0
  125. package/cjs/tokenizer/utils.cjs +261 -0
  126. package/cjs/utils/List.cjs +473 -0
  127. package/cjs/utils/clone.cjs +25 -0
  128. package/cjs/utils/create-custom-error.cjs +18 -0
  129. package/cjs/utils/ident.cjs +102 -0
  130. package/cjs/utils/index.cjs +20 -0
  131. package/cjs/utils/names.cjs +113 -0
  132. package/cjs/utils/string.cjs +99 -0
  133. package/cjs/utils/url.cjs +108 -0
  134. package/cjs/version.cjs +5 -0
  135. package/cjs/walker/create.cjs +291 -0
  136. package/cjs/walker/index.cjs +8 -0
  137. package/data/patch.json +874 -0
  138. package/dist/csstree.esm.js +12 -0
  139. package/dist/csstree.js +12 -0
  140. package/dist/data.cjs +1341 -0
  141. package/dist/data.js +1341 -0
  142. package/dist/version.cjs +1 -0
  143. package/dist/version.js +1 -0
  144. package/lib/convertor/create.js +28 -0
  145. package/lib/convertor/index.js +4 -0
  146. package/lib/data-patch.js +6 -0
  147. package/lib/data.js +118 -0
  148. package/lib/definition-syntax/SyntaxError.js +12 -0
  149. package/lib/definition-syntax/generate.js +135 -0
  150. package/lib/definition-syntax/index.js +4 -0
  151. package/lib/definition-syntax/parse.js +552 -0
  152. package/lib/definition-syntax/scanner.js +109 -0
  153. package/lib/definition-syntax/walk.js +53 -0
  154. package/lib/generator/create.js +97 -0
  155. package/lib/generator/index.js +4 -0
  156. package/lib/generator/sourceMap.js +92 -0
  157. package/lib/generator/token-before.js +182 -0
  158. package/lib/index.d.ts +3016 -0
  159. package/lib/index.js +30 -0
  160. package/lib/lexer/Lexer.js +511 -0
  161. package/lib/lexer/error.js +123 -0
  162. package/lib/lexer/generic-an-plus-b.js +238 -0
  163. package/lib/lexer/generic-const.js +8 -0
  164. package/lib/lexer/generic-urange.js +151 -0
  165. package/lib/lexer/generic.js +622 -0
  166. package/lib/lexer/index.js +1 -0
  167. package/lib/lexer/match-graph.js +527 -0
  168. package/lib/lexer/match.js +630 -0
  169. package/lib/lexer/prepare-tokens.js +50 -0
  170. package/lib/lexer/search.js +61 -0
  171. package/lib/lexer/structure.js +169 -0
  172. package/lib/lexer/trace.js +66 -0
  173. package/lib/lexer/units.js +27 -0
  174. package/lib/parser/SyntaxError.js +70 -0
  175. package/lib/parser/create.js +388 -0
  176. package/lib/parser/index.js +4 -0
  177. package/lib/parser/parse-selector.js +4 -0
  178. package/lib/parser/sequence.js +43 -0
  179. package/lib/syntax/atrule/container.js +28 -0
  180. package/lib/syntax/atrule/font-face.js +8 -0
  181. package/lib/syntax/atrule/import.js +104 -0
  182. package/lib/syntax/atrule/index.js +23 -0
  183. package/lib/syntax/atrule/layer.js +12 -0
  184. package/lib/syntax/atrule/media.js +12 -0
  185. package/lib/syntax/atrule/nest.js +12 -0
  186. package/lib/syntax/atrule/page.js +12 -0
  187. package/lib/syntax/atrule/scope.js +12 -0
  188. package/lib/syntax/atrule/starting-style.js +8 -0
  189. package/lib/syntax/atrule/supports.js +12 -0
  190. package/lib/syntax/config/generator.js +5 -0
  191. package/lib/syntax/config/lexer.js +10 -0
  192. package/lib/syntax/config/mix.js +122 -0
  193. package/lib/syntax/config/parser-selector.js +15 -0
  194. package/lib/syntax/config/parser.js +45 -0
  195. package/lib/syntax/config/walker.js +5 -0
  196. package/lib/syntax/create.js +55 -0
  197. package/lib/syntax/function/expression.js +7 -0
  198. package/lib/syntax/function/var.js +39 -0
  199. package/lib/syntax/index.js +10 -0
  200. package/lib/syntax/node/AnPlusB.js +292 -0
  201. package/lib/syntax/node/Atrule.js +100 -0
  202. package/lib/syntax/node/AtrulePrelude.js +47 -0
  203. package/lib/syntax/node/AttributeSelector.js +147 -0
  204. package/lib/syntax/node/Block.js +95 -0
  205. package/lib/syntax/node/Brackets.js +35 -0
  206. package/lib/syntax/node/CDC.js +19 -0
  207. package/lib/syntax/node/CDO.js +19 -0
  208. package/lib/syntax/node/ClassSelector.js +24 -0
  209. package/lib/syntax/node/Combinator.js +54 -0
  210. package/lib/syntax/node/Comment.js +33 -0
  211. package/lib/syntax/node/Condition.js +123 -0
  212. package/lib/syntax/node/Declaration.js +165 -0
  213. package/lib/syntax/node/DeclarationList.js +62 -0
  214. package/lib/syntax/node/Dimension.js +23 -0
  215. package/lib/syntax/node/Feature.js +103 -0
  216. package/lib/syntax/node/FeatureFunction.js +63 -0
  217. package/lib/syntax/node/FeatureRange.js +133 -0
  218. package/lib/syntax/node/Function.js +41 -0
  219. package/lib/syntax/node/GeneralEnclosed.js +66 -0
  220. package/lib/syntax/node/Hash.js +23 -0
  221. package/lib/syntax/node/IdSelector.js +26 -0
  222. package/lib/syntax/node/Identifier.js +18 -0
  223. package/lib/syntax/node/Layer.js +28 -0
  224. package/lib/syntax/node/LayerList.js +36 -0
  225. package/lib/syntax/node/MediaQuery.js +102 -0
  226. package/lib/syntax/node/MediaQueryList.js +34 -0
  227. package/lib/syntax/node/NestingSelector.js +22 -0
  228. package/lib/syntax/node/Nth.js +47 -0
  229. package/lib/syntax/node/Number.js +18 -0
  230. package/lib/syntax/node/Operator.js +21 -0
  231. package/lib/syntax/node/Parentheses.js +34 -0
  232. package/lib/syntax/node/Percentage.js +18 -0
  233. package/lib/syntax/node/PseudoClassSelector.js +65 -0
  234. package/lib/syntax/node/PseudoElementSelector.js +66 -0
  235. package/lib/syntax/node/Ratio.js +68 -0
  236. package/lib/syntax/node/Raw.js +41 -0
  237. package/lib/syntax/node/Rule.js +51 -0
  238. package/lib/syntax/node/Scope.js +66 -0
  239. package/lib/syntax/node/Selector.js +31 -0
  240. package/lib/syntax/node/SelectorList.js +35 -0
  241. package/lib/syntax/node/String.js +19 -0
  242. package/lib/syntax/node/StyleSheet.js +82 -0
  243. package/lib/syntax/node/SupportsDeclaration.js +34 -0
  244. package/lib/syntax/node/TypeSelector.js +52 -0
  245. package/lib/syntax/node/UnicodeRange.js +156 -0
  246. package/lib/syntax/node/Url.js +52 -0
  247. package/lib/syntax/node/Value.js +19 -0
  248. package/lib/syntax/node/WhiteSpace.js +27 -0
  249. package/lib/syntax/node/index-generate.js +49 -0
  250. package/lib/syntax/node/index-parse-selector.js +17 -0
  251. package/lib/syntax/node/index-parse.js +49 -0
  252. package/lib/syntax/node/index.js +49 -0
  253. package/lib/syntax/pseudo/index.js +56 -0
  254. package/lib/syntax/pseudo/lang.js +33 -0
  255. package/lib/syntax/scope/atrulePrelude.js +5 -0
  256. package/lib/syntax/scope/default.js +85 -0
  257. package/lib/syntax/scope/index.js +3 -0
  258. package/lib/syntax/scope/selector.js +94 -0
  259. package/lib/syntax/scope/value.js +25 -0
  260. package/lib/tokenizer/OffsetToLocation.js +87 -0
  261. package/lib/tokenizer/TokenStream.js +366 -0
  262. package/lib/tokenizer/adopt-buffer.js +9 -0
  263. package/lib/tokenizer/char-code-definitions.js +212 -0
  264. package/lib/tokenizer/index.js +513 -0
  265. package/lib/tokenizer/names.js +28 -0
  266. package/lib/tokenizer/types.js +28 -0
  267. package/lib/tokenizer/utils.js +254 -0
  268. package/lib/utils/List.js +469 -0
  269. package/lib/utils/clone.js +21 -0
  270. package/lib/utils/create-custom-error.js +14 -0
  271. package/lib/utils/ident.js +101 -0
  272. package/lib/utils/index.js +6 -0
  273. package/lib/utils/names.js +106 -0
  274. package/lib/utils/string.js +99 -0
  275. package/lib/utils/url.js +108 -0
  276. package/lib/version.js +5 -0
  277. package/lib/walker/create.js +287 -0
  278. package/lib/walker/index.js +4 -0
  279. package/package.json +133 -0
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ const MIN_SIZE = 16 * 1024;
4
+
5
+ function adoptBuffer(buffer = null, size) {
6
+ if (buffer === null || buffer.length < size) {
7
+ return new Uint32Array(Math.max(size + 1024, MIN_SIZE));
8
+ }
9
+
10
+ return buffer;
11
+ }
12
+
13
+ exports.adoptBuffer = adoptBuffer;
@@ -0,0 +1,236 @@
1
+ 'use strict';
2
+
3
+ const EOF = 0;
4
+
5
+ // https://drafts.csswg.org/css-syntax-3/
6
+ // § 4.2. Definitions
7
+
8
+ // digit
9
+ // A code point between U+0030 DIGIT ZERO (0) and U+0039 DIGIT NINE (9).
10
+ function isDigit(code) {
11
+ return code >= 0x0030 && code <= 0x0039;
12
+ }
13
+
14
+ // hex digit
15
+ // A digit, or a code point between U+0041 LATIN CAPITAL LETTER A (A) and U+0046 LATIN CAPITAL LETTER F (F),
16
+ // or a code point between U+0061 LATIN SMALL LETTER A (a) and U+0066 LATIN SMALL LETTER F (f).
17
+ function isHexDigit(code) {
18
+ return (
19
+ isDigit(code) || // 0 .. 9
20
+ (code >= 0x0041 && code <= 0x0046) || // A .. F
21
+ (code >= 0x0061 && code <= 0x0066) // a .. f
22
+ );
23
+ }
24
+
25
+ // uppercase letter
26
+ // A code point between U+0041 LATIN CAPITAL LETTER A (A) and U+005A LATIN CAPITAL LETTER Z (Z).
27
+ function isUppercaseLetter(code) {
28
+ return code >= 0x0041 && code <= 0x005A;
29
+ }
30
+
31
+ // lowercase letter
32
+ // A code point between U+0061 LATIN SMALL LETTER A (a) and U+007A LATIN SMALL LETTER Z (z).
33
+ function isLowercaseLetter(code) {
34
+ return code >= 0x0061 && code <= 0x007A;
35
+ }
36
+
37
+ // letter
38
+ // An uppercase letter or a lowercase letter.
39
+ function isLetter(code) {
40
+ return isUppercaseLetter(code) || isLowercaseLetter(code);
41
+ }
42
+
43
+ // non-ASCII code point
44
+ // A code point with a value equal to or greater than U+0080 <control>.
45
+ //
46
+ // 2024-09-02: The latest spec narrows the range for non-ASCII characters (see https://github.com/csstree/csstree/issues/188).
47
+ // However, all modern browsers support a wider range, and strictly following the latest spec could result
48
+ // in some CSS being parsed incorrectly, even though it works in the browser. Therefore, this function adheres
49
+ // to the previous, broader definition of non-ASCII characters.
50
+ function isNonAscii(code) {
51
+ return code >= 0x0080;
52
+ }
53
+
54
+ // name-start code point
55
+ // A letter, a non-ASCII code point, or U+005F LOW LINE (_).
56
+ function isNameStart(code) {
57
+ return isLetter(code) || isNonAscii(code) || code === 0x005F;
58
+ }
59
+
60
+ // name code point
61
+ // A name-start code point, a digit, or U+002D HYPHEN-MINUS (-).
62
+ function isName(code) {
63
+ return isNameStart(code) || isDigit(code) || code === 0x002D;
64
+ }
65
+
66
+ // non-printable code point
67
+ // A code point between U+0000 NULL and U+0008 BACKSPACE, or U+000B LINE TABULATION,
68
+ // or a code point between U+000E SHIFT OUT and U+001F INFORMATION SEPARATOR ONE, or U+007F DELETE.
69
+ function isNonPrintable(code) {
70
+ return (
71
+ (code >= 0x0000 && code <= 0x0008) ||
72
+ (code === 0x000B) ||
73
+ (code >= 0x000E && code <= 0x001F) ||
74
+ (code === 0x007F)
75
+ );
76
+ }
77
+
78
+ // newline
79
+ // U+000A LINE FEED. Note that U+000D CARRIAGE RETURN and U+000C FORM FEED are not included in this definition,
80
+ // as they are converted to U+000A LINE FEED during preprocessing.
81
+ // TODO: we doesn't do a preprocessing, so check a code point for U+000D CARRIAGE RETURN and U+000C FORM FEED
82
+ function isNewline(code) {
83
+ return code === 0x000A || code === 0x000D || code === 0x000C;
84
+ }
85
+
86
+ // whitespace
87
+ // A newline, U+0009 CHARACTER TABULATION, or U+0020 SPACE.
88
+ function isWhiteSpace(code) {
89
+ return isNewline(code) || code === 0x0020 || code === 0x0009;
90
+ }
91
+
92
+ // § 4.3.8. Check if two code points are a valid escape
93
+ function isValidEscape(first, second) {
94
+ // If the first code point is not U+005C REVERSE SOLIDUS (\), return false.
95
+ if (first !== 0x005C) {
96
+ return false;
97
+ }
98
+
99
+ // Otherwise, if the second code point is a newline or EOF, return false.
100
+ if (isNewline(second) || second === EOF) {
101
+ return false;
102
+ }
103
+
104
+ // Otherwise, return true.
105
+ return true;
106
+ }
107
+
108
+ // § 4.3.9. Check if three code points would start an identifier
109
+ function isIdentifierStart(first, second, third) {
110
+ // Look at the first code point:
111
+
112
+ // U+002D HYPHEN-MINUS
113
+ if (first === 0x002D) {
114
+ // If the second code point is a name-start code point or a U+002D HYPHEN-MINUS,
115
+ // or the second and third code points are a valid escape, return true. Otherwise, return false.
116
+ return (
117
+ isNameStart(second) ||
118
+ second === 0x002D ||
119
+ isValidEscape(second, third)
120
+ );
121
+ }
122
+
123
+ // name-start code point
124
+ if (isNameStart(first)) {
125
+ // Return true.
126
+ return true;
127
+ }
128
+
129
+ // U+005C REVERSE SOLIDUS (\)
130
+ if (first === 0x005C) {
131
+ // If the first and second code points are a valid escape, return true. Otherwise, return false.
132
+ return isValidEscape(first, second);
133
+ }
134
+
135
+ // anything else
136
+ // Return false.
137
+ return false;
138
+ }
139
+
140
+ // § 4.3.10. Check if three code points would start a number
141
+ function isNumberStart(first, second, third) {
142
+ // Look at the first code point:
143
+
144
+ // U+002B PLUS SIGN (+)
145
+ // U+002D HYPHEN-MINUS (-)
146
+ if (first === 0x002B || first === 0x002D) {
147
+ // If the second code point is a digit, return true.
148
+ if (isDigit(second)) {
149
+ return 2;
150
+ }
151
+
152
+ // Otherwise, if the second code point is a U+002E FULL STOP (.)
153
+ // and the third code point is a digit, return true.
154
+ // Otherwise, return false.
155
+ return second === 0x002E && isDigit(third) ? 3 : 0;
156
+ }
157
+
158
+ // U+002E FULL STOP (.)
159
+ if (first === 0x002E) {
160
+ // If the second code point is a digit, return true. Otherwise, return false.
161
+ return isDigit(second) ? 2 : 0;
162
+ }
163
+
164
+ // digit
165
+ if (isDigit(first)) {
166
+ // Return true.
167
+ return 1;
168
+ }
169
+
170
+ // anything else
171
+ // Return false.
172
+ return 0;
173
+ }
174
+
175
+ //
176
+ // Misc
177
+ //
178
+
179
+ // detect BOM (https://en.wikipedia.org/wiki/Byte_order_mark)
180
+ function isBOM(code) {
181
+ // UTF-16BE
182
+ if (code === 0xFEFF) {
183
+ return 1;
184
+ }
185
+
186
+ // UTF-16LE
187
+ if (code === 0xFFFE) {
188
+ return 1;
189
+ }
190
+
191
+ return 0;
192
+ }
193
+
194
+ // Fast code category
195
+ // Only ASCII code points has a special meaning, that's why we define a maps for 0..127 codes only
196
+ const CATEGORY = new Array(0x80);
197
+ const EofCategory = 0x80;
198
+ const WhiteSpaceCategory = 0x82;
199
+ const DigitCategory = 0x83;
200
+ const NameStartCategory = 0x84;
201
+ const NonPrintableCategory = 0x85;
202
+
203
+ for (let i = 0; i < CATEGORY.length; i++) {
204
+ CATEGORY[i] =
205
+ isWhiteSpace(i) && WhiteSpaceCategory ||
206
+ isDigit(i) && DigitCategory ||
207
+ isNameStart(i) && NameStartCategory ||
208
+ isNonPrintable(i) && NonPrintableCategory ||
209
+ i || EofCategory;
210
+ }
211
+
212
+ function charCodeCategory(code) {
213
+ return code < 0x80 ? CATEGORY[code] : NameStartCategory;
214
+ }
215
+
216
+ exports.DigitCategory = DigitCategory;
217
+ exports.EofCategory = EofCategory;
218
+ exports.NameStartCategory = NameStartCategory;
219
+ exports.NonPrintableCategory = NonPrintableCategory;
220
+ exports.WhiteSpaceCategory = WhiteSpaceCategory;
221
+ exports.charCodeCategory = charCodeCategory;
222
+ exports.isBOM = isBOM;
223
+ exports.isDigit = isDigit;
224
+ exports.isHexDigit = isHexDigit;
225
+ exports.isIdentifierStart = isIdentifierStart;
226
+ exports.isLetter = isLetter;
227
+ exports.isLowercaseLetter = isLowercaseLetter;
228
+ exports.isName = isName;
229
+ exports.isNameStart = isNameStart;
230
+ exports.isNewline = isNewline;
231
+ exports.isNonAscii = isNonAscii;
232
+ exports.isNonPrintable = isNonPrintable;
233
+ exports.isNumberStart = isNumberStart;
234
+ exports.isUppercaseLetter = isUppercaseLetter;
235
+ exports.isValidEscape = isValidEscape;
236
+ exports.isWhiteSpace = isWhiteSpace;