pyscript-programming-language 1.12.0__tar.gz → 1.12.1__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.12.0/pyscript_programming_language.egg-info → pyscript_programming_language-1.12.1}/PKG-INFO +5 -5
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/README.md +4 -4
- pyscript_programming_language-1.12.1/changelog.md +16 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyproject.toml +1 -1
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/__init__.py +4 -2
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/__init__.pyi +2 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/__main__.py +34 -15
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/analyzer.py +2 -2
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/cache.py +3 -1
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/constants.py +3 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/editor/bases.py +9 -6
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/editor/gui.py +13 -9
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/editor/terminal.py +25 -31
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/exceptions.py +11 -12
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/handlers.py +2 -2
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/highlight.py +4 -4
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/interpreter.py +16 -16
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/lexer.py +51 -7
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/mapping.py +3 -3
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/nodes.py +5 -5
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/objects.py +19 -20
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/parser.py +3 -3
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/pysbuiltins.py +9 -16
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/runner.py +10 -7
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/shell.py +83 -63
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/symtab.py +1 -1
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/utils/debug.py +24 -7
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/utils/decorators.py +3 -3
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/utils/generic.py +4 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/utils/similarity.py +3 -3
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/version.py +2 -2
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/ast/ast_dump.py +1 -1
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/ast/ast_unparse.py +2 -2
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/ast/ast_walk.py +2 -2
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/brainfuck.pys +23 -14
- pyscript_programming_language-1.12.1/pyscript/lib/getch/__init__.pys +5 -0
- pyscript_programming_language-1.12.1/pyscript/lib/getch/py_getch.py +18 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/parser.pys +1 -1
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1/pyscript_programming_language.egg-info}/PKG-INFO +5 -5
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript_programming_language.egg-info/SOURCES.txt +2 -1
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/setup.py +1 -1
- pyscript_programming_language-1.12.0/changelog.md +0 -21
- pyscript_programming_language-1.12.0/pyscript/lib/getch.pys +0 -28
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/MANIFEST.in +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/__init__.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/bases.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/buffer.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/checks.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/context.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/editor/__init__.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/position.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/results.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/token.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/utils/__init__.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/utils/ansi.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/utils/jsdict.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/utils/module.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/utils/path.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/utils/string.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/__hello__.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/ansi.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/ast/__init__.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/ast/ast_literal_eval.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/dis.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/explorer.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/fpstimer/__init__.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/fpstimer/py_fpstimer.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/inspect.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/jsdict.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/keyword.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/opcode.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/site.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/symtable.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/token.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/tokenize/__init__.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/lib/tokenize/tok_untokenize.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/other/.nomedia +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/other/PyScript.ico +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/other/copyright +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/other/credits +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/other/license +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/site-packages/this.pys +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/this.py +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript_programming_language.egg-info/requires.txt +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript_programming_language.egg-info/top_level.txt +0 -0
- {pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyscript-programming-language
|
|
3
|
-
Version: 1.12.
|
|
3
|
+
Version: 1.12.1
|
|
4
4
|
Summary: PyScript Programming Language
|
|
5
5
|
Home-page: https://azzammuhyala.github.io/pyscript
|
|
6
6
|
Author: azzammuhyala
|
|
@@ -115,10 +115,10 @@ Familiar? There it is!
|
|
|
115
115
|
| 5 | `time` | **required (library)** |
|
|
116
116
|
| 6 | `tty` | **required (library)** |
|
|
117
117
|
| 1 | `beartype` | **optional** |
|
|
118
|
-
| 2 | `
|
|
119
|
-
| 3 | `
|
|
120
|
-
| 4 | `
|
|
121
|
-
| 5 | `
|
|
118
|
+
| 2 | `prompt_toolkit` | **optional** |
|
|
119
|
+
| 3 | `pygments` | **optional** |
|
|
120
|
+
| 4 | `tkinter` | **optional** |
|
|
121
|
+
| 5 | `IPython` | **optional** |
|
|
122
122
|
|
|
123
123
|
### Status Explanation
|
|
124
124
|
- **required**: Required by PyScript entirely.
|
|
@@ -87,10 +87,10 @@ Familiar? There it is!
|
|
|
87
87
|
| 5 | `time` | **required (library)** |
|
|
88
88
|
| 6 | `tty` | **required (library)** |
|
|
89
89
|
| 1 | `beartype` | **optional** |
|
|
90
|
-
| 2 | `
|
|
91
|
-
| 3 | `
|
|
92
|
-
| 4 | `
|
|
93
|
-
| 5 | `
|
|
90
|
+
| 2 | `prompt_toolkit` | **optional** |
|
|
91
|
+
| 3 | `pygments` | **optional** |
|
|
92
|
+
| 4 | `tkinter` | **optional** |
|
|
93
|
+
| 5 | `IPython` | **optional** |
|
|
94
94
|
|
|
95
95
|
### Status Explanation
|
|
96
96
|
- **required**: Required by PyScript entirely.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Change Log
|
|
2
|
+
|
|
3
|
+
## [1.12.1] - 25/02/2026
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- Auto indentation.
|
|
7
|
+
- Token values for types `NUMBER` and `STRING` in Lexer with `parser_flags=LEXER_HIGHLIGHT` produce a `tuple` object
|
|
8
|
+
with the value or representation and a conversion function.
|
|
9
|
+
- The `NO_COLOR_PROMPT` and `NOTEBOOK` flags.
|
|
10
|
+
- The `sys.get_int_max_str_digits` function.
|
|
11
|
+
- _etc_.
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- **Fixed some bugs**.
|
|
15
|
+
- Fixed some spelling errors.
|
|
16
|
+
- _etc._
|
{pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/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.12.
|
|
7
|
+
version = "1.12.1"
|
|
8
8
|
description = "PyScript Programming Language"
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.10"
|
{pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/__init__.py
RENAMED
|
@@ -9,8 +9,8 @@ if __import__('sys').version_info < (3, 10):
|
|
|
9
9
|
from . import core
|
|
10
10
|
|
|
11
11
|
from .core.constants import (
|
|
12
|
-
DEFAULT, NO_COLOR, DEBUG, SILENT, RETURN_RESULT, DONT_SHOW_BANNER_ON_SHELL, CLASSIC_LINE_SHELL,
|
|
13
|
-
DICT_TO_JSDICT
|
|
12
|
+
DEFAULT, NO_COLOR, DEBUG, SILENT, RETURN_RESULT, DONT_SHOW_BANNER_ON_SHELL, CLASSIC_LINE_SHELL, NO_COLOR_PROMPT,
|
|
13
|
+
NOTEBOOK, LEXER_HIGHLIGHT, DICT_TO_JSDICT
|
|
14
14
|
)
|
|
15
15
|
from .core.cache import undefined
|
|
16
16
|
from .core.highlight import (
|
|
@@ -29,6 +29,8 @@ __all__ = (
|
|
|
29
29
|
'RETURN_RESULT',
|
|
30
30
|
'DONT_SHOW_BANNER_ON_SHELL',
|
|
31
31
|
'CLASSIC_LINE_SHELL',
|
|
32
|
+
'NO_COLOR_PROMPT',
|
|
33
|
+
'NOTEBOOK',
|
|
32
34
|
'LEXER_HIGHLIGHT',
|
|
33
35
|
'DICT_TO_JSDICT',
|
|
34
36
|
'HLFMT_HTML',
|
{pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/__main__.py
RENAMED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from .core.buffer import PysFileBuffer
|
|
2
2
|
from .core.cache import pys_sys, undefined
|
|
3
3
|
from .core.constants import (
|
|
4
|
-
ENV_PYSCRIPT_CLASSIC_LINE_SHELL, DEFAULT, DEBUG, NO_COLOR, DONT_SHOW_BANNER_ON_SHELL,
|
|
4
|
+
ENV_PYSCRIPT_NO_COLOR_PROMPT, ENV_PYSCRIPT_CLASSIC_LINE_SHELL, DEFAULT, DEBUG, NO_COLOR, DONT_SHOW_BANNER_ON_SHELL,
|
|
5
|
+
CLASSIC_LINE_SHELL, NO_COLOR_PROMPT, NOTEBOOK
|
|
5
6
|
)
|
|
6
7
|
from .core.editor.gui import PysGUIEditor, GUI_SUPPORT
|
|
7
8
|
from .core.editor.terminal import PysTerminalEditor, TERMINAL_SUPPORT
|
|
@@ -9,6 +10,8 @@ from .core.highlight import (
|
|
|
9
10
|
PYGMENTS, HLFMT_HTML, HLFMT_ANSI, HLFMT_BBCODE, pys_highlight, PygmentsPyScriptStyle, PygmentsPyScriptLexer
|
|
10
11
|
)
|
|
11
12
|
from .core.runner import _normalize_namespace, pys_runner, pys_shell
|
|
13
|
+
from .core.utils.debug import USE_NOTEBOOK
|
|
14
|
+
from .core.utils.generic import is_environ
|
|
12
15
|
from .core.utils.module import remove_python_path
|
|
13
16
|
from .core.utils.path import getcwd, normpath, get_name_from_path
|
|
14
17
|
from .core.version import __version__
|
|
@@ -30,7 +33,6 @@ if PYGMENTS:
|
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
from argparse import OPTIONAL, REMAINDER, ArgumentParser
|
|
33
|
-
from os import environ
|
|
34
36
|
|
|
35
37
|
import sys
|
|
36
38
|
|
|
@@ -42,16 +44,24 @@ FORMAT_HIGHLIGHT_MAP = {
|
|
|
42
44
|
|
|
43
45
|
EDITOR_MAP = {}
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
for supported, name, class_editor in [
|
|
48
|
+
(GUI_SUPPORT, 'gui', PysGUIEditor),
|
|
49
|
+
(TERMINAL_SUPPORT, 'terminal', PysTerminalEditor)
|
|
50
|
+
]:
|
|
51
|
+
if supported:
|
|
52
|
+
EDITOR_MAP[name] = class_editor
|
|
49
53
|
|
|
50
54
|
parser = ArgumentParser(
|
|
51
55
|
prog=f'{get_name_from_path(sys.executable)} -m pyscript',
|
|
52
56
|
description=f'PyScript Launcher for Python Version {".".join(map(str, sys.version_info))}'
|
|
53
57
|
)
|
|
54
58
|
|
|
59
|
+
parser.add_argument(
|
|
60
|
+
'-b', '--notebook',
|
|
61
|
+
action='store_true',
|
|
62
|
+
help="combination of -k and -p flags, suitable for notebook platforms such as IPython, Jupyter, Google Colab, etc"
|
|
63
|
+
)
|
|
64
|
+
|
|
55
65
|
parser.add_argument(
|
|
56
66
|
'-c', '--command',
|
|
57
67
|
type=str,
|
|
@@ -98,6 +108,12 @@ parser.add_argument(
|
|
|
98
108
|
help="Suppress colored output"
|
|
99
109
|
)
|
|
100
110
|
|
|
111
|
+
parser.add_argument(
|
|
112
|
+
'-p', '--no-color-prompt',
|
|
113
|
+
action='store_true',
|
|
114
|
+
help="Suppress colored prompt output"
|
|
115
|
+
)
|
|
116
|
+
|
|
101
117
|
parser.add_argument(
|
|
102
118
|
'-r', '--py-recursion',
|
|
103
119
|
type=int,
|
|
@@ -140,7 +156,7 @@ parser.add_argument(
|
|
|
140
156
|
parser.add_argument(
|
|
141
157
|
'arg',
|
|
142
158
|
nargs=REMAINDER,
|
|
143
|
-
help="Remaining arguments stored in
|
|
159
|
+
help="Remaining arguments stored in pys_sys.argv (sys.argv)"
|
|
144
160
|
)
|
|
145
161
|
|
|
146
162
|
def argument_error(argument, message):
|
|
@@ -184,14 +200,17 @@ if args.py_recursion is not None:
|
|
|
184
200
|
code = 0
|
|
185
201
|
flags = DEFAULT
|
|
186
202
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
203
|
+
for condition, flag in [
|
|
204
|
+
(args.notebook or USE_NOTEBOOK, NOTEBOOK),
|
|
205
|
+
(args.debug, DEBUG),
|
|
206
|
+
(args.classic_line_shell or is_environ(ENV_PYSCRIPT_CLASSIC_LINE_SHELL), CLASSIC_LINE_SHELL),
|
|
207
|
+
(args.no_color or is_environ('NO_COLOR'), NO_COLOR),
|
|
208
|
+
(args.no_color_prompt or is_environ(ENV_PYSCRIPT_NO_COLOR_PROMPT), NO_COLOR_PROMPT),
|
|
209
|
+
(args.q, DONT_SHOW_BANNER_ON_SHELL)
|
|
210
|
+
]:
|
|
211
|
+
if condition:
|
|
212
|
+
flags |= flag
|
|
213
|
+
|
|
195
214
|
if args.P:
|
|
196
215
|
for cwd in {'', '.', getcwd()}:
|
|
197
216
|
remove_python_path(cwd)
|
{pyscript_programming_language-1.12.0 → pyscript_programming_language-1.12.1}/pyscript/core/cache.py
RENAMED
|
@@ -18,6 +18,7 @@ pys_sys = ModuleType(
|
|
|
18
18
|
pys_sys.__running_shell__ = False
|
|
19
19
|
pys_sys.__running_breakpoint__ = False
|
|
20
20
|
pys_sys.argv = ['']
|
|
21
|
+
pys_sys.flags = 0
|
|
21
22
|
pys_sys.displayhook = print_display
|
|
22
23
|
pys_sys.excepthook = print_traceback
|
|
23
24
|
pys_sys.clearhook = clear_shell
|
|
@@ -42,7 +43,8 @@ pys_sys.getsizeof = sys.getsizeof
|
|
|
42
43
|
pys_sys.setrecursionlimit = sys.setrecursionlimit
|
|
43
44
|
|
|
44
45
|
# added in python>=3.10.7
|
|
45
|
-
if hasattr(sys, 'set_int_max_str_digits'):
|
|
46
|
+
if hasattr(sys, 'get_int_max_str_digits') and hasattr(sys, 'set_int_max_str_digits'):
|
|
47
|
+
pys_sys.get_int_max_str_digits = sys.get_int_max_str_digits
|
|
46
48
|
pys_sys.set_int_max_str_digits = sys.set_int_max_str_digits
|
|
47
49
|
|
|
48
50
|
pys_sys.path = [SITE_PACKAGES_PATH, LIBRARIES_PATH]
|
|
@@ -14,6 +14,7 @@ ENV_PYSCRIPT_NO_EXCEPTHOOK = 'PYSCRIPT_NO_EXCEPTHOOK'
|
|
|
14
14
|
ENV_PYSCRIPT_NO_GIL = 'PYSCRIPT_NO_GIL'
|
|
15
15
|
ENV_PYSCRIPT_NO_READLINE = 'PYSCRIPT_NO_READLINE'
|
|
16
16
|
ENV_PYSCRIPT_NO_TYPECHECK = 'PYSCRIPT_NO_TYPECHECK'
|
|
17
|
+
ENV_PYSCRIPT_NO_COLOR_PROMPT = 'PYSCRIPT_NO_COLOR_PROMPT'
|
|
17
18
|
ENV_PYSCRIPT_MAXIMUM_TRACEBACK_LINE = 'PYSCRIPT_MAXIMUM_TRACEBACK_LINE'
|
|
18
19
|
ENV_PYSCRIPT_CLASSIC_LINE_SHELL = 'PYSCRIPT_CLASSIC_LINE_SHELL'
|
|
19
20
|
|
|
@@ -117,6 +118,8 @@ SILENT = 1 << 2
|
|
|
117
118
|
RETURN_RESULT = 1 << 3
|
|
118
119
|
DONT_SHOW_BANNER_ON_SHELL = 1 << 4
|
|
119
120
|
CLASSIC_LINE_SHELL = 1 << 5
|
|
121
|
+
NO_COLOR_PROMPT = 1 << 6
|
|
122
|
+
NOTEBOOK = CLASSIC_LINE_SHELL | NO_COLOR_PROMPT
|
|
120
123
|
|
|
121
124
|
# parser flags
|
|
122
125
|
LEXER_HIGHLIGHT = 1 << 0
|
|
@@ -8,8 +8,6 @@ from os.path import basename
|
|
|
8
8
|
|
|
9
9
|
class PysEditor(Pys):
|
|
10
10
|
|
|
11
|
-
__slots__ = ('file', 'used', 'modified', 'wrapped', 'basename')
|
|
12
|
-
|
|
13
11
|
@typechecked
|
|
14
12
|
def __init__(self, file: PysFileBuffer) -> None:
|
|
15
13
|
self.file = file
|
|
@@ -24,10 +22,15 @@ class PysEditor(Pys):
|
|
|
24
22
|
|
|
25
23
|
def save(self, text) -> None:
|
|
26
24
|
text = normstr(text)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
try:
|
|
26
|
+
print('saved')
|
|
27
|
+
with open(self.file.name, 'w', encoding='utf-8') as file:
|
|
28
|
+
file.write(text)
|
|
29
|
+
setimuattr(self.file, 'text', text)
|
|
30
|
+
except:
|
|
31
|
+
pass
|
|
32
|
+
else:
|
|
33
|
+
self.modified = False
|
|
31
34
|
|
|
32
35
|
def run(self) -> None:
|
|
33
36
|
if self.used:
|
|
@@ -20,13 +20,8 @@ try:
|
|
|
20
20
|
pass
|
|
21
21
|
|
|
22
22
|
self.lexer = PygmentsPyScriptLexer()
|
|
23
|
-
self.style = PygmentsPyScriptStyle
|
|
24
|
-
|
|
25
23
|
self.font = Font(family='Consolas', size=10)
|
|
26
|
-
|
|
27
24
|
self.scrollbar = Scrollbar(self)
|
|
28
|
-
self.scrollbar.pack_configure(side='right', fill='y')
|
|
29
|
-
|
|
30
25
|
self.text = Text(
|
|
31
26
|
self,
|
|
32
27
|
undo=True,
|
|
@@ -40,12 +35,15 @@ try:
|
|
|
40
35
|
)
|
|
41
36
|
|
|
42
37
|
self.text.pack_configure(side='left', expand=True, fill='both')
|
|
43
|
-
self.scrollbar.configure(command=self.text.yview)
|
|
44
38
|
|
|
45
39
|
self.text.insert('1.0', self.file.text)
|
|
46
40
|
self.text.edit_modified(False)
|
|
47
41
|
|
|
48
42
|
self.text.bind('<<Modified>>', self.on_modified)
|
|
43
|
+
self.text.bind('<Return>', self.on_enter)
|
|
44
|
+
|
|
45
|
+
self.scrollbar.pack_configure(side='right', fill='y')
|
|
46
|
+
self.scrollbar.configure(command=self.text.yview)
|
|
49
47
|
|
|
50
48
|
self.bind_all('<Control-S>', self.on_save)
|
|
51
49
|
self.bind_all('<Control-s>', self.on_save)
|
|
@@ -59,15 +57,15 @@ try:
|
|
|
59
57
|
self.protocol('WM_DELETE_WINDOW', self.on_close)
|
|
60
58
|
|
|
61
59
|
self.setup_tags()
|
|
62
|
-
self.update()
|
|
63
60
|
|
|
64
61
|
def run(self) -> None:
|
|
65
62
|
PysEditor.run(self)
|
|
63
|
+
self.update()
|
|
66
64
|
Tk.mainloop(self)
|
|
67
65
|
|
|
68
66
|
def setup_tags(self):
|
|
69
67
|
tag_configure = self.text.tag_configure
|
|
70
|
-
for token, style in
|
|
68
|
+
for token, style in PygmentsPyScriptStyle.list_styles():
|
|
71
69
|
if color := style['color']:
|
|
72
70
|
tag_configure(str(token), foreground=f'#{color}')
|
|
73
71
|
|
|
@@ -129,9 +127,15 @@ try:
|
|
|
129
127
|
self.text.configure(wrap='char' if self.wrapped else 'none')
|
|
130
128
|
return 'break'
|
|
131
129
|
|
|
130
|
+
def on_enter(self, event=None):
|
|
131
|
+
text = self.text
|
|
132
|
+
line = text.get('insert linestart', 'insert lineend')
|
|
133
|
+
text.insert('insert', '\n' + line[:len(line) - len(line.lstrip())])
|
|
134
|
+
return 'break'
|
|
135
|
+
|
|
132
136
|
GUI_SUPPORT = True
|
|
133
137
|
|
|
134
|
-
except
|
|
138
|
+
except BaseException as e:
|
|
135
139
|
_error = e
|
|
136
140
|
|
|
137
141
|
class PysGUIEditor(PysEditor):
|
|
@@ -8,7 +8,6 @@ try:
|
|
|
8
8
|
from prompt_toolkit.filters import Condition
|
|
9
9
|
from prompt_toolkit.formatted_text import ANSI
|
|
10
10
|
from prompt_toolkit.key_binding import KeyBindings
|
|
11
|
-
from prompt_toolkit.keys import Keys
|
|
12
11
|
from prompt_toolkit.layout import Layout, HSplit, Window, Float, FloatContainer
|
|
13
12
|
from prompt_toolkit.layout.containers import ConditionalContainer
|
|
14
13
|
from prompt_toolkit.layout.controls import FormattedTextControl
|
|
@@ -23,7 +22,6 @@ try:
|
|
|
23
22
|
PysEditor.__init__(self, file)
|
|
24
23
|
|
|
25
24
|
self.show_exit_window = False
|
|
26
|
-
self.overwrite = False
|
|
27
25
|
|
|
28
26
|
on_edit = Condition(lambda: not self.show_exit_window)
|
|
29
27
|
on_exit = Condition(lambda: self.show_exit_window)
|
|
@@ -53,39 +51,45 @@ try:
|
|
|
53
51
|
filter=on_exit,
|
|
54
52
|
)
|
|
55
53
|
|
|
56
|
-
|
|
54
|
+
key_bindings = KeyBindings()
|
|
57
55
|
|
|
58
|
-
@
|
|
56
|
+
@key_bindings.add('tab', filter=on_edit, eager=True)
|
|
59
57
|
def _(event):
|
|
60
58
|
self.text.buffer.insert_text('\t')
|
|
61
59
|
|
|
62
|
-
@
|
|
63
|
-
def _(event):
|
|
64
|
-
self.overwrite = not self.overwrite
|
|
65
|
-
|
|
66
|
-
@self.key_bindings.add('pageup', filter=on_edit, eager=True)
|
|
60
|
+
@key_bindings.add('pageup', filter=on_edit, eager=True)
|
|
67
61
|
def _(event):
|
|
68
62
|
self.current_buffer.cursor_position = 0
|
|
69
63
|
|
|
70
|
-
@
|
|
64
|
+
@key_bindings.add('pagedown', filter=on_edit, eager=True)
|
|
71
65
|
def _(event):
|
|
72
66
|
buffer = self.current_buffer
|
|
73
67
|
buffer.cursor_position = len(buffer.text)
|
|
74
68
|
|
|
75
|
-
@
|
|
69
|
+
@key_bindings.add('enter', filter=on_edit, eager=True)
|
|
70
|
+
def _(event):
|
|
71
|
+
buffer = self.current_buffer
|
|
72
|
+
line = buffer.document.current_line_before_cursor
|
|
73
|
+
buffer.insert_text('\n' + line[:len(line) - len(line.lstrip())])
|
|
74
|
+
|
|
75
|
+
@key_bindings.add('c-w', filter=on_edit, eager=True)
|
|
76
76
|
def _(event):
|
|
77
77
|
self.wrapped = not self.wrapped
|
|
78
78
|
|
|
79
|
-
@
|
|
79
|
+
@key_bindings.add('c-z', filter=on_edit, eager=True)
|
|
80
80
|
def _(event):
|
|
81
81
|
self.current_buffer.undo()
|
|
82
82
|
|
|
83
|
-
@
|
|
83
|
+
@key_bindings.add('c-y', filter=on_edit, eager=True)
|
|
84
|
+
def _(event):
|
|
85
|
+
self.current_buffer.redo()
|
|
86
|
+
|
|
87
|
+
@key_bindings.add('c-s', filter=on_edit, eager=True)
|
|
84
88
|
def _(event):
|
|
85
89
|
self.save(self.text.text)
|
|
86
90
|
|
|
87
|
-
@
|
|
88
|
-
@
|
|
91
|
+
@key_bindings.add('c-x', filter=on_edit, eager=True)
|
|
92
|
+
@key_bindings.add('escape', filter=on_edit, eager=True)
|
|
89
93
|
def _(event):
|
|
90
94
|
if self.modified:
|
|
91
95
|
self.show_exit_window = True
|
|
@@ -93,32 +97,22 @@ try:
|
|
|
93
97
|
else:
|
|
94
98
|
self.exit()
|
|
95
99
|
|
|
96
|
-
@
|
|
100
|
+
@key_bindings.add('y', filter=on_exit)
|
|
97
101
|
def _(event):
|
|
98
102
|
self.save(self.text.text)
|
|
99
103
|
self.show_exit_window = False
|
|
100
104
|
self.exit()
|
|
101
105
|
|
|
102
|
-
@
|
|
106
|
+
@key_bindings.add('n', filter=on_exit)
|
|
103
107
|
def _(event):
|
|
104
108
|
self.show_exit_window = False
|
|
105
109
|
self.exit()
|
|
106
110
|
|
|
107
|
-
@
|
|
111
|
+
@key_bindings.add('c', filter=on_exit)
|
|
108
112
|
def _(event):
|
|
109
113
|
self.show_exit_window = False
|
|
110
114
|
self.layout.focus(self.text)
|
|
111
115
|
|
|
112
|
-
@self.key_bindings.add(Keys.Any, filter=on_edit)
|
|
113
|
-
def _(event):
|
|
114
|
-
buffer = self.current_buffer
|
|
115
|
-
text = event.data
|
|
116
|
-
if self.overwrite and buffer.cursor_position < len(buffer.text):
|
|
117
|
-
buffer.delete(1)
|
|
118
|
-
buffer.insert_text(text)
|
|
119
|
-
else:
|
|
120
|
-
buffer.insert_text(text)
|
|
121
|
-
|
|
122
116
|
self.root = FloatContainer(
|
|
123
117
|
content=HSplit(
|
|
124
118
|
[
|
|
@@ -135,14 +129,13 @@ try:
|
|
|
135
129
|
]
|
|
136
130
|
)
|
|
137
131
|
|
|
138
|
-
self.text.text = self.file.text
|
|
139
132
|
self.text.buffer.on_text_changed += self.on_change
|
|
140
133
|
|
|
141
134
|
Application.__init__(
|
|
142
135
|
self,
|
|
143
136
|
layout=Layout(self.root),
|
|
144
137
|
style=style_from_pygments_cls(PygmentsPyScriptStyle),
|
|
145
|
-
key_bindings=
|
|
138
|
+
key_bindings=key_bindings,
|
|
146
139
|
full_screen=True,
|
|
147
140
|
mouse_support=True,
|
|
148
141
|
paste_mode=True
|
|
@@ -150,6 +143,7 @@ try:
|
|
|
150
143
|
|
|
151
144
|
def run(self) -> None:
|
|
152
145
|
PysEditor.run(self)
|
|
146
|
+
self.text.text = self.file.text
|
|
153
147
|
Application.run(self)
|
|
154
148
|
|
|
155
149
|
def on_change(self, buffer):
|
|
@@ -165,7 +159,7 @@ try:
|
|
|
165
159
|
|
|
166
160
|
TERMINAL_SUPPORT = True
|
|
167
161
|
|
|
168
|
-
except
|
|
162
|
+
except BaseException as e:
|
|
169
163
|
_error = e
|
|
170
164
|
|
|
171
165
|
class PysTerminalEditor(PysEditor):
|
|
@@ -14,22 +14,22 @@ if TYPE_CHECKING:
|
|
|
14
14
|
@immutable
|
|
15
15
|
class PysTraceback(Pys):
|
|
16
16
|
|
|
17
|
-
__slots__ = ('exception', 'context', 'position', '
|
|
17
|
+
__slots__ = ('exception', 'context', 'position', 'primary', 'implicit')
|
|
18
18
|
|
|
19
19
|
def __init__(
|
|
20
20
|
self,
|
|
21
21
|
exception: BaseException | type[BaseException],
|
|
22
22
|
context: 'PysContext',
|
|
23
23
|
position: 'PysPosition',
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
primary: Optional['PysTraceback'] = None,
|
|
25
|
+
implicit: bool = False
|
|
26
26
|
) -> None:
|
|
27
27
|
|
|
28
28
|
setimuattr(self, 'exception', exception)
|
|
29
29
|
setimuattr(self, 'context', context)
|
|
30
30
|
setimuattr(self, 'position', position)
|
|
31
|
-
setimuattr(self, '
|
|
32
|
-
setimuattr(self, '
|
|
31
|
+
setimuattr(self, 'primary', primary)
|
|
32
|
+
setimuattr(self, 'implicit', implicit)
|
|
33
33
|
|
|
34
34
|
def __repr__(self) -> str:
|
|
35
35
|
return f'<traceback of exception {self.exception!r}>'
|
|
@@ -97,14 +97,13 @@ class PysTraceback(Pys):
|
|
|
97
97
|
result += f': {magenta}{message}{reset}'
|
|
98
98
|
|
|
99
99
|
return (
|
|
100
|
-
self.cause.string_traceback() +
|
|
101
100
|
(
|
|
102
|
-
'\n\
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
result
|
|
101
|
+
f'{self.primary.string_traceback()}\n\n' + (
|
|
102
|
+
"The above exception was the direct cause of the following exception"
|
|
103
|
+
if self.implicit else
|
|
104
|
+
"During handling of the above exception, another exception occurred"
|
|
105
|
+
) + f':\n\n{result}'
|
|
106
|
+
) if self.primary else result
|
|
108
107
|
)
|
|
109
108
|
|
|
110
109
|
class PysSignal(Pys, BaseException):
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
from .cache import pys_sys
|
|
2
2
|
from .constants import ENV_PYSCRIPT_NO_GIL
|
|
3
3
|
from .objects import PysFunction
|
|
4
|
+
from .utils.generic import is_environ
|
|
4
5
|
|
|
5
|
-
from os import environ
|
|
6
6
|
from types import MethodType
|
|
7
7
|
|
|
8
8
|
wrapper_function = (MethodType, classmethod, staticmethod)
|
|
9
9
|
|
|
10
|
-
if
|
|
10
|
+
if not is_environ(ENV_PYSCRIPT_NO_GIL):
|
|
11
11
|
from threading import RLock
|
|
12
12
|
|
|
13
13
|
lock = RLock()
|
|
@@ -351,17 +351,17 @@ try:
|
|
|
351
351
|
tokens = PygmentsPyScriptLexer.tokens.copy()
|
|
352
352
|
tokens['root'] = [
|
|
353
353
|
# Shell prompts
|
|
354
|
-
(r'
|
|
354
|
+
(r'\A/(clear|clean|exit)\z', Generic.Prompt)
|
|
355
355
|
] + tokens['root']
|
|
356
356
|
|
|
357
|
-
PYGMENTS = True
|
|
358
|
-
|
|
359
357
|
del (
|
|
360
358
|
_set_constant_keywords, _unicode_name, _newlines, _integer, _scientific, _imaginary, _dollar,
|
|
361
359
|
_raw_string_prefixes, _string_or_bytes_prefixes,
|
|
362
360
|
)
|
|
363
361
|
|
|
364
|
-
|
|
362
|
+
PYGMENTS = True
|
|
363
|
+
|
|
364
|
+
except BaseException as e:
|
|
365
365
|
_error = e
|
|
366
366
|
|
|
367
367
|
class PygmentsPyScriptStyle(Pys):
|