pyscript-programming-language 1.15.0.dev1__tar.gz → 1.15.2__tar.gz
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.
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/PKG-INFO +28 -24
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/README.md +27 -23
- pyscript_programming_language-1.15.2/changelog.md +16 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyproject.toml +1 -1
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/__main__.py +11 -9
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/constants.py +2 -1
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/editor/gui.py +16 -8
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/handlers.py +13 -1
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/highlight.py +0 -2
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/interpreter.py +15 -26
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/mapping.py +8 -5
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/nodes.py +56 -19
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/parser.py +92 -61
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/pysbuiltins.py +38 -33
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/pystypes.py +9 -4
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/runner.py +4 -3
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/shell.py +15 -17
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/token.py +1 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/utils/debug.py +2 -2
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/utils/decorators.py +7 -5
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/utils/generic.py +3 -2
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/utils/module.py +3 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/utils/string.py +7 -3
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/version.py +13 -2
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/brainfuck.pys +17 -23
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/dual/__init__.pys +5 -3
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/dual/py_dual.py +103 -64
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/explorer.pys +53 -75
- pyscript_programming_language-1.15.2/pyscript/lib/getch/__init__.pys +11 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/getch/py_getch.py +7 -4
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/history.pys +15 -5
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/site.pys +19 -19
- pyscript_programming_language-1.15.2/pyscript/other/message.txt +72 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript_programming_language.egg-info/PKG-INFO +28 -24
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript_programming_language.egg-info/SOURCES.txt +2 -1
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/setup.py +2 -2
- pyscript_programming_language-1.15.0.dev1/changelog.md +0 -30
- pyscript_programming_language-1.15.0.dev1/pyscript/lib/getch/__init__.pys +0 -10
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/MANIFEST.in +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/__init__.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/__init__.pyi +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/__init__.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/analyzer.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/bases.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/buffer.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/cache.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/checks.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/context.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/editor/__init__.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/editor/bases.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/editor/terminal.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/exceptions.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/lexer.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/position.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/results.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/symtab.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/utils/__init__.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/utils/ansi.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/utils/path.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/core/utils/similarity.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/__hello__.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/ansi.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/ast/__init__.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/ast/ast_dump.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/ast/ast_literal_eval.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/ast/ast_unparse.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/ast/ast_walk.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/code.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/dis.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/fpstimer/__init__.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/fpstimer/py_fpstimer.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/inspect.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/jsdict.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/keyword.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/opcode.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/parser.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/pdisplay.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/symtable.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1/pyscript/site-packages → pyscript_programming_language-1.15.2/pyscript/lib}/this.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/token.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/tokenize/__init__.pys +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/lib/tokenize/tok_untokenize.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/other/.nomedia +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/other/PyScript.ico +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/other/copyright +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/other/credits +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/other/license +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript/this.py +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript_programming_language.egg-info/requires.txt +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyscript_programming_language.egg-info/top_level.txt +0 -0
- {pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyscript-programming-language
|
|
3
|
-
Version: 1.15.
|
|
3
|
+
Version: 1.15.2
|
|
4
4
|
Summary: PyScript Programming Language
|
|
5
5
|
Home-page: https://azzammuhyala.github.io/pyscript
|
|
6
6
|
Author: AzzamMuhyala
|
|
@@ -69,8 +69,8 @@ Try [PyScript Shell (_REPL_)](https://azzammuhyala.github.io/pyscript/shell.html
|
|
|
69
69
|
(no installation required).
|
|
70
70
|
|
|
71
71
|
## Installation ⬇️
|
|
72
|
-
First, you'll need to download Python. Make sure you're using the latest version above `3.10
|
|
73
|
-
correctly. Visit the official [Python website](https://python.org) to download it.
|
|
72
|
+
First, you'll need to download Python. Make sure you're using the latest version **above `3.10`**, to ensure the code
|
|
73
|
+
runs correctly. Visit the official [Python website](https://python.org) to download it.
|
|
74
74
|
|
|
75
75
|
Next, after downloading and configuring the Python application, you can download the PyScript from
|
|
76
76
|
[PyScript releases](https://github.com/azzammuhyala/pyscript/releases) or from PIP with this command (_Recommended_):
|
|
@@ -119,28 +119,32 @@ Familiar? There it is!
|
|
|
119
119
|
| 14 | `os` | **required** |
|
|
120
120
|
| 15 | `pkgutil` | **required** |
|
|
121
121
|
| 16 | `re` | **required** |
|
|
122
|
-
| 17 | `
|
|
123
|
-
| 18 | `
|
|
124
|
-
| 19 | `
|
|
125
|
-
| 20 | `
|
|
126
|
-
| 21 | `
|
|
122
|
+
| 17 | `site` | **required** |
|
|
123
|
+
| 18 | `subprocess` | **required** |
|
|
124
|
+
| 19 | `sys` | **required** |
|
|
125
|
+
| 20 | `types` | **required** |
|
|
126
|
+
| 21 | `typing` | **required** |
|
|
127
|
+
| 22 | `unicodedata` | **required** |
|
|
127
128
|
| 1 | `ast` | **required (library)** |
|
|
128
|
-
| 2 | `
|
|
129
|
-
| 3 | `
|
|
130
|
-
| 4 | `
|
|
131
|
-
| 5 | `
|
|
132
|
-
| 6 | `
|
|
133
|
-
| 7 | `
|
|
134
|
-
| 8 | `
|
|
135
|
-
| 9 | `
|
|
129
|
+
| 2 | `math` | **required (library)** |
|
|
130
|
+
| 3 | `msvcrt` | **required (library)** |
|
|
131
|
+
| 4 | `pprint` | **required (library)** |
|
|
132
|
+
| 5 | `shutil` | **required (library)** |
|
|
133
|
+
| 6 | `signal` | **required (library)** |
|
|
134
|
+
| 7 | `stat` | **required (library)** |
|
|
135
|
+
| 8 | `termios` | **required (library)** |
|
|
136
|
+
| 9 | `time` | **required (library)** |
|
|
137
|
+
| 10 | `tty` | **required (library)** |
|
|
136
138
|
| 1 | `_colorize` | **optional** |
|
|
137
139
|
| 2 | `beartype` | **optional** |
|
|
138
|
-
| 3 | `
|
|
139
|
-
| 4 | `
|
|
140
|
-
| 5 | `
|
|
141
|
-
| 6 | `
|
|
142
|
-
| 7 | `
|
|
143
|
-
| 8 | `
|
|
140
|
+
| 3 | `ctypes` | **optional** |
|
|
141
|
+
| 4 | `numpy` | **optional** |
|
|
142
|
+
| 5 | `prompt_toolkit` | **optional** |
|
|
143
|
+
| 6 | `pygments` | **optional** |
|
|
144
|
+
| 7 | `readline` | **optional** |
|
|
145
|
+
| 8 | `threading` | **optional** |
|
|
146
|
+
| 9 | `tkinter` | **optional** |
|
|
147
|
+
| 10 | `IPython` | **optional** |
|
|
144
148
|
|
|
145
149
|
### Status Explanation
|
|
146
150
|
- **required**: Required by PyScript entirely.
|
|
@@ -148,9 +152,9 @@ Familiar? There it is!
|
|
|
148
152
|
- **optional**: Not required, but if it is present, some features can be used without issue.
|
|
149
153
|
|
|
150
154
|
## Highlights 🎨
|
|
151
|
-
- [PyScript plugin for Acode
|
|
155
|
+
- [PyScript plugin for Acode](https://github.com/azzammuhyala/pyscript/tree/main/highlight/acode)
|
|
152
156
|
- [PyScript nano for Linux](https://github.com/azzammuhyala/pyscript/tree/main/highlight/nano)
|
|
153
|
-
- [PyScript extension for VSCode](https://
|
|
157
|
+
- [PyScript extension for VSCode](https://github.com/azzammuhyala/pyscript/tree/main/highlight/vscode)
|
|
154
158
|
|
|
155
159
|
## Behind It 🕰️
|
|
156
160
|
This language created from based up on a
|
{pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/README.md
RENAMED
|
@@ -37,8 +37,8 @@ Try [PyScript Shell (_REPL_)](https://azzammuhyala.github.io/pyscript/shell.html
|
|
|
37
37
|
(no installation required).
|
|
38
38
|
|
|
39
39
|
## Installation ⬇️
|
|
40
|
-
First, you'll need to download Python. Make sure you're using the latest version above `3.10
|
|
41
|
-
correctly. Visit the official [Python website](https://python.org) to download it.
|
|
40
|
+
First, you'll need to download Python. Make sure you're using the latest version **above `3.10`**, to ensure the code
|
|
41
|
+
runs correctly. Visit the official [Python website](https://python.org) to download it.
|
|
42
42
|
|
|
43
43
|
Next, after downloading and configuring the Python application, you can download the PyScript from
|
|
44
44
|
[PyScript releases](https://github.com/azzammuhyala/pyscript/releases) or from PIP with this command (_Recommended_):
|
|
@@ -87,28 +87,32 @@ Familiar? There it is!
|
|
|
87
87
|
| 14 | `os` | **required** |
|
|
88
88
|
| 15 | `pkgutil` | **required** |
|
|
89
89
|
| 16 | `re` | **required** |
|
|
90
|
-
| 17 | `
|
|
91
|
-
| 18 | `
|
|
92
|
-
| 19 | `
|
|
93
|
-
| 20 | `
|
|
94
|
-
| 21 | `
|
|
90
|
+
| 17 | `site` | **required** |
|
|
91
|
+
| 18 | `subprocess` | **required** |
|
|
92
|
+
| 19 | `sys` | **required** |
|
|
93
|
+
| 20 | `types` | **required** |
|
|
94
|
+
| 21 | `typing` | **required** |
|
|
95
|
+
| 22 | `unicodedata` | **required** |
|
|
95
96
|
| 1 | `ast` | **required (library)** |
|
|
96
|
-
| 2 | `
|
|
97
|
-
| 3 | `
|
|
98
|
-
| 4 | `
|
|
99
|
-
| 5 | `
|
|
100
|
-
| 6 | `
|
|
101
|
-
| 7 | `
|
|
102
|
-
| 8 | `
|
|
103
|
-
| 9 | `
|
|
97
|
+
| 2 | `math` | **required (library)** |
|
|
98
|
+
| 3 | `msvcrt` | **required (library)** |
|
|
99
|
+
| 4 | `pprint` | **required (library)** |
|
|
100
|
+
| 5 | `shutil` | **required (library)** |
|
|
101
|
+
| 6 | `signal` | **required (library)** |
|
|
102
|
+
| 7 | `stat` | **required (library)** |
|
|
103
|
+
| 8 | `termios` | **required (library)** |
|
|
104
|
+
| 9 | `time` | **required (library)** |
|
|
105
|
+
| 10 | `tty` | **required (library)** |
|
|
104
106
|
| 1 | `_colorize` | **optional** |
|
|
105
107
|
| 2 | `beartype` | **optional** |
|
|
106
|
-
| 3 | `
|
|
107
|
-
| 4 | `
|
|
108
|
-
| 5 | `
|
|
109
|
-
| 6 | `
|
|
110
|
-
| 7 | `
|
|
111
|
-
| 8 | `
|
|
108
|
+
| 3 | `ctypes` | **optional** |
|
|
109
|
+
| 4 | `numpy` | **optional** |
|
|
110
|
+
| 5 | `prompt_toolkit` | **optional** |
|
|
111
|
+
| 6 | `pygments` | **optional** |
|
|
112
|
+
| 7 | `readline` | **optional** |
|
|
113
|
+
| 8 | `threading` | **optional** |
|
|
114
|
+
| 9 | `tkinter` | **optional** |
|
|
115
|
+
| 10 | `IPython` | **optional** |
|
|
112
116
|
|
|
113
117
|
### Status Explanation
|
|
114
118
|
- **required**: Required by PyScript entirely.
|
|
@@ -116,9 +120,9 @@ Familiar? There it is!
|
|
|
116
120
|
- **optional**: Not required, but if it is present, some features can be used without issue.
|
|
117
121
|
|
|
118
122
|
## Highlights 🎨
|
|
119
|
-
- [PyScript plugin for Acode
|
|
123
|
+
- [PyScript plugin for Acode](https://github.com/azzammuhyala/pyscript/tree/main/highlight/acode)
|
|
120
124
|
- [PyScript nano for Linux](https://github.com/azzammuhyala/pyscript/tree/main/highlight/nano)
|
|
121
|
-
- [PyScript extension for VSCode](https://
|
|
125
|
+
- [PyScript extension for VSCode](https://github.com/azzammuhyala/pyscript/tree/main/highlight/vscode)
|
|
122
126
|
|
|
123
127
|
## Behind It 🕰️
|
|
124
128
|
This language created from based up on a
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Change Logs
|
|
2
|
+
|
|
3
|
+
## [1.15.2] - 08/11/2026
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- Site packages have been moved to `site.getusersitepackages()` within the `pyscript` folder.
|
|
7
|
+
- The body of a `switch` statement can use semicolons `;`.
|
|
8
|
+
- Optimizations applied to several nodes.
|
|
9
|
+
- `getch` library includes the function `getch.is_initialized()`.
|
|
10
|
+
- `site` library includes the function `site.getusersitepackages()`.
|
|
11
|
+
- Added support for conversion to `complex` types in the `dual` library.
|
|
12
|
+
- Added the `make_dirs` parameter to the `newfile`, `move`, and `copy` functions in the `explorer` library.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
- Fixed several bugs.
|
|
16
|
+
- _etc._
|
{pyscript_programming_language-1.15.0.dev1 → pyscript_programming_language-1.15.2}/pyproject.toml
RENAMED
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyscript-programming-language"
|
|
7
|
-
version = "1.15.
|
|
7
|
+
version = "1.15.2"
|
|
8
8
|
description = "PyScript Programming Language"
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -9,10 +9,11 @@ from .core.highlight import (
|
|
|
9
9
|
PYGMENTS, HLFMT_HTML, HLFMT_ANSI, HLFMT_BBCODE, pys_highlight, PygmentsPyScriptStyle, PygmentsPyScriptLexer
|
|
10
10
|
)
|
|
11
11
|
from .core.runner import _namespace_to_symbol_table, pys_runner, pys_shell
|
|
12
|
-
from .core.utils.debug import USE_NOTEBOOK
|
|
12
|
+
from .core.utils.debug import USE_NOTEBOOK, custom_print
|
|
13
13
|
from .core.utils.generic import is_environ
|
|
14
14
|
from .core.utils.module import find_module_path, remove_python_path
|
|
15
15
|
from .core.utils.path import getcwd, base, normpath
|
|
16
|
+
from .core.utils.string import join
|
|
16
17
|
from .core.version import __version__
|
|
17
18
|
|
|
18
19
|
if PYGMENTS:
|
|
@@ -41,7 +42,7 @@ if sys.version_info >= (3, 13):
|
|
|
41
42
|
from _colorize import can_colorize
|
|
42
43
|
COLORIZE = can_colorize()
|
|
43
44
|
except:
|
|
44
|
-
#
|
|
45
|
+
# rule NO_COLOR, see more here: https://no-color.org
|
|
45
46
|
COLORIZE = not is_environ('NO_COLOR')
|
|
46
47
|
else:
|
|
47
48
|
COLORIZE = True
|
|
@@ -138,7 +139,7 @@ parser.add_argument(
|
|
|
138
139
|
parser.add_argument(
|
|
139
140
|
'-t', '--terminal',
|
|
140
141
|
action='store_true',
|
|
141
|
-
help="configure terminal encoding to
|
|
142
|
+
help=f"configure terminal encoding to {pys_sys.encoding} and enable ANSI escape code processing on Windows"
|
|
142
143
|
)
|
|
143
144
|
|
|
144
145
|
parser.add_argument(
|
|
@@ -215,7 +216,7 @@ if args.terminal:
|
|
|
215
216
|
|
|
216
217
|
for fd in (sys.stdout, sys.stderr, sys.stdin):
|
|
217
218
|
try:
|
|
218
|
-
fd.reconfigure(encoding=
|
|
219
|
+
fd.reconfigure(encoding=pys_sys.encoding)
|
|
219
220
|
except:
|
|
220
221
|
continue
|
|
221
222
|
|
|
@@ -354,10 +355,11 @@ def execute(file: PysFileBuffer) -> None:
|
|
|
354
355
|
code, _ = result.end_process()
|
|
355
356
|
|
|
356
357
|
if inspect:
|
|
357
|
-
if sys.
|
|
358
|
+
if sys.stderr.closed:
|
|
358
359
|
code = 1
|
|
359
|
-
elif sys.stdin.closed:
|
|
360
|
-
|
|
360
|
+
elif sys.stdout.closed or sys.stdin.closed:
|
|
361
|
+
io_closed = join([f'sys.{std}' for std in ('stdout', 'stdin') if getattr(sys, std).closed])
|
|
362
|
+
custom_print(f"Cannot run interactive shell: {io_closed} closed", file=sys.stderr)
|
|
361
363
|
code = 1
|
|
362
364
|
else:
|
|
363
365
|
code = pys_shell(
|
|
@@ -382,14 +384,14 @@ if args.file is not None:
|
|
|
382
384
|
elif args.highlight:
|
|
383
385
|
try:
|
|
384
386
|
if args.highlight in FORMATER_HIGHLIGHT_MAP:
|
|
385
|
-
|
|
387
|
+
custom_print(
|
|
386
388
|
pys_highlight(
|
|
387
389
|
source=file,
|
|
388
390
|
formatter=FORMATER_HIGHLIGHT_MAP[args.highlight]
|
|
389
391
|
)
|
|
390
392
|
)
|
|
391
393
|
else:
|
|
392
|
-
|
|
394
|
+
custom_print(
|
|
393
395
|
highlight(
|
|
394
396
|
code=file.text,
|
|
395
397
|
lexer=PygmentsPyScriptLexer(),
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import os
|
|
2
|
+
import site
|
|
2
3
|
|
|
3
4
|
PYSCRIPT_PATH = os.path.sep.join(__file__.split(os.path.sep)[:-2])
|
|
4
5
|
CORE_PATH = os.path.join(PYSCRIPT_PATH, 'core')
|
|
5
6
|
LIBRARIES_PATH = os.path.join(PYSCRIPT_PATH, 'lib')
|
|
6
7
|
OTHER_PATH = os.path.join(PYSCRIPT_PATH, 'other')
|
|
7
|
-
SITE_PACKAGES_PATH = os.path.join(
|
|
8
|
+
SITE_PACKAGES_PATH = os.path.join(site.getusersitepackages(), 'pyscript')
|
|
8
9
|
ICON_PATH = os.path.join(OTHER_PATH, 'PyScript.ico')
|
|
9
10
|
GLOBAL_HISTORY_PATH = os.path.join(os.path.expanduser('~'), '.pyscript_history')
|
|
10
11
|
CONFIGURATIONS_PATH = os.path.join(OTHER_PATH, 'configurations.json')
|
|
@@ -151,11 +151,18 @@ try:
|
|
|
151
151
|
else:
|
|
152
152
|
font_name = 'monospace'
|
|
153
153
|
|
|
154
|
-
self.lexer = PygmentsPyScriptLexer()
|
|
155
|
-
self.font = Font(family=font_name, size=boundary(self.get_configuration('gui-size-font', 10), 1, 127))
|
|
156
154
|
self.line_job = None
|
|
155
|
+
self.font = Font(
|
|
156
|
+
family=font_name,
|
|
157
|
+
size=boundary(self.get_configuration('gui-size-font', 10), 1, 127)
|
|
158
|
+
)
|
|
157
159
|
self.scrollbar = Scrollbar(self)
|
|
158
|
-
self.line_numbers = Canvas(
|
|
160
|
+
self.line_numbers = Canvas(
|
|
161
|
+
self,
|
|
162
|
+
width=0,
|
|
163
|
+
highlightthickness=0,
|
|
164
|
+
bd=0
|
|
165
|
+
)
|
|
159
166
|
self.text = Text(
|
|
160
167
|
self,
|
|
161
168
|
undo=True,
|
|
@@ -217,7 +224,8 @@ try:
|
|
|
217
224
|
self.wm_protocol('WM_DELETE_WINDOW', on_close)
|
|
218
225
|
|
|
219
226
|
if PYGMENTS and colored:
|
|
220
|
-
self.
|
|
227
|
+
self.lexer = PygmentsPyScriptLexer()
|
|
228
|
+
self.refresh_job = None
|
|
221
229
|
|
|
222
230
|
tag_configure = self.text.tag_configure
|
|
223
231
|
for token, style in PygmentsPyScriptStyle.list_styles():
|
|
@@ -226,7 +234,7 @@ try:
|
|
|
226
234
|
tag_configure(str(token), foreground=f'#{color}')
|
|
227
235
|
|
|
228
236
|
def refresh_highlight():
|
|
229
|
-
self.
|
|
237
|
+
self.refresh_job = None
|
|
230
238
|
|
|
231
239
|
index = '1.0'
|
|
232
240
|
|
|
@@ -248,9 +256,9 @@ try:
|
|
|
248
256
|
|
|
249
257
|
def update():
|
|
250
258
|
self.title(f'PyScript {__version__} - {self.basename}{"*" if self.modified else ""}')
|
|
251
|
-
if self.
|
|
252
|
-
self.after_cancel(self.
|
|
253
|
-
self.
|
|
259
|
+
if self.refresh_job is not None:
|
|
260
|
+
self.after_cancel(self.refresh_job)
|
|
261
|
+
self.refresh_job = self.after(1000, refresh_highlight)
|
|
254
262
|
|
|
255
263
|
else:
|
|
256
264
|
def update():
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
from .cache import pys_sys
|
|
2
|
-
from .constants import ENV_PYSCRIPT_WITH_GIL
|
|
2
|
+
from .constants import SITE_PACKAGES_PATH, ENV_PYSCRIPT_WITH_GIL
|
|
3
3
|
from .context import PysContext
|
|
4
4
|
from .position import PysPosition
|
|
5
5
|
from .pystypes import PysFunction
|
|
6
6
|
from .utils.generic import is_environ
|
|
7
7
|
|
|
8
|
+
from site import ENABLE_USER_SITE
|
|
8
9
|
from types import MethodType
|
|
9
10
|
from typing import Any
|
|
10
11
|
|
|
12
|
+
import os
|
|
13
|
+
|
|
11
14
|
wrapper_function = (MethodType, classmethod, staticmethod)
|
|
12
15
|
|
|
16
|
+
if ENABLE_USER_SITE:
|
|
17
|
+
try:
|
|
18
|
+
if os.path.isfile(SITE_PACKAGES_PATH):
|
|
19
|
+
os.remove(SITE_PACKAGES_PATH)
|
|
20
|
+
if not os.path.exists(SITE_PACKAGES_PATH):
|
|
21
|
+
os.mkdir(SITE_PACKAGES_PATH)
|
|
22
|
+
except:
|
|
23
|
+
pass
|
|
24
|
+
|
|
13
25
|
GIL = pys_sys.gil = False
|
|
14
26
|
if is_environ(ENV_PYSCRIPT_WITH_GIL):
|
|
15
27
|
try:
|
|
@@ -28,7 +28,6 @@ BUILTIN_FUNCTIONS = frozenset(
|
|
|
28
28
|
)
|
|
29
29
|
|
|
30
30
|
try:
|
|
31
|
-
# if pygments module already exists
|
|
32
31
|
from pygments.lexer import RegexLexer, include, bygroups
|
|
33
32
|
from pygments.style import Style
|
|
34
33
|
from pygments.token import (
|
|
@@ -114,7 +113,6 @@ try:
|
|
|
114
113
|
Comment.Single: HIGHLIGHT_MAP['comment'],
|
|
115
114
|
Error: HIGHLIGHT_MAP['invalid'],
|
|
116
115
|
Generic.Prompt: HIGHLIGHT_MAP['keyword-other'],
|
|
117
|
-
|
|
118
116
|
Punctuation.Brackets0: HIGHLIGHT_MAP['brackets-0'],
|
|
119
117
|
Punctuation.Brackets1: HIGHLIGHT_MAP['brackets-1'],
|
|
120
118
|
Punctuation.Brackets2: HIGHLIGHT_MAP['brackets-2']
|
|
@@ -308,17 +308,19 @@ def visit_BinaryOperatorNode(node: PysBinaryOperatorNode, context: PysContext) -
|
|
|
308
308
|
result._context = context
|
|
309
309
|
result._position = node.position
|
|
310
310
|
with result:
|
|
311
|
-
return_right = True
|
|
312
311
|
|
|
313
312
|
if otype == T_OR:
|
|
314
313
|
if left:
|
|
315
314
|
return result.success(left)
|
|
315
|
+
return_right = True
|
|
316
316
|
elif otype == T_AND:
|
|
317
317
|
if not left:
|
|
318
318
|
return result.success(left)
|
|
319
|
+
return_right = True
|
|
319
320
|
elif otype == T_NULLISH:
|
|
320
321
|
if left is not None:
|
|
321
322
|
return result.success(left)
|
|
323
|
+
return_right = True
|
|
322
324
|
else:
|
|
323
325
|
return_right = False
|
|
324
326
|
|
|
@@ -582,11 +584,8 @@ def visit_SwitchNode(node: PysSwitchNode, context: PysContext) -> PysRunTimeResu
|
|
|
582
584
|
|
|
583
585
|
if (fall_through or no_match_found) and (ndefault := node.default):
|
|
584
586
|
register(get_visitor(ndefault.__class__)(ndefault, context))
|
|
585
|
-
if should_return():
|
|
586
|
-
|
|
587
|
-
result.should_break = False
|
|
588
|
-
else:
|
|
589
|
-
return result
|
|
587
|
+
if should_return() and not result.should_break:
|
|
588
|
+
return result
|
|
590
589
|
|
|
591
590
|
return result.success(None)
|
|
592
591
|
|
|
@@ -598,13 +597,13 @@ def visit_MatchNode(node: PysMatchNode, context: PysContext) -> PysRunTimeResult
|
|
|
598
597
|
should_return = result.should_return
|
|
599
598
|
ntarget = node.target
|
|
600
599
|
|
|
601
|
-
compare = False
|
|
602
|
-
|
|
603
600
|
if ntarget:
|
|
604
601
|
target = register(get_visitor(ntarget.__class__)(ntarget, context))
|
|
605
602
|
if should_return():
|
|
606
603
|
return result
|
|
607
604
|
compare = True
|
|
605
|
+
else:
|
|
606
|
+
compare = False
|
|
608
607
|
|
|
609
608
|
for ncondition, nvalue in node.cases:
|
|
610
609
|
condition = register(get_visitor(ncondition.__class__)(ncondition, context))
|
|
@@ -614,7 +613,7 @@ def visit_MatchNode(node: PysMatchNode, context: PysContext) -> PysRunTimeResult
|
|
|
614
613
|
result._position = ncondition.position
|
|
615
614
|
with result:
|
|
616
615
|
|
|
617
|
-
if target == condition if compare else
|
|
616
|
+
if (target == condition) if compare else condition:
|
|
618
617
|
value = register(get_visitor(nvalue.__class__)(nvalue, context))
|
|
619
618
|
if should_return():
|
|
620
619
|
return result
|
|
@@ -657,7 +656,6 @@ def visit_TryNode(node: PysTryNode, context: PysContext) -> PysRunTimeResult:
|
|
|
657
656
|
failure(None)
|
|
658
657
|
|
|
659
658
|
for (targets, tparameter), body in node.catches:
|
|
660
|
-
handle_exception = True
|
|
661
659
|
stop = False
|
|
662
660
|
|
|
663
661
|
if targets:
|
|
@@ -686,6 +684,9 @@ def visit_TryNode(node: PysTryNode, context: PysContext) -> PysRunTimeResult:
|
|
|
686
684
|
handle_exception = True
|
|
687
685
|
break
|
|
688
686
|
|
|
687
|
+
else:
|
|
688
|
+
handle_exception = True
|
|
689
|
+
|
|
689
690
|
if stop:
|
|
690
691
|
break
|
|
691
692
|
|
|
@@ -902,10 +903,7 @@ def visit_ForNode(node: PysForNode, context: PysContext) -> PysRunTimeResult:
|
|
|
902
903
|
if should_return():
|
|
903
904
|
return result
|
|
904
905
|
|
|
905
|
-
if result.should_break:
|
|
906
|
-
result.should_break = False
|
|
907
|
-
|
|
908
|
-
elif nelse := node.else_:
|
|
906
|
+
if not result.should_break and (nelse := node.else_):
|
|
909
907
|
register(get_visitor(nelse.__class__)(nelse, context))
|
|
910
908
|
if should_return():
|
|
911
909
|
return result
|
|
@@ -945,10 +943,7 @@ def visit_WhileNode(node: PysWhileNode, context: PysContext) -> PysRunTimeResult
|
|
|
945
943
|
else:
|
|
946
944
|
return result
|
|
947
945
|
|
|
948
|
-
if result.should_break:
|
|
949
|
-
result.should_break = False
|
|
950
|
-
|
|
951
|
-
elif nelse := node.else_:
|
|
946
|
+
if not result.should_break and (nelse := node.else_):
|
|
952
947
|
register(get_visitor(nelse.__class__)(nelse, context))
|
|
953
948
|
if should_return():
|
|
954
949
|
return result
|
|
@@ -988,10 +983,7 @@ def visit_DoWhileNode(node: PysDoWhileNode, context: PysContext) -> PysRunTimeRe
|
|
|
988
983
|
if should_return():
|
|
989
984
|
return result
|
|
990
985
|
|
|
991
|
-
if result.should_break:
|
|
992
|
-
result.should_break = False
|
|
993
|
-
|
|
994
|
-
elif nelse := node.else_:
|
|
986
|
+
if not result.should_break and (nelse := node.else_):
|
|
995
987
|
register(get_visitor(nelse.__class__)(nelse, context))
|
|
996
988
|
if should_return():
|
|
997
989
|
return result
|
|
@@ -1033,10 +1025,7 @@ def visit_RepeatNode(node: PysRepeatNode, context: PysContext) -> PysRunTimeResu
|
|
|
1033
1025
|
if should_return():
|
|
1034
1026
|
return result
|
|
1035
1027
|
|
|
1036
|
-
if result.should_break:
|
|
1037
|
-
result.should_break = False
|
|
1038
|
-
|
|
1039
|
-
elif nelse := node.else_:
|
|
1028
|
+
if not result.should_break and (nelse := node.else_):
|
|
1040
1029
|
register(get_visitor(nelse.__class__)(nelse, context))
|
|
1041
1030
|
if should_return():
|
|
1042
1031
|
return result
|
|
@@ -9,16 +9,18 @@ from operator import (
|
|
|
9
9
|
neg, inv
|
|
10
10
|
)
|
|
11
11
|
|
|
12
|
-
contains
|
|
13
|
-
not_contains
|
|
14
|
-
and_op
|
|
15
|
-
or_op
|
|
16
|
-
|
|
12
|
+
contains = lambda a, b : a in b
|
|
13
|
+
not_contains = lambda a, b : a not in b
|
|
14
|
+
and_op = lambda a, b : a and b
|
|
15
|
+
or_op = lambda a, b : a or b
|
|
16
|
+
not_isinstance = lambda a, b : not isinstance(a, b)
|
|
17
|
+
typeof = lambda a : type(a).__name__
|
|
17
18
|
|
|
18
19
|
GET_BINARY_FUNCTION = {
|
|
19
20
|
TOKENS['IS']: is_,
|
|
20
21
|
TOKENS['IS_NOT']: is_not,
|
|
21
22
|
TOKENS['INSTANCEOF']: isinstance,
|
|
23
|
+
TOKENS['NOT_INSTANCEOF']: not_isinstance,
|
|
22
24
|
TOKENS['PERCENT']: mod,
|
|
23
25
|
TOKENS['AMPERSAND']: and_,
|
|
24
26
|
TOKENS['STAR']: mul,
|
|
@@ -150,6 +152,7 @@ SYMBOLS_TOKEN_MAP = dfrozen({
|
|
|
150
152
|
TOKENS['IS_NOT']: 'is not',
|
|
151
153
|
TOKENS['TYPEOF']: 'typeof',
|
|
152
154
|
TOKENS['INSTANCEOF']: 'instanceof',
|
|
155
|
+
TOKENS['NOT_INSTANCEOF']: 'not instanceof',
|
|
153
156
|
TOKENS['NEWLINE']: '\n',
|
|
154
157
|
TOKENS['EXCLAMATION']: '!',
|
|
155
158
|
TOKENS['COMMENT']: '#',
|