rapydscript-ng 0.8.2 → 0.8.4
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.
- package/CHANGELOG.md +17 -0
- package/bin/build.ts +29 -0
- package/local-agent.md +4 -0
- package/package.json +1 -1
- package/release/baselib-plain-pretty.js +85 -61
- package/release/baselib-plain-ugly.js +3 -3
- package/release/compiler.js +9661 -9540
- package/release/signatures.json +26 -26
- package/src/ast.pyj +169 -64
- package/src/baselib-builtins.pyj +35 -14
- package/src/baselib-containers.pyj +70 -40
- package/src/baselib-internal.pyj +20 -8
- package/src/baselib-itertools.pyj +6 -2
- package/src/baselib-str.pyj +74 -28
- package/src/errors.pyj +4 -1
- package/src/lib/aes.pyj +664 -35
- package/src/lib/elementmaker.pyj +105 -13
- package/src/lib/encodings.pyj +31 -7
- package/src/lib/gettext.pyj +6 -3
- package/src/lib/math.pyj +38 -22
- package/src/lib/pythonize.pyj +5 -3
- package/src/lib/random.pyj +13 -5
- package/src/lib/re.pyj +81 -18
- package/src/lib/traceback.pyj +42 -10
- package/src/lib/uuid.pyj +2 -1
- package/src/output/classes.pyj +70 -26
- package/src/output/codegen.pyj +92 -20
- package/src/output/comments.pyj +11 -4
- package/src/output/exceptions.pyj +17 -4
- package/src/output/functions.pyj +145 -26
- package/src/output/literals.pyj +7 -2
- package/src/output/loops.pyj +79 -23
- package/src/output/modules.pyj +41 -12
- package/src/output/operators.pyj +154 -31
- package/src/output/statements.pyj +38 -10
- package/src/output/stream.pyj +43 -12
- package/src/output/utils.pyj +10 -3
- package/src/parse.pyj +740 -259
- package/src/string_interpolation.pyj +4 -1
- package/src/tokenizer.pyj +314 -57
- package/src/unicode_aliases.pyj +4 -2
- package/src/utils.pyj +19 -5
- package/test/functions.pyj +8 -0
- package/test/generic.pyj +9 -0
- package/test/lsp.pyj +16 -0
- package/test/str.pyj +10 -0
- package/tools/cli.mjs +4 -3
- package/tools/compile.mjs +9 -3
- package/tools/compiler.mjs +0 -6
- package/tools/fmt.mjs +41 -2
- package/tools/lint-worker.mjs +107 -0
- package/tools/lint.mjs +134 -8
- package/tools/lsp.mjs +11 -1
- package/tree-sitter/grammar.js +27 -6
- package/tree-sitter/queries/highlights.scm +10 -0
- package/tree-sitter/src/grammar.json +130 -5
- package/tree-sitter/src/node-types.json +73 -0
- package/tree-sitter/src/parser.c +119589 -114993
- package/tree-sitter/src/scanner.c +275 -17
- package/tree-sitter/test/corpus/strings.txt +41 -5
|
@@ -4,7 +4,10 @@ from __python__ import hash_literals
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
def quoted_string(x):
|
|
7
|
-
return '"' + x.replace(
|
|
7
|
+
return '"' + x.replace(
|
|
8
|
+
/\\/g,
|
|
9
|
+
'\\\\'
|
|
10
|
+
).replace(/"/g, r'\"').replace(/\n/g, '\\n') + '"'
|
|
8
11
|
|
|
9
12
|
|
|
10
13
|
def render_markup(markup):
|
package/src/tokenizer.pyj
CHANGED
|
@@ -14,7 +14,15 @@ RE_DEC_NUMBER = /^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i
|
|
|
14
14
|
|
|
15
15
|
OPERATOR_CHARS = make_predicate(characters('+-*&%=<>!?|~^@'))
|
|
16
16
|
|
|
17
|
-
ASCII_CONTROL_CHARS = {
|
|
17
|
+
ASCII_CONTROL_CHARS = {
|
|
18
|
+
'a': 7,
|
|
19
|
+
'b': 8,
|
|
20
|
+
'f': 12,
|
|
21
|
+
'n': 10,
|
|
22
|
+
'r': 13,
|
|
23
|
+
't': 9,
|
|
24
|
+
'v': 11,
|
|
25
|
+
}
|
|
18
26
|
HEX_PAT = /[a-fA-F0-9]/
|
|
19
27
|
NAME_PAT = /[a-zA-Z ]/
|
|
20
28
|
|
|
@@ -75,20 +83,33 @@ OP_MAP = {
|
|
|
75
83
|
'is': '===',
|
|
76
84
|
}
|
|
77
85
|
|
|
78
|
-
WHITESPACE_CHARS = make_predicate(characters(
|
|
86
|
+
WHITESPACE_CHARS = make_predicate(characters(
|
|
87
|
+
' \u00a0\n\r\t\f\u000b\u200b\u180e\u2000\u2001\u2002\u2003' +
|
|
88
|
+
'\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'
|
|
89
|
+
))
|
|
79
90
|
|
|
80
91
|
PUNC_BEFORE_EXPRESSION = make_predicate(characters('[{(,.;:'))
|
|
81
92
|
|
|
82
93
|
PUNC_CHARS = make_predicate(characters('[]{}(),;:?'))
|
|
83
94
|
|
|
84
|
-
KEYWORDS =
|
|
95
|
+
KEYWORDS = (
|
|
96
|
+
'as assert async await break class continue def del do elif else ' +
|
|
97
|
+
'except finally for from global if import in is new nonlocal pass ' +
|
|
98
|
+
'raise return yield try while with or and not'
|
|
99
|
+
)
|
|
85
100
|
|
|
86
101
|
KEYWORDS_ATOM = 'False None True'
|
|
87
102
|
|
|
88
|
-
# see https://developer.mozilla.org/en-US/docs/Web/JavaScript/
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
'
|
|
103
|
+
# see https://developer.mozilla.org/en-US/docs/Web/JavaScript/
|
|
104
|
+
# Reference/Lexical_grammar
|
|
105
|
+
RESERVED_WORDS = (
|
|
106
|
+
'break case class catch const continue debugger default' +
|
|
107
|
+
' delete do else export extends finally for function if' +
|
|
108
|
+
' import in instanceof new return super switch this throw' +
|
|
109
|
+
' try typeof var void while with yield enum implements' +
|
|
110
|
+
' static private package let public protected interface' +
|
|
111
|
+
' null true false'
|
|
112
|
+
)
|
|
92
113
|
|
|
93
114
|
KEYWORDS_BEFORE_EXPRESSION = 'return yield new del raise elif else if await'
|
|
94
115
|
|
|
@@ -109,7 +130,11 @@ def is_string_modifier(val):
|
|
|
109
130
|
|
|
110
131
|
|
|
111
132
|
def is_letter(code):
|
|
112
|
-
return
|
|
133
|
+
return (
|
|
134
|
+
code >= 97 and code <= 122 or
|
|
135
|
+
code >= 65 and code <= 90 or
|
|
136
|
+
code >= 170 and UNICODE.letter.test(String.fromCharCode(code))
|
|
137
|
+
)
|
|
113
138
|
|
|
114
139
|
|
|
115
140
|
def is_digit(code):
|
|
@@ -121,7 +146,10 @@ def is_alphanumeric_char(code):
|
|
|
121
146
|
|
|
122
147
|
|
|
123
148
|
def is_unicode_combining_mark(ch):
|
|
124
|
-
return
|
|
149
|
+
return (
|
|
150
|
+
UNICODE.non_spacing_mark.test(ch) or
|
|
151
|
+
UNICODE.space_combining_mark.test(ch)
|
|
152
|
+
)
|
|
125
153
|
|
|
126
154
|
|
|
127
155
|
def is_unicode_connector_punctuation(ch):
|
|
@@ -129,7 +157,10 @@ def is_unicode_connector_punctuation(ch):
|
|
|
129
157
|
|
|
130
158
|
|
|
131
159
|
def is_identifier(name):
|
|
132
|
-
return
|
|
160
|
+
return (
|
|
161
|
+
not RESERVED_WORDS[name] and not KEYWORDS[name] and
|
|
162
|
+
not KEYWORDS_ATOM[name] and IDENTIFIER_PAT.test(name)
|
|
163
|
+
)
|
|
133
164
|
|
|
134
165
|
|
|
135
166
|
def is_identifier_start(code):
|
|
@@ -138,7 +169,12 @@ def is_identifier_start(code):
|
|
|
138
169
|
|
|
139
170
|
def is_identifier_char(ch):
|
|
140
171
|
code = ch.charCodeAt(0)
|
|
141
|
-
return
|
|
172
|
+
return (
|
|
173
|
+
is_identifier_start(code) or is_digit(code) or
|
|
174
|
+
code is 8204 or code is 8205 or
|
|
175
|
+
is_unicode_combining_mark(ch) or
|
|
176
|
+
is_unicode_connector_punctuation(ch)
|
|
177
|
+
)
|
|
142
178
|
|
|
143
179
|
|
|
144
180
|
def parse_js_number(num):
|
|
@@ -151,24 +187,153 @@ def parse_js_number(num):
|
|
|
151
187
|
|
|
152
188
|
# regexps adapted from http://xregexp.com/plugins/#unicode
|
|
153
189
|
UNICODE = { # {{{
|
|
154
|
-
'letter': RegExp(
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
190
|
+
'letter': RegExp(
|
|
191
|
+
'[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D' +
|
|
192
|
+
'6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02E' +
|
|
193
|
+
'C\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u038' +
|
|
194
|
+
'8-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048' +
|
|
195
|
+
'A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F' +
|
|
196
|
+
'0-\\u05F2\\u0621-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E' +
|
|
197
|
+
'5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072' +
|
|
198
|
+
'F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u090' +
|
|
199
|
+
'4-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971\\u0972\\u097B-\\u097' +
|
|
200
|
+
'F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B' +
|
|
201
|
+
'2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F' +
|
|
202
|
+
'0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A3' +
|
|
203
|
+
'0\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5' +
|
|
204
|
+
'E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AA' +
|
|
205
|
+
'A-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE' +
|
|
206
|
+
'1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B3' +
|
|
207
|
+
'2\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B7' +
|
|
208
|
+
'1\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9' +
|
|
209
|
+
'A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB' +
|
|
210
|
+
'9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C3' +
|
|
211
|
+
'3\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8' +
|
|
212
|
+
'C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CB' +
|
|
213
|
+
'D\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D2' +
|
|
214
|
+
'8\\u0D2A-\\u0D39\\u0D3D\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D9' +
|
|
215
|
+
'6\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E3' +
|
|
216
|
+
'0\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E8' +
|
|
217
|
+
'8\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA' +
|
|
218
|
+
'5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC' +
|
|
219
|
+
'0-\\u0EC4\\u0EC6\\u0EDC\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6' +
|
|
220
|
+
'C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105' +
|
|
221
|
+
'D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A' +
|
|
222
|
+
'0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1159\\u115F-\\u11A2\\u11A' +
|
|
223
|
+
'8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125' +
|
|
224
|
+
'A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B' +
|
|
225
|
+
'5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u131' +
|
|
226
|
+
'0\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u140' +
|
|
227
|
+
'1-\\u166C\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170' +
|
|
228
|
+
'C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176' +
|
|
229
|
+
'E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A' +
|
|
230
|
+
'8\\u18AA\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19A' +
|
|
231
|
+
'9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B8' +
|
|
232
|
+
'3-\\u1BA0\\u1BAE\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7' +
|
|
233
|
+
'D\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F4' +
|
|
234
|
+
'8-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F8' +
|
|
235
|
+
'0-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD' +
|
|
236
|
+
'0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FF' +
|
|
237
|
+
'C\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u211' +
|
|
238
|
+
'5\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u213' +
|
|
239
|
+
'9\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2' +
|
|
240
|
+
'E\\u2C30-\\u2C5E\\u2C60-\\u2C6F\\u2C71-\\u2C7D\\u2C80-\\u2CE4\\u2D0' +
|
|
241
|
+
'0-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA' +
|
|
242
|
+
'8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DC' +
|
|
243
|
+
'E\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u303' +
|
|
244
|
+
'5\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30F' +
|
|
245
|
+
'C-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31F' +
|
|
246
|
+
'F\\u3400\\u4DB5\\u4E00\\u9FC3\\uA000-\\uA48C\\uA500-\\uA60C\\uA61' +
|
|
247
|
+
'0-\\uA61F\\uA62A\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA69' +
|
|
248
|
+
'7\\uA717-\\uA71F\\uA722-\\uA788\\uA78B\\uA78C\\uA7FB-\\uA801\\uA80' +
|
|
249
|
+
'3-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B' +
|
|
250
|
+
'3\\uA90A-\\uA925\\uA930-\\uA946\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA4' +
|
|
251
|
+
'4-\\uAA4B\\uAC00\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD' +
|
|
252
|
+
'9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB3' +
|
|
253
|
+
'6\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB' +
|
|
254
|
+
'1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE7' +
|
|
255
|
+
'0-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFB' +
|
|
256
|
+
'E\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]'
|
|
257
|
+
),
|
|
258
|
+
'non_spacing_mark': RegExp(
|
|
259
|
+
'[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C' +
|
|
260
|
+
'2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065E\\u0670\\u06D' +
|
|
261
|
+
'6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u073' +
|
|
262
|
+
'0-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u082' +
|
|
263
|
+
'3\\u0825-\\u0827\\u0829-\\u082D\\u0900-\\u0902\\u093C\\u0941-\\u094' +
|
|
264
|
+
'8\\u094D\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C' +
|
|
265
|
+
'4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A4' +
|
|
266
|
+
'7\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A8' +
|
|
267
|
+
'2\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B0' +
|
|
268
|
+
'1\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B8' +
|
|
269
|
+
'2\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C5' +
|
|
270
|
+
'5\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE' +
|
|
271
|
+
'2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD' +
|
|
272
|
+
'4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB' +
|
|
273
|
+
'9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F3' +
|
|
274
|
+
'9\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F90-\\u0F97\\u0F9' +
|
|
275
|
+
'9-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103' +
|
|
276
|
+
'D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u108' +
|
|
277
|
+
'5\\u1086\\u108D\\u109D\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u175' +
|
|
278
|
+
'2\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17D' +
|
|
279
|
+
'D\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u193' +
|
|
280
|
+
'9-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A6' +
|
|
281
|
+
'5-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3' +
|
|
282
|
+
'A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA' +
|
|
283
|
+
'8\\u1BA9\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE' +
|
|
284
|
+
'0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFD-\\u1DFF\\u20D0-\\u20D' +
|
|
285
|
+
'C\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2DE0-\\u2DFF\\u302A-\\u302' +
|
|
286
|
+
'F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA80' +
|
|
287
|
+
'6\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA94' +
|
|
288
|
+
'7-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2' +
|
|
289
|
+
'E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB' +
|
|
290
|
+
'4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1' +
|
|
291
|
+
'E\\uFE00-\\uFE0F\\uFE20-\\uFE26]'
|
|
292
|
+
),
|
|
293
|
+
'space_combining_mark': RegExp(
|
|
294
|
+
'[\\u0903\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u0982\\u0983\\u09B' +
|
|
295
|
+
'E-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A4' +
|
|
296
|
+
'0\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3' +
|
|
297
|
+
'E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC' +
|
|
298
|
+
'1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C4' +
|
|
299
|
+
'1-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CC' +
|
|
300
|
+
'A\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D4' +
|
|
301
|
+
'8\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DD' +
|
|
302
|
+
'F\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u103' +
|
|
303
|
+
'8\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u108' +
|
|
304
|
+
'3\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C' +
|
|
305
|
+
'5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u193' +
|
|
306
|
+
'3-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A5' +
|
|
307
|
+
'7\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3' +
|
|
308
|
+
'D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1C2' +
|
|
309
|
+
'4-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA88' +
|
|
310
|
+
'0\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9B' +
|
|
311
|
+
'A\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7' +
|
|
312
|
+
'B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]'
|
|
313
|
+
),
|
|
314
|
+
'connector_punctuation': RegExp(
|
|
315
|
+
'[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]'
|
|
316
|
+
)
|
|
158
317
|
} # }}}
|
|
159
318
|
|
|
160
319
|
|
|
161
320
|
def is_token(token, type, val):
|
|
162
|
-
return
|
|
321
|
+
return (
|
|
322
|
+
token.type is type and
|
|
323
|
+
(val is None or val is undefined or token.value is val)
|
|
324
|
+
)
|
|
163
325
|
|
|
164
326
|
EX_EOF = {}
|
|
165
327
|
|
|
166
328
|
|
|
167
329
|
def tokenizer(raw_text, filename, recover_errors):
|
|
168
330
|
S = {
|
|
169
|
-
'text': raw_text.replace(
|
|
331
|
+
'text': raw_text.replace(
|
|
332
|
+
/\r\n?|[\n\u2028\u2029]/g, '\n'
|
|
333
|
+
).replace(/\uFEFF/g, ''),
|
|
170
334
|
'filename': filename,
|
|
171
|
-
|
|
335
|
+
# LSP error-recovery mode (see parse())
|
|
336
|
+
'recover_errors': not not recover_errors,
|
|
172
337
|
'recovered_errors': v'[]', # collected errors when recover_errors is on
|
|
173
338
|
'pos': 0,
|
|
174
339
|
'tokpos': 0,
|
|
@@ -186,7 +351,9 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
186
351
|
'cached_whitespace': '',
|
|
187
352
|
'prev': undefined,
|
|
188
353
|
'index_or_slice': v'[ false ]',
|
|
189
|
-
|
|
354
|
+
# This is set by the parser when it is expecting an
|
|
355
|
+
# object literal key
|
|
356
|
+
'expecting_object_literal_key': False,
|
|
190
357
|
}
|
|
191
358
|
|
|
192
359
|
def peek():
|
|
@@ -225,7 +392,9 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
225
392
|
or type is 'keyword' and KEYWORDS_BEFORE_EXPRESSION[value]
|
|
226
393
|
or type is 'punc' and PUNC_BEFORE_EXPRESSION[value])
|
|
227
394
|
|
|
228
|
-
if type is 'operator' and value is 'is' and
|
|
395
|
+
if (type is 'operator' and value is 'is' and
|
|
396
|
+
S.text.substr(S.pos).trimLeft()
|
|
397
|
+
.substr(0, 4).trimRight() is 'not'):
|
|
229
398
|
next_token()
|
|
230
399
|
value = '!=='
|
|
231
400
|
|
|
@@ -257,14 +426,18 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
257
426
|
# if (value is ":" && peek() is "\n") {
|
|
258
427
|
if value is ':' and not S.index_or_slice[-1]
|
|
259
428
|
and not S.expecting_object_literal_key
|
|
260
|
-
and (
|
|
429
|
+
and (
|
|
430
|
+
not S.text.substring(S.pos + 1, find('\n')).trim() or
|
|
431
|
+
not S.text.substring(S.pos + 1, find('#')).trim()
|
|
432
|
+
):
|
|
261
433
|
S.newblock = True
|
|
262
434
|
S.indentation_matters.push(True)
|
|
263
435
|
|
|
264
436
|
if value is '[':
|
|
265
437
|
if S.prev and (
|
|
266
438
|
S.prev.type is 'name' or
|
|
267
|
-
(S.prev.type is 'punc' and
|
|
439
|
+
(S.prev.type is 'punc' and
|
|
440
|
+
')]'.indexOf(S.prev.value) is not -1)
|
|
268
441
|
):
|
|
269
442
|
S.index_or_slice.push(True)
|
|
270
443
|
else:
|
|
@@ -304,7 +477,8 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
304
477
|
most_recent = S.whitespace_before[-1] or ''
|
|
305
478
|
S.endblock = False
|
|
306
479
|
if S.indentation_matters[-1] and leading_whitespace is not most_recent:
|
|
307
|
-
if S.newblock and leading_whitespace and
|
|
480
|
+
if (S.newblock and leading_whitespace and
|
|
481
|
+
leading_whitespace.indexOf(most_recent) is 0):
|
|
308
482
|
# positive indent, new block
|
|
309
483
|
S.newblock = False
|
|
310
484
|
S.whitespace_before.push(leading_whitespace)
|
|
@@ -329,7 +503,14 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
329
503
|
return ret
|
|
330
504
|
|
|
331
505
|
def parse_error(err, is_eof):
|
|
332
|
-
raise new SyntaxError(
|
|
506
|
+
raise new SyntaxError(
|
|
507
|
+
err,
|
|
508
|
+
filename,
|
|
509
|
+
S.tokline,
|
|
510
|
+
S.tokcol,
|
|
511
|
+
S.tokpos,
|
|
512
|
+
is_eof
|
|
513
|
+
)
|
|
333
514
|
|
|
334
515
|
def read_num(prefix):
|
|
335
516
|
has_e = False
|
|
@@ -369,7 +550,9 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
369
550
|
return True
|
|
370
551
|
return False
|
|
371
552
|
elif ch is '.':
|
|
372
|
-
return (has_dot = True) if
|
|
553
|
+
return (has_dot = True) if (
|
|
554
|
+
not has_dot and not has_x and not has_e
|
|
555
|
+
) else False
|
|
373
556
|
return is_alphanumeric_char(ch.charCodeAt(0))
|
|
374
557
|
)
|
|
375
558
|
if prefix:
|
|
@@ -429,7 +612,10 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
429
612
|
if code <= 0xFFFF:
|
|
430
613
|
return String.fromCharCode(code)
|
|
431
614
|
code -= 0x10000
|
|
432
|
-
return String.fromCharCode(
|
|
615
|
+
return String.fromCharCode(
|
|
616
|
+
0xD800 + (code >> 10),
|
|
617
|
+
0xDC00 + (code & 0x3FF)
|
|
618
|
+
)
|
|
433
619
|
return '\\U' + code
|
|
434
620
|
if q is 'N' and peek() is '{':
|
|
435
621
|
next()
|
|
@@ -438,13 +624,19 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
438
624
|
return '\\N{' + name
|
|
439
625
|
next()
|
|
440
626
|
key = (name or '').toLowerCase()
|
|
441
|
-
if not name or not Object.prototype.hasOwnProperty.call(
|
|
627
|
+
if not name or not Object.prototype.hasOwnProperty.call(
|
|
628
|
+
ALIAS_MAP,
|
|
629
|
+
key
|
|
630
|
+
):
|
|
442
631
|
return '\\N{' + name + '}'
|
|
443
632
|
code = ALIAS_MAP[key]
|
|
444
633
|
if code <= 0xFFFF:
|
|
445
634
|
return String.fromCharCode(code)
|
|
446
635
|
code -= 0x10000
|
|
447
|
-
return String.fromCharCode(
|
|
636
|
+
return String.fromCharCode(
|
|
637
|
+
0xD800 + (code >> 10),
|
|
638
|
+
0xDC00 + (code & 0x3FF)
|
|
639
|
+
)
|
|
448
640
|
return '\\' + q
|
|
449
641
|
|
|
450
642
|
def with_eof_error(eof_error, cont):
|
|
@@ -457,7 +649,8 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
457
649
|
else:
|
|
458
650
|
raise
|
|
459
651
|
|
|
460
|
-
read_string = with_eof_error('Unterminated string constant', def (
|
|
652
|
+
read_string = with_eof_error('Unterminated string constant', def (
|
|
653
|
+
is_raw_literal, is_js_literal):
|
|
461
654
|
quote = next()
|
|
462
655
|
tok_type = 'js' if is_js_literal else 'string'
|
|
463
656
|
ret = ''
|
|
@@ -478,7 +671,10 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
478
671
|
if ch is '\n' and not is_multiline:
|
|
479
672
|
parse_error('End of line while scanning string literal')
|
|
480
673
|
if ch is '\\':
|
|
481
|
-
ret += (
|
|
674
|
+
ret += (
|
|
675
|
+
('\\' + next(True)) if is_raw_literal else
|
|
676
|
+
read_escape_sequence()
|
|
677
|
+
)
|
|
482
678
|
continue
|
|
483
679
|
if ch is quote:
|
|
484
680
|
if not is_multiline:
|
|
@@ -496,27 +692,48 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
496
692
|
|
|
497
693
|
def handle_interpolated_string(string, start_tok, is_fstring=True):
|
|
498
694
|
def raise_error(err):
|
|
499
|
-
raise new SyntaxError(
|
|
695
|
+
raise new SyntaxError(
|
|
696
|
+
err,
|
|
697
|
+
filename,
|
|
698
|
+
start_tok.line,
|
|
699
|
+
start_tok.col,
|
|
700
|
+
start_tok.pos,
|
|
701
|
+
False
|
|
702
|
+
)
|
|
500
703
|
if is_fstring:
|
|
501
704
|
parts = v'[interpolate(string, raise_error)]'
|
|
502
705
|
else:
|
|
503
706
|
parts = v'[quoted_string(string)]'
|
|
504
|
-
# Look ahead for consecutive string literals to concatenate
|
|
707
|
+
# Look ahead for consecutive string literals to concatenate
|
|
708
|
+
# (e.g. f'a'f'b' or f'a''b')
|
|
505
709
|
while True:
|
|
506
|
-
# Skip horizontal whitespace
|
|
507
|
-
|
|
508
|
-
|
|
710
|
+
# Skip horizontal whitespace; also skip newlines inside
|
|
711
|
+
# brackets where indentation is irrelevant
|
|
712
|
+
while S.pos < S.text.length:
|
|
713
|
+
wch = S.text.charAt(S.pos)
|
|
714
|
+
if wch is ' ' or wch is '\t':
|
|
715
|
+
next()
|
|
716
|
+
elif (
|
|
717
|
+
(wch is '\n' or wch is '\r') and
|
|
718
|
+
not S.indentation_matters[-1]
|
|
719
|
+
):
|
|
720
|
+
next()
|
|
721
|
+
else:
|
|
722
|
+
break
|
|
509
723
|
ch = S.text.charAt(S.pos)
|
|
510
724
|
if not ch:
|
|
511
725
|
break
|
|
512
726
|
if ch is "'" or ch is '"':
|
|
513
|
-
# A plain string literal follows; read it and
|
|
727
|
+
# A plain string literal follows; read it and
|
|
728
|
+
# append its quoted value
|
|
514
729
|
stok = read_string(False, False)
|
|
515
730
|
parts.push(quoted_string(stok.value))
|
|
516
731
|
elif is_identifier_start(ch.charCodeAt(0)):
|
|
517
|
-
# Peek ahead (without consuming) to check if it is
|
|
732
|
+
# Peek ahead (without consuming) to check if it is
|
|
733
|
+
# a string modifier followed by a quote
|
|
518
734
|
j = S.pos
|
|
519
|
-
while j < S.text.length and
|
|
735
|
+
while (j < S.text.length and
|
|
736
|
+
is_identifier_char(S.text.charAt(j))):
|
|
520
737
|
j += 1
|
|
521
738
|
potential_mod = S.text.substring(S.pos, j)
|
|
522
739
|
if not is_string_modifier(potential_mod):
|
|
@@ -526,7 +743,8 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
526
743
|
mods = potential_mod.toLowerCase()
|
|
527
744
|
if mods.indexOf('v') is not -1:
|
|
528
745
|
break # Do not concatenate with verbatim JS literals
|
|
529
|
-
# Consume the modifier characters via next() to keep
|
|
746
|
+
# Consume the modifier characters via next() to keep
|
|
747
|
+
# position tracking correct
|
|
530
748
|
while S.pos < j:
|
|
531
749
|
next()
|
|
532
750
|
is_raw = mods.indexOf('r') is not -1
|
|
@@ -613,7 +831,8 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
613
831
|
break
|
|
614
832
|
elif ch is '\\':
|
|
615
833
|
prev_backslash = True
|
|
616
|
-
elif verbose_regexp and not in_class and
|
|
834
|
+
elif (verbose_regexp and not in_class and
|
|
835
|
+
' \n\r\t'.indexOf(ch) is not -1):
|
|
617
836
|
pass
|
|
618
837
|
elif verbose_regexp and not in_class and ch is '#':
|
|
619
838
|
in_comment = True
|
|
@@ -647,14 +866,23 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
647
866
|
|
|
648
867
|
def handle_dot():
|
|
649
868
|
next()
|
|
650
|
-
return read_num('.') if is_digit(peek().charCodeAt(0)) else token(
|
|
869
|
+
return read_num('.') if is_digit(peek().charCodeAt(0)) else token(
|
|
870
|
+
'punc',
|
|
871
|
+
'.'
|
|
872
|
+
)
|
|
651
873
|
|
|
652
874
|
def read_word():
|
|
653
875
|
word = read_name()
|
|
654
876
|
return token(
|
|
655
877
|
'atom',
|
|
656
878
|
word
|
|
657
|
-
) if KEYWORDS_ATOM[word] else (
|
|
879
|
+
) if KEYWORDS_ATOM[word] else (
|
|
880
|
+
token('name', word) if not KEYWORDS[word] else (
|
|
881
|
+
token('operator', word) if (
|
|
882
|
+
OPERATORS[word] and prevChar() is not '.'
|
|
883
|
+
) else token('keyword', word)
|
|
884
|
+
)
|
|
885
|
+
)
|
|
658
886
|
|
|
659
887
|
def next_token():
|
|
660
888
|
indent = parse_whitespace()
|
|
@@ -672,21 +900,40 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
672
900
|
tmp_ = code
|
|
673
901
|
if tmp_ is 34 or tmp_ is 39: # double-quote (") or single quote (')
|
|
674
902
|
stok = read_string(False)
|
|
675
|
-
# Look ahead to detect a following f-string
|
|
676
|
-
# otherwise be parsed as a
|
|
677
|
-
#
|
|
903
|
+
# Look ahead to detect a following f-string
|
|
904
|
+
# (e.g. "a" f"b"), which would otherwise be parsed as a
|
|
905
|
+
# call expression "a"(...) after the tokenizer injects
|
|
906
|
+
# the f-string result as a parenthesised expression.
|
|
678
907
|
j = S.pos
|
|
679
|
-
while j < S.text.length
|
|
680
|
-
|
|
681
|
-
|
|
908
|
+
while j < S.text.length:
|
|
909
|
+
jch = S.text.charAt(j)
|
|
910
|
+
if jch is ' ' or jch is '\t':
|
|
911
|
+
j += 1
|
|
912
|
+
elif (
|
|
913
|
+
(jch is '\n' or jch is '\r') and
|
|
914
|
+
not S.indentation_matters[-1]
|
|
915
|
+
):
|
|
916
|
+
j += 1
|
|
917
|
+
else:
|
|
918
|
+
break
|
|
919
|
+
if (j < S.text.length and
|
|
920
|
+
is_identifier_start(S.text.charAt(j).charCodeAt(0))):
|
|
682
921
|
k = j
|
|
683
|
-
while k < S.text.length and
|
|
922
|
+
while (k < S.text.length and
|
|
923
|
+
is_identifier_char(S.text.charAt(k))):
|
|
684
924
|
k += 1
|
|
685
925
|
potential_mod = S.text.substring(j, k)
|
|
686
|
-
if is_string_modifier(potential_mod) and
|
|
926
|
+
if (is_string_modifier(potential_mod) and
|
|
927
|
+
k < S.text.length and
|
|
928
|
+
'\'"'.indexOf(S.text.charAt(k)) is not -1):
|
|
687
929
|
mods_check = potential_mod.toLowerCase()
|
|
688
|
-
if mods_check.indexOf('f') is not -1 and
|
|
689
|
-
|
|
930
|
+
if (mods_check.indexOf('f') is not -1 and
|
|
931
|
+
mods_check.indexOf('v') is -1):
|
|
932
|
+
return handle_interpolated_string(
|
|
933
|
+
stok.value,
|
|
934
|
+
stok,
|
|
935
|
+
False
|
|
936
|
+
)
|
|
690
937
|
return stok
|
|
691
938
|
elif tmp_ is 35: # pound-sign (#)
|
|
692
939
|
if S.pos is 0 and S.text.charAt(1) is '!':
|
|
@@ -721,10 +968,14 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
721
968
|
|
|
722
969
|
if is_identifier_start(code):
|
|
723
970
|
tok = read_word()
|
|
724
|
-
if '\'"'.indexOf(peek()) is not -1 and
|
|
971
|
+
if ('\'"'.indexOf(peek()) is not -1 and
|
|
972
|
+
is_string_modifier(tok.value)):
|
|
725
973
|
mods = tok.value.toLowerCase()
|
|
726
974
|
start_pos_for_string = S.tokpos
|
|
727
|
-
stok = read_string(
|
|
975
|
+
stok = read_string(
|
|
976
|
+
mods.indexOf('r') is not -1,
|
|
977
|
+
mods.indexOf('v') is not -1
|
|
978
|
+
)
|
|
728
979
|
tok.endpos = stok.endpos
|
|
729
980
|
if stok.type is not 'js' and mods.indexOf('f') is not -1:
|
|
730
981
|
tok.col += start_pos_for_string - tok.pos
|
|
@@ -737,10 +988,16 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
737
988
|
# In error-recovery mode (used by the LSP) an unrecognized character
|
|
738
989
|
# must not raise, because re-tokenizing from the same position would
|
|
739
990
|
# loop forever (parse_error is raised before the character is
|
|
740
|
-
# consumed). Record it and skip the single offending
|
|
991
|
+
# consumed). Record it and skip the single offending
|
|
992
|
+
# character so the
|
|
741
993
|
# tokenizer always makes forward progress.
|
|
742
|
-
S.recovered_errors.push({
|
|
743
|
-
|
|
994
|
+
S.recovered_errors.push({
|
|
995
|
+
'message': 'Unexpected character «' + ch + '»',
|
|
996
|
+
'line': S.tokline,
|
|
997
|
+
'col': S.tokcol,
|
|
998
|
+
'pos': S.tokpos,
|
|
999
|
+
'is_eof': False
|
|
1000
|
+
})
|
|
744
1001
|
next()
|
|
745
1002
|
return next_token()
|
|
746
1003
|
parse_error('Unexpected character «' + ch + '»')
|
package/src/unicode_aliases.pyj
CHANGED
|
@@ -17,7 +17,8 @@ DB = '''
|
|
|
17
17
|
#
|
|
18
18
|
# For informative aliases, see NamesList.txt
|
|
19
19
|
#
|
|
20
|
-
# The formal name aliases are divided into five types, each with a distinct
|
|
20
|
+
# The formal name aliases are divided into five types, each with a distinct
|
|
21
|
+
# label.
|
|
21
22
|
#
|
|
22
23
|
# Type Labels:
|
|
23
24
|
#
|
|
@@ -40,7 +41,8 @@ DB = '''
|
|
|
40
41
|
# The inclusion of ISO 6429 names and other commonly occurring names and
|
|
41
42
|
# abbreviations for control codes and format characters as formal name aliases
|
|
42
43
|
# is to help avoid name collisions between Unicode character names and the
|
|
43
|
-
# labels which commonly appear in text and/or in implementations such as regex,
|
|
44
|
+
# labels which commonly appear in text and/or in implementations such as regex,
|
|
45
|
+
# for
|
|
44
46
|
# control codes (which for historical reasons have no Unicode character name)
|
|
45
47
|
# or for format characters.
|
|
46
48
|
#
|