rapydscript-ns 0.9.3 → 0.9.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/.agignore +1 -1
- package/.github/workflows/ci.yml +38 -38
- package/=template.pyj +5 -5
- package/CHANGELOG.md +9 -0
- package/HACKING.md +103 -103
- package/LICENSE +24 -24
- package/PYTHON_GAPS.md +48 -116
- package/README.md +35 -15
- package/TODO.md +1 -26
- package/add-toc-to-readme +2 -2
- package/bin/export +75 -75
- package/bin/rapydscript +0 -0
- package/bin/web-repl-export +102 -102
- package/build +2 -2
- package/language-service/index.js +9 -7
- package/package.json +1 -1
- package/publish.py +37 -37
- package/session.vim +4 -4
- package/setup.cfg +2 -2
- package/src/ast.pyj +6 -0
- package/src/baselib-containers.pyj +23 -1
- package/src/baselib-str.pyj +13 -2
- package/src/compiler.pyj +36 -36
- package/src/errors.pyj +30 -30
- package/src/lib/aes.pyj +646 -646
- package/src/lib/collections.pyj +227 -3
- package/src/lib/copy.pyj +120 -120
- package/src/lib/elementmaker.pyj +83 -83
- package/src/lib/encodings.pyj +126 -126
- package/src/lib/gettext.pyj +569 -569
- package/src/lib/itertools.pyj +580 -580
- package/src/lib/math.pyj +193 -193
- package/src/lib/operator.pyj +11 -11
- package/src/lib/pprint.pyj +455 -0
- package/src/lib/random.pyj +118 -118
- package/src/lib/react.pyj +74 -74
- package/src/lib/statistics.pyj +0 -0
- package/src/lib/traceback.pyj +63 -63
- package/src/lib/uuid.pyj +77 -77
- package/src/monaco-language-service/diagnostics.js +2 -2
- package/src/monaco-language-service/dts.js +550 -550
- package/src/output/codegen.pyj +4 -1
- package/src/output/comments.pyj +45 -45
- package/src/output/exceptions.pyj +201 -201
- package/src/output/jsx.pyj +164 -164
- package/src/output/treeshake.pyj +182 -182
- package/src/output/utils.pyj +72 -72
- package/src/parse.pyj +28 -7
- package/src/string_interpolation.pyj +72 -72
- package/src/tokenizer.pyj +18 -2
- package/src/unicode_aliases.pyj +576 -576
- package/src/utils.pyj +192 -192
- package/test/_import_one.pyj +37 -37
- package/test/_import_two/__init__.pyj +11 -11
- package/test/_import_two/level2/deep.pyj +4 -4
- package/test/_import_two/other.pyj +6 -6
- package/test/_import_two/sub.pyj +13 -13
- package/test/aes_vectors.pyj +421 -421
- package/test/annotations.pyj +80 -80
- package/test/baselib.pyj +23 -0
- package/test/chainmap.pyj +185 -0
- package/test/decorators.pyj +77 -77
- package/test/docstrings.pyj +39 -39
- package/test/elementmaker_test.pyj +45 -45
- package/test/functions.pyj +151 -151
- package/test/generators.pyj +41 -41
- package/test/generic.pyj +370 -370
- package/test/internationalization.pyj +73 -73
- package/test/lint.pyj +164 -164
- package/test/loops.pyj +85 -85
- package/test/numpy.pyj +734 -734
- package/test/pprint.pyj +232 -0
- package/test/repl.pyj +121 -121
- package/test/scoped_flags.pyj +76 -76
- package/test/statistics.pyj +224 -0
- package/test/unit/index.js +80 -0
- package/test/unit/language-service-completions.js +2 -0
- package/test/unit/language-service-dts.js +543 -543
- package/test/unit/language-service-hover.js +455 -455
- package/test/unit/language-service.js +63 -2
- package/test/unit/web-repl.js +323 -0
- package/tools/compiler.d.ts +367 -367
- package/tools/completer.js +131 -131
- package/tools/export.js +4 -2
- package/tools/gettext.js +185 -185
- package/tools/ini.js +65 -65
- package/tools/msgfmt.js +187 -187
- package/tools/repl.js +223 -223
- package/tools/test.js +118 -118
- package/tools/utils.js +128 -128
- package/tools/web_repl.js +95 -95
- package/try +41 -41
- package/web-repl/env.js +196 -196
- package/web-repl/index.html +163 -163
- package/web-repl/prism.css +139 -139
- package/web-repl/prism.js +113 -113
- package/web-repl/rapydscript.js +228 -226
- package/web-repl/sha1.js +25 -25
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
# vim:fileencoding=utf-8
|
|
2
|
-
# License: BSD Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
|
3
|
-
from __python__ import hash_literals
|
|
4
|
-
|
|
5
|
-
def quoted_string(x):
|
|
6
|
-
return '"' + x.replace(/\\/g, '\\\\').replace(/"/g, r'\"').replace(/\n/g, '\\n') + '"'
|
|
7
|
-
|
|
8
|
-
def render_markup(markup):
|
|
9
|
-
pos, key = 0, ''
|
|
10
|
-
while pos < markup.length:
|
|
11
|
-
ch = markup[pos]
|
|
12
|
-
if ch is '!' or ch is ':':
|
|
13
|
-
break
|
|
14
|
-
key += ch
|
|
15
|
-
pos += 1
|
|
16
|
-
fmtspec = markup[pos:]
|
|
17
|
-
prefix = ''
|
|
18
|
-
if key.endsWith('='):
|
|
19
|
-
prefix=key
|
|
20
|
-
key = key[:-1]
|
|
21
|
-
return 'ρσ_str.format("' + prefix + '{' + fmtspec + '}", ' + key + ')'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def interpolate(template, raise_error):
|
|
25
|
-
pos = in_brace = 0
|
|
26
|
-
markup = ''
|
|
27
|
-
ans = v'[""]'
|
|
28
|
-
while pos < template.length:
|
|
29
|
-
ch = template[pos]
|
|
30
|
-
if in_brace:
|
|
31
|
-
if ch is '{':
|
|
32
|
-
in_brace += 1
|
|
33
|
-
markup += '{'
|
|
34
|
-
elif ch is '}':
|
|
35
|
-
in_brace -= 1
|
|
36
|
-
if in_brace > 0:
|
|
37
|
-
markup += '}'
|
|
38
|
-
else:
|
|
39
|
-
ans.push(v'[markup]')
|
|
40
|
-
ans.push('')
|
|
41
|
-
else:
|
|
42
|
-
markup += ch
|
|
43
|
-
else:
|
|
44
|
-
if ch is '{':
|
|
45
|
-
if template[pos+1] is '{':
|
|
46
|
-
pos += 1
|
|
47
|
-
ans[-1] += '{'
|
|
48
|
-
else:
|
|
49
|
-
in_brace = 1
|
|
50
|
-
markup = ''
|
|
51
|
-
elif ch is '}':
|
|
52
|
-
if template[pos+1] is '}':
|
|
53
|
-
pos += 1
|
|
54
|
-
ans[-1] += '}'
|
|
55
|
-
else:
|
|
56
|
-
raise_error("f-string: single '}' is not allowed")
|
|
57
|
-
else:
|
|
58
|
-
ans[-1] += ch
|
|
59
|
-
|
|
60
|
-
pos += 1
|
|
61
|
-
|
|
62
|
-
if in_brace:
|
|
63
|
-
raise_error("expected '}' before end of string")
|
|
64
|
-
|
|
65
|
-
if ans[-1] is '+':
|
|
66
|
-
ans[-1] = ''
|
|
67
|
-
for v'var i = 0; i < ans.length; i++':
|
|
68
|
-
if jstype(ans[i]) is 'string':
|
|
69
|
-
ans[i] = quoted_string(ans[i])
|
|
70
|
-
else:
|
|
71
|
-
ans[i] = '+' + render_markup.apply(this, ans[i]) + '+'
|
|
72
|
-
return ans.join('')
|
|
1
|
+
# vim:fileencoding=utf-8
|
|
2
|
+
# License: BSD Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
|
3
|
+
from __python__ import hash_literals
|
|
4
|
+
|
|
5
|
+
def quoted_string(x):
|
|
6
|
+
return '"' + x.replace(/\\/g, '\\\\').replace(/"/g, r'\"').replace(/\n/g, '\\n') + '"'
|
|
7
|
+
|
|
8
|
+
def render_markup(markup):
|
|
9
|
+
pos, key = 0, ''
|
|
10
|
+
while pos < markup.length:
|
|
11
|
+
ch = markup[pos]
|
|
12
|
+
if ch is '!' or ch is ':':
|
|
13
|
+
break
|
|
14
|
+
key += ch
|
|
15
|
+
pos += 1
|
|
16
|
+
fmtspec = markup[pos:]
|
|
17
|
+
prefix = ''
|
|
18
|
+
if key.endsWith('='):
|
|
19
|
+
prefix=key
|
|
20
|
+
key = key[:-1]
|
|
21
|
+
return 'ρσ_str.format("' + prefix + '{' + fmtspec + '}", ' + key + ')'
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def interpolate(template, raise_error):
|
|
25
|
+
pos = in_brace = 0
|
|
26
|
+
markup = ''
|
|
27
|
+
ans = v'[""]'
|
|
28
|
+
while pos < template.length:
|
|
29
|
+
ch = template[pos]
|
|
30
|
+
if in_brace:
|
|
31
|
+
if ch is '{':
|
|
32
|
+
in_brace += 1
|
|
33
|
+
markup += '{'
|
|
34
|
+
elif ch is '}':
|
|
35
|
+
in_brace -= 1
|
|
36
|
+
if in_brace > 0:
|
|
37
|
+
markup += '}'
|
|
38
|
+
else:
|
|
39
|
+
ans.push(v'[markup]')
|
|
40
|
+
ans.push('')
|
|
41
|
+
else:
|
|
42
|
+
markup += ch
|
|
43
|
+
else:
|
|
44
|
+
if ch is '{':
|
|
45
|
+
if template[pos+1] is '{':
|
|
46
|
+
pos += 1
|
|
47
|
+
ans[-1] += '{'
|
|
48
|
+
else:
|
|
49
|
+
in_brace = 1
|
|
50
|
+
markup = ''
|
|
51
|
+
elif ch is '}':
|
|
52
|
+
if template[pos+1] is '}':
|
|
53
|
+
pos += 1
|
|
54
|
+
ans[-1] += '}'
|
|
55
|
+
else:
|
|
56
|
+
raise_error("f-string: single '}' is not allowed")
|
|
57
|
+
else:
|
|
58
|
+
ans[-1] += ch
|
|
59
|
+
|
|
60
|
+
pos += 1
|
|
61
|
+
|
|
62
|
+
if in_brace:
|
|
63
|
+
raise_error("expected '}' before end of string")
|
|
64
|
+
|
|
65
|
+
if ans[-1] is '+':
|
|
66
|
+
ans[-1] = ''
|
|
67
|
+
for v'var i = 0; i < ans.length; i++':
|
|
68
|
+
if jstype(ans[i]) is 'string':
|
|
69
|
+
ans[i] = quoted_string(ans[i])
|
|
70
|
+
else:
|
|
71
|
+
ans[i] = '+' + render_markup.apply(this, ans[i]) + '+'
|
|
72
|
+
return ans.join('')
|
package/src/tokenizer.pyj
CHANGED
|
@@ -334,6 +334,19 @@ def tokenizer(raw_text, filename):
|
|
|
334
334
|
valid = parseInt(num, 2)
|
|
335
335
|
if isNaN(valid):
|
|
336
336
|
parse_error('Invalid syntax for a binary number')
|
|
337
|
+
if peek() is 'n':
|
|
338
|
+
next()
|
|
339
|
+
return token('bigint', '0b' + num)
|
|
340
|
+
return token('num', valid)
|
|
341
|
+
if not prefix and peek() is '0' and S.text.charAt(S.pos + 1) is 'o':
|
|
342
|
+
next(), next()
|
|
343
|
+
num = read_while(def(ch): return ch >= '0' and ch <= '7';)
|
|
344
|
+
valid = parseInt(num, 8)
|
|
345
|
+
if isNaN(valid):
|
|
346
|
+
parse_error('Invalid syntax for an octal number')
|
|
347
|
+
if peek() is 'n':
|
|
348
|
+
next()
|
|
349
|
+
return token('bigint', '0o' + num)
|
|
337
350
|
return token('num', valid)
|
|
338
351
|
seen = v'[]'
|
|
339
352
|
num = read_while(def(ch, i):
|
|
@@ -363,8 +376,8 @@ def tokenizer(raw_text, filename):
|
|
|
363
376
|
return False
|
|
364
377
|
elif ch is '.':
|
|
365
378
|
return (has_dot = True) if not has_dot and not has_x and not has_e else False
|
|
366
|
-
elif ch is 'j' or ch is 'J':
|
|
367
|
-
return False # imaginary suffix — stop here; handled after loop
|
|
379
|
+
elif ch is 'j' or ch is 'J' or ch is 'n':
|
|
380
|
+
return False # imaginary/bigint suffix — stop here; handled after loop
|
|
368
381
|
return is_alphanumeric_char(ch.charCodeAt(0))
|
|
369
382
|
)
|
|
370
383
|
if prefix:
|
|
@@ -375,6 +388,9 @@ def tokenizer(raw_text, filename):
|
|
|
375
388
|
if peek() is 'j' or peek() is 'J':
|
|
376
389
|
next()
|
|
377
390
|
return token("imaginary", valid)
|
|
391
|
+
if peek() is 'n':
|
|
392
|
+
next()
|
|
393
|
+
return token("bigint", num)
|
|
378
394
|
return token("num", valid)
|
|
379
395
|
else:
|
|
380
396
|
parse_error("Invalid syntax: " + num)
|