rapydscript-ng 0.8.3 → 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 +6 -0
- package/bin/build.ts +29 -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 +2543 -2432
- package/release/signatures.json +26 -26
- package/src/ast.pyj +170 -58
- 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 +34 -13
- package/src/output/literals.pyj +7 -2
- package/src/output/loops.pyj +50 -16
- 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 +300 -55
- 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/tools/compiler.mjs +0 -6
- package/tools/fmt.mjs +41 -2
- package/tools/lint-worker.mjs +7 -1
- package/tools/lint.mjs +12 -5
- package/tools/lsp.mjs +11 -1
|
@@ -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,19 +692,31 @@ 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; also skip newlines inside
|
|
710
|
+
# Skip horizontal whitespace; also skip newlines inside
|
|
711
|
+
# brackets where indentation is irrelevant
|
|
507
712
|
while S.pos < S.text.length:
|
|
508
713
|
wch = S.text.charAt(S.pos)
|
|
509
714
|
if wch is ' ' or wch is '\t':
|
|
510
715
|
next()
|
|
511
|
-
elif (
|
|
716
|
+
elif (
|
|
717
|
+
(wch is '\n' or wch is '\r') and
|
|
718
|
+
not S.indentation_matters[-1]
|
|
719
|
+
):
|
|
512
720
|
next()
|
|
513
721
|
else:
|
|
514
722
|
break
|
|
@@ -516,13 +724,16 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
516
724
|
if not ch:
|
|
517
725
|
break
|
|
518
726
|
if ch is "'" or ch is '"':
|
|
519
|
-
# A plain string literal follows; read it and
|
|
727
|
+
# A plain string literal follows; read it and
|
|
728
|
+
# append its quoted value
|
|
520
729
|
stok = read_string(False, False)
|
|
521
730
|
parts.push(quoted_string(stok.value))
|
|
522
731
|
elif is_identifier_start(ch.charCodeAt(0)):
|
|
523
|
-
# 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
|
|
524
734
|
j = S.pos
|
|
525
|
-
while j < S.text.length and
|
|
735
|
+
while (j < S.text.length and
|
|
736
|
+
is_identifier_char(S.text.charAt(j))):
|
|
526
737
|
j += 1
|
|
527
738
|
potential_mod = S.text.substring(S.pos, j)
|
|
528
739
|
if not is_string_modifier(potential_mod):
|
|
@@ -532,7 +743,8 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
532
743
|
mods = potential_mod.toLowerCase()
|
|
533
744
|
if mods.indexOf('v') is not -1:
|
|
534
745
|
break # Do not concatenate with verbatim JS literals
|
|
535
|
-
# Consume the modifier characters via next() to keep
|
|
746
|
+
# Consume the modifier characters via next() to keep
|
|
747
|
+
# position tracking correct
|
|
536
748
|
while S.pos < j:
|
|
537
749
|
next()
|
|
538
750
|
is_raw = mods.indexOf('r') is not -1
|
|
@@ -619,7 +831,8 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
619
831
|
break
|
|
620
832
|
elif ch is '\\':
|
|
621
833
|
prev_backslash = True
|
|
622
|
-
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):
|
|
623
836
|
pass
|
|
624
837
|
elif verbose_regexp and not in_class and ch is '#':
|
|
625
838
|
in_comment = True
|
|
@@ -653,14 +866,23 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
653
866
|
|
|
654
867
|
def handle_dot():
|
|
655
868
|
next()
|
|
656
|
-
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
|
+
)
|
|
657
873
|
|
|
658
874
|
def read_word():
|
|
659
875
|
word = read_name()
|
|
660
876
|
return token(
|
|
661
877
|
'atom',
|
|
662
878
|
word
|
|
663
|
-
) 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
|
+
)
|
|
664
886
|
|
|
665
887
|
def next_token():
|
|
666
888
|
indent = parse_whitespace()
|
|
@@ -678,27 +900,40 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
678
900
|
tmp_ = code
|
|
679
901
|
if tmp_ is 34 or tmp_ is 39: # double-quote (") or single quote (')
|
|
680
902
|
stok = read_string(False)
|
|
681
|
-
# Look ahead to detect a following f-string
|
|
682
|
-
# otherwise be parsed as a
|
|
683
|
-
#
|
|
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.
|
|
684
907
|
j = S.pos
|
|
685
908
|
while j < S.text.length:
|
|
686
909
|
jch = S.text.charAt(j)
|
|
687
910
|
if jch is ' ' or jch is '\t':
|
|
688
911
|
j += 1
|
|
689
|
-
elif (
|
|
912
|
+
elif (
|
|
913
|
+
(jch is '\n' or jch is '\r') and
|
|
914
|
+
not S.indentation_matters[-1]
|
|
915
|
+
):
|
|
690
916
|
j += 1
|
|
691
917
|
else:
|
|
692
918
|
break
|
|
693
|
-
if j < S.text.length and
|
|
919
|
+
if (j < S.text.length and
|
|
920
|
+
is_identifier_start(S.text.charAt(j).charCodeAt(0))):
|
|
694
921
|
k = j
|
|
695
|
-
while k < S.text.length and
|
|
922
|
+
while (k < S.text.length and
|
|
923
|
+
is_identifier_char(S.text.charAt(k))):
|
|
696
924
|
k += 1
|
|
697
925
|
potential_mod = S.text.substring(j, k)
|
|
698
|
-
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):
|
|
699
929
|
mods_check = potential_mod.toLowerCase()
|
|
700
|
-
if mods_check.indexOf('f') is not -1 and
|
|
701
|
-
|
|
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
|
+
)
|
|
702
937
|
return stok
|
|
703
938
|
elif tmp_ is 35: # pound-sign (#)
|
|
704
939
|
if S.pos is 0 and S.text.charAt(1) is '!':
|
|
@@ -733,10 +968,14 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
733
968
|
|
|
734
969
|
if is_identifier_start(code):
|
|
735
970
|
tok = read_word()
|
|
736
|
-
if '\'"'.indexOf(peek()) is not -1 and
|
|
971
|
+
if ('\'"'.indexOf(peek()) is not -1 and
|
|
972
|
+
is_string_modifier(tok.value)):
|
|
737
973
|
mods = tok.value.toLowerCase()
|
|
738
974
|
start_pos_for_string = S.tokpos
|
|
739
|
-
stok = read_string(
|
|
975
|
+
stok = read_string(
|
|
976
|
+
mods.indexOf('r') is not -1,
|
|
977
|
+
mods.indexOf('v') is not -1
|
|
978
|
+
)
|
|
740
979
|
tok.endpos = stok.endpos
|
|
741
980
|
if stok.type is not 'js' and mods.indexOf('f') is not -1:
|
|
742
981
|
tok.col += start_pos_for_string - tok.pos
|
|
@@ -749,10 +988,16 @@ def tokenizer(raw_text, filename, recover_errors):
|
|
|
749
988
|
# In error-recovery mode (used by the LSP) an unrecognized character
|
|
750
989
|
# must not raise, because re-tokenizing from the same position would
|
|
751
990
|
# loop forever (parse_error is raised before the character is
|
|
752
|
-
# consumed). Record it and skip the single offending
|
|
991
|
+
# consumed). Record it and skip the single offending
|
|
992
|
+
# character so the
|
|
753
993
|
# tokenizer always makes forward progress.
|
|
754
|
-
S.recovered_errors.push({
|
|
755
|
-
|
|
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
|
+
})
|
|
756
1001
|
next()
|
|
757
1002
|
return next_token()
|
|
758
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
|
#
|