pyscript-programming-language 1.12.7__tar.gz → 1.12.9__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.
Files changed (89) hide show
  1. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/PKG-INFO +7 -6
  2. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/README.md +6 -5
  3. pyscript_programming_language-1.12.9/changelog.md +11 -0
  4. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyproject.toml +1 -1
  5. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/__main__.py +3 -2
  6. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/analyzer.py +7 -5
  7. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/editor/bases.py +2 -1
  8. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/editor/gui.py +34 -30
  9. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/editor/terminal.py +59 -19
  10. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/exceptions.py +2 -1
  11. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/handlers.py +11 -4
  12. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/interpreter.py +117 -65
  13. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/lexer.py +2 -1
  14. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/nodes.py +1 -1
  15. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/objects.py +11 -6
  16. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/parser.py +13 -11
  17. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/pysbuiltins.py +18 -14
  18. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/results.py +8 -4
  19. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/runner.py +12 -9
  20. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/shell.py +47 -16
  21. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/symtab.py +9 -3
  22. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/utils/ansi.py +2 -1
  23. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/utils/debug.py +6 -6
  24. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/utils/generic.py +2 -1
  25. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/utils/similarity.py +3 -2
  26. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/utils/string.py +2 -1
  27. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/version.py +5 -8
  28. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/__hello__.pys +1 -1
  29. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/ast/ast_literal_eval.py +12 -7
  30. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/ast/ast_unparse.py +31 -20
  31. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/ast/ast_walk.py +4 -1
  32. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/brainfuck.pys +3 -3
  33. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/history.pys +5 -7
  34. pyscript_programming_language-1.12.9/pyscript/lib/keyword.pys +2 -0
  35. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/parser.pys +1 -1
  36. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/tokenize/tok_untokenize.py +23 -1
  37. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/site-packages/this.pys +1 -1
  38. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript_programming_language.egg-info/PKG-INFO +7 -6
  39. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/setup.py +1 -1
  40. pyscript_programming_language-1.12.7/changelog.md +0 -12
  41. pyscript_programming_language-1.12.7/pyscript/lib/keyword.pys +0 -2
  42. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/MANIFEST.in +0 -0
  43. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/__init__.py +0 -0
  44. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/__init__.pyi +0 -0
  45. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/__init__.py +0 -0
  46. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/bases.py +0 -0
  47. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/buffer.py +0 -0
  48. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/cache.py +0 -0
  49. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/checks.py +0 -0
  50. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/constants.py +0 -0
  51. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/context.py +0 -0
  52. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/editor/__init__.py +0 -0
  53. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/highlight.py +0 -0
  54. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/mapping.py +0 -0
  55. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/position.py +0 -0
  56. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/token.py +0 -0
  57. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/utils/__init__.py +0 -0
  58. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/utils/decorators.py +0 -0
  59. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/utils/jsdict.py +0 -0
  60. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/utils/module.py +0 -0
  61. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/core/utils/path.py +0 -0
  62. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/ansi.pys +0 -0
  63. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/ast/__init__.pys +0 -0
  64. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/ast/ast_dump.py +0 -0
  65. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/dis.pys +0 -0
  66. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/explorer.pys +0 -0
  67. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/fpstimer/__init__.pys +0 -0
  68. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/fpstimer/py_fpstimer.py +0 -0
  69. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/getch/__init__.pys +0 -0
  70. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/getch/py_getch.py +0 -0
  71. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/inspect.pys +0 -0
  72. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/jsdict.pys +0 -0
  73. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/opcode.pys +0 -0
  74. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/pdisplay.pys +0 -0
  75. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/site.pys +0 -0
  76. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/symtable.pys +0 -0
  77. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/token.pys +0 -0
  78. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/lib/tokenize/__init__.pys +0 -0
  79. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/other/.nomedia +0 -0
  80. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/other/PyScript.ico +0 -0
  81. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/other/copyright +0 -0
  82. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/other/credits +0 -0
  83. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/other/license +0 -0
  84. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript/this.py +0 -0
  85. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript_programming_language.egg-info/SOURCES.txt +0 -0
  86. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
  87. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript_programming_language.egg-info/requires.txt +0 -0
  88. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/pyscript_programming_language.egg-info/top_level.txt +0 -0
  89. {pyscript_programming_language-1.12.7 → pyscript_programming_language-1.12.9}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyscript-programming-language
3
- Version: 1.12.7
3
+ Version: 1.12.9
4
4
  Summary: PyScript Programming Language
5
5
  Home-page: https://azzammuhyala.github.io/pyscript
6
6
  Author: azzammuhyala
@@ -103,11 +103,12 @@ Familiar? There it is!
103
103
  | 12 | `operator` | **required** |
104
104
  | 13 | `os` | **required** |
105
105
  | 14 | `re` | **required** |
106
- | 15 | `sys` | **required** |
107
- | 16 | `threading` | **required** |
108
- | 17 | `types` | **required** |
109
- | 18 | `typing` | **required** |
110
- | 19 | `unicodedata` | **required** |
106
+ | 15 | `subprocess` | **required** |
107
+ | 16 | `sys` | **required** |
108
+ | 17 | `threading` | **required** |
109
+ | 18 | `types` | **required** |
110
+ | 19 | `typing` | **required** |
111
+ | 20 | `unicodedata` | **required** |
111
112
  | 1 | `ast` | **required (library)** |
112
113
  | 2 | `msvcrt` | **required (library)** |
113
114
  | 3 | `pprint` | **required (library)** |
@@ -75,11 +75,12 @@ Familiar? There it is!
75
75
  | 12 | `operator` | **required** |
76
76
  | 13 | `os` | **required** |
77
77
  | 14 | `re` | **required** |
78
- | 15 | `sys` | **required** |
79
- | 16 | `threading` | **required** |
80
- | 17 | `types` | **required** |
81
- | 18 | `typing` | **required** |
82
- | 19 | `unicodedata` | **required** |
78
+ | 15 | `subprocess` | **required** |
79
+ | 16 | `sys` | **required** |
80
+ | 17 | `threading` | **required** |
81
+ | 18 | `types` | **required** |
82
+ | 19 | `typing` | **required** |
83
+ | 20 | `unicodedata` | **required** |
83
84
  | 1 | `ast` | **required (library)** |
84
85
  | 2 | `msvcrt` | **required (library)** |
85
86
  | 3 | `pprint` | **required (library)** |
@@ -0,0 +1,11 @@
1
+ # Change Log
2
+
3
+ ## [1.12.9] - 23/03/2026
4
+
5
+ ### Added
6
+ - The `repeat-until` statement supports with no body or loop statement code.
7
+ - Colorless support on PyScript's editor.
8
+
9
+ ### Fixed
10
+ - **Fixed some bugs**.
11
+ - _etc._
@@ -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"
7
+ version = "1.12.9"
8
8
  description = "PyScript Programming Language"
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  requires-python = ">=3.10"
@@ -236,7 +236,7 @@ try:
236
236
  )
237
237
 
238
238
  del (
239
- ENV_PYSCRIPT_NO_COLOR_PROMPT, ENV_PYSCRIPT_CLASSIC_LINE_SHELL, DEFAULT, DEBUG, NO_COLOR, CLASSIC_LINE_SHELL,
239
+ ENV_PYSCRIPT_NO_COLOR_PROMPT, ENV_PYSCRIPT_CLASSIC_LINE_SHELL, DEFAULT, DEBUG, CLASSIC_LINE_SHELL,
240
240
  NO_COLOR_PROMPT, NOTEBOOK, GUI_SUPPORT, TERMINAL_SUPPORT, PYGMENTS, HLFMT_ANSI, HLFMT_HTML, HLFMT_BBCODE,
241
241
  USE_NOTEBOOK, OPTIONAL, REMAINDER, file_idx, end_idx, end_com, arg_com, com_idx, arg, pys_sys, __version__,
242
242
  is_environ, remove_python_path, getcwd, get_name_from_path, PysGUIEditor, PysTerminalEditor, ArgumentParser
@@ -275,7 +275,7 @@ if args.file is not None:
275
275
 
276
276
  if EDITOR_MAP and args.editor:
277
277
  try:
278
- EDITOR_MAP[args.editor](file).run()
278
+ EDITOR_MAP[args.editor](file=file, colored=not (flags & NO_COLOR)).run()
279
279
  except BaseException as e:
280
280
  argument_error('-e/--editor', e)
281
281
 
@@ -354,4 +354,5 @@ else:
354
354
  flags=flags
355
355
  )
356
356
 
357
+ # goodbye :>
357
358
  sys.exit(code)
@@ -319,13 +319,15 @@ class PysAnalyzer(Pys):
319
319
  self.visit(node.else_body)
320
320
 
321
321
  def visit_RepeatNode(self, node: PysRepeatNode) -> None:
322
- self.in_loop += 1
323
322
 
324
- self.visit(node.body)
325
- if self.error:
326
- return
323
+ if node.body:
324
+ self.in_loop += 1
327
325
 
328
- self.in_loop -= 1
326
+ self.visit(node.body)
327
+ if self.error:
328
+ return
329
+
330
+ self.in_loop -= 1
329
331
 
330
332
  self.visit(node.condition)
331
333
  if self.error:
@@ -9,8 +9,9 @@ import os
9
9
  class PysEditor(Pys):
10
10
 
11
11
  @typechecked
12
- def __init__(self, file: PysFileBuffer) -> None:
12
+ def __init__(self, file: PysFileBuffer, colored: bool = True) -> None:
13
13
  self.file = file
14
+ self.colored = bool(colored)
14
15
  self.used = False
15
16
  self.modified = False
16
17
  self.wrapped = True
@@ -10,37 +10,10 @@ try:
10
10
 
11
11
  class PysGUIEditor(PysEditor, Tk):
12
12
 
13
- def __init__(self, file: PysFileBuffer) -> None:
14
- PysEditor.__init__(self, file)
13
+ def __init__(self, file: PysFileBuffer, colored: bool = True) -> None:
14
+ PysEditor.__init__(self, file, colored)
15
15
  Tk.__init__(self)
16
16
 
17
- def setup_tags():
18
- tag_configure = self.text.tag_configure
19
- for token, style in PygmentsPyScriptStyle.list_styles():
20
- if color := style['color']:
21
- tag_configure(str(token), foreground=f'#{color}')
22
-
23
- def update():
24
- self.title(f'PyScript {__version__} - {self.basename}{"*" if self.modified else ""}')
25
-
26
- index = '1.0'
27
-
28
- text = self.text
29
- text_tag_add = text.tag_add
30
- text_tag_remove = text.tag_remove
31
- text_index = text.index
32
- get_length = len
33
- to_string = str
34
-
35
- for tag in text.tag_names():
36
- if tag != 'sel':
37
- text_tag_remove(tag, '1.0', 'end')
38
-
39
- for type, value in self.lexer.get_tokens(text.get('1.0', 'end')):
40
- end_index = text_index(f'{index} + {get_length(value)} chars')
41
- text_tag_add(to_string(type), index, end_index)
42
- index = end_index
43
-
44
17
  def on_save(event=None):
45
18
  self.save(self.text.get('1.0', 'end'))
46
19
  update()
@@ -140,7 +113,38 @@ try:
140
113
 
141
114
  self.wm_protocol('WM_DELETE_WINDOW', on_close)
142
115
 
143
- setup_tags()
116
+ if colored:
117
+ tag_configure = self.text.tag_configure
118
+ for token, style in PygmentsPyScriptStyle.list_styles():
119
+ color = style['color']
120
+ if color:
121
+ tag_configure(str(token), foreground=f'#{color}')
122
+
123
+ def update():
124
+ self.title(f'PyScript {__version__} - {self.basename}{"*" if self.modified else ""}')
125
+
126
+ index = '1.0'
127
+
128
+ text = self.text
129
+ text_tag_add = text.tag_add
130
+ text_tag_remove = text.tag_remove
131
+ text_index = text.index
132
+ get_length = len
133
+ to_string = str
134
+
135
+ for tag in text.tag_names():
136
+ if tag != 'sel':
137
+ text_tag_remove(tag, '1.0', 'end')
138
+
139
+ for type, value in self.lexer.get_tokens(text.get('1.0', 'end')):
140
+ end_index = text_index(f'{index} + {get_length(value)} chars')
141
+ text_tag_add(to_string(type), index, end_index)
142
+ index = end_index
143
+
144
+ else:
145
+ def update():
146
+ self.title(f'PyScript {__version__} - {self.basename}{"*" if self.modified else ""}')
147
+
144
148
  update()
145
149
 
146
150
  def run(self) -> None:
@@ -1,6 +1,6 @@
1
1
  from .bases import PysEditor
2
2
  from ..buffer import PysFileBuffer
3
- from ..highlight import PygmentsPyScriptStyle, PygmentsPyScriptLexer
3
+ from ..highlight import PYGMENTS, PygmentsPyScriptStyle, PygmentsPyScriptLexer
4
4
  from ..version import __version__
5
5
 
6
6
  try:
@@ -13,13 +13,14 @@ try:
13
13
  from prompt_toolkit.layout.controls import FormattedTextControl
14
14
  from prompt_toolkit.layout.processors import TabsProcessor
15
15
  from prompt_toolkit.lexers import PygmentsLexer
16
+ from prompt_toolkit.output.color_depth import ColorDepth
16
17
  from prompt_toolkit.styles.pygments import style_from_pygments_cls
17
18
  from prompt_toolkit.widgets import TextArea
18
19
 
19
20
  class PysTerminalEditor(PysEditor, Application):
20
21
 
21
- def __init__(self, file: PysFileBuffer) -> None:
22
- PysEditor.__init__(self, file)
22
+ def __init__(self, file: PysFileBuffer, colored: bool = True) -> None:
23
+ PysEditor.__init__(self, file, colored)
23
24
 
24
25
  self.show_exit_window = False
25
26
 
@@ -30,20 +31,63 @@ try:
30
31
  def on_change(buffer):
31
32
  self.modified = True
32
33
 
33
- def create_title():
34
- columns = self.output.get_size().columns
35
- file = f'{self.basename}{"*" if self.modified else ""}'
36
- title = f' PyScript {__version__} - {file} '
37
- if len(title) > columns:
38
- title = file
39
- return ANSI(f'\x1b[7m{title}{" " * max(0, columns - len(title))}\x1b[0m')
34
+ text_other_keyword = {}
35
+ close_window_keyword = {}
36
+ app_other_keyword = {}
37
+
38
+ if colored:
39
+
40
+ if PYGMENTS:
41
+ text_other_keyword.update({
42
+ 'lexer': PygmentsLexer(PygmentsPyScriptLexer),
43
+ })
44
+ app_other_keyword.update({
45
+ 'style': style_from_pygments_cls(PygmentsPyScriptStyle)
46
+ })
47
+
48
+ close_window_keyword.update({
49
+ 'content': FormattedTextControl(
50
+ " File has been modified. Save before exit? \n"
51
+ " (Y)es / (N)o / (C)ancel "
52
+ ),
53
+ 'height': 2,
54
+ 'style': 'reverse'
55
+ })
56
+
57
+ def create_title():
58
+ columns = self.output.get_size().columns
59
+ file = self.basename + ('*' if self.modified else '')
60
+ title = f' PyScript {__version__} - {file} '
61
+ if len(title) > columns:
62
+ title = file
63
+ return ANSI(f'\x1b[7m{title}{" " * max(0, columns - len(title))}\x1b[0m')
64
+
65
+ else:
66
+ app_other_keyword.update({
67
+ 'color_depth': ColorDepth.DEPTH_1_BIT
68
+ })
69
+ close_window_keyword.update({
70
+ 'content': FormattedTextControl(
71
+ "[File has been modified. Save before exit?]\n"
72
+ "[ (Y)es / (N)o / (C)ancel ]"
73
+ ),
74
+ 'height': 2
75
+ })
76
+
77
+ def create_title():
78
+ columns = self.output.get_size().columns
79
+ file = self.basename + ('*' if self.modified else '')
80
+ title = f' [PyScript {__version__} - {file}] '
81
+ if len(title) > columns:
82
+ title = file
83
+ return title + ' ' * max(0, columns - len(title))
40
84
 
41
85
  self.text = TextArea(
42
86
  multiline=True,
43
87
  scrollbar=True,
44
88
  wrap_lines=on_wrap,
45
- lexer=PygmentsLexer(PygmentsPyScriptLexer),
46
- input_processors=[TabsProcessor(tabstop=4)]
89
+ input_processors=[TabsProcessor(tabstop=4)],
90
+ **text_other_keyword
47
91
  )
48
92
 
49
93
  self.title = Window(
@@ -51,11 +95,7 @@ try:
51
95
  height=1
52
96
  )
53
97
 
54
- self.close_window = Window(
55
- content=FormattedTextControl("File has been modified. Save before exit?\n(Y)es / (N)o / (C)ancel"),
56
- height=2,
57
- style='reverse'
58
- )
98
+ self.close_window = Window(**close_window_keyword)
59
99
 
60
100
  self.exit_container = ConditionalContainer(
61
101
  content=self.close_window,
@@ -148,11 +188,11 @@ try:
148
188
  Application.__init__(
149
189
  self,
150
190
  layout=Layout(self.root),
151
- style=style_from_pygments_cls(PygmentsPyScriptStyle),
152
191
  key_bindings=key_bindings,
153
192
  full_screen=True,
154
193
  mouse_support=True,
155
- paste_mode=True
194
+ paste_mode=True,
195
+ **app_other_keyword
156
196
  )
157
197
 
158
198
  def run(self) -> None:
@@ -41,8 +41,9 @@ class PysTraceback(Pys):
41
41
 
42
42
  context = self.context
43
43
  position = self.position
44
+ colored = not (context.flags & NO_COLOR)
44
45
 
45
- if colored := not (context.flags & NO_COLOR):
46
+ if colored:
46
47
  reset = GET_ACOLORS('reset')
47
48
  magenta = GET_ACOLORS('magenta')
48
49
  bmagenta = GET_ACOLORS('bold-magenta')
@@ -12,12 +12,14 @@ wrapper_function = (MethodType, classmethod, staticmethod)
12
12
 
13
13
  if not is_environ(ENV_PYSCRIPT_NO_GIL):
14
14
  from threading import RLock
15
+
15
16
  gil_lock = RLock()
16
17
 
17
18
  def handle_call(object: Any, context: PysContext, position: PysPosition) -> None:
18
19
  with gil_lock:
20
+ ins = isinstance
19
21
 
20
- if (ins := isinstance)(object, PysFunction):
22
+ if ins(object, PysFunction):
21
23
  code = object.__code__
22
24
  code.context = context
23
25
  code.position = position
@@ -26,7 +28,9 @@ if not is_environ(ENV_PYSCRIPT_NO_GIL):
26
28
  handle_call(object.__func__, context, position)
27
29
 
28
30
  elif ins(object, type):
29
- method = (gt := getattr)(object, '__new__', None)
31
+ gt = getattr
32
+
33
+ method = gt(object, '__new__', None)
30
34
  if method is not None:
31
35
  handle_call(method, context, position)
32
36
 
@@ -38,8 +42,9 @@ if not is_environ(ENV_PYSCRIPT_NO_GIL):
38
42
  else:
39
43
 
40
44
  def handle_call(object: Any, context: PysContext, position: PysPosition) -> None:
45
+ ins = isinstance
41
46
 
42
- if (ins := isinstance)(object, PysFunction):
47
+ if ins(object, PysFunction):
43
48
  code = object.__code__
44
49
  code.context = context
45
50
  code.position = position
@@ -48,7 +53,9 @@ else:
48
53
  handle_call(object.__func__, context, position)
49
54
 
50
55
  elif ins(object, type):
51
- method = (gt := getattr)(object, '__new__', None)
56
+ gt = getattr
57
+
58
+ method = gt(object, '__new__', None)
52
59
  if method is not None:
53
60
  handle_call(method, context, position)
54
61