pyscript-programming-language 1.10.4__tar.gz → 1.11.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.
Files changed (87) hide show
  1. pyscript_programming_language-1.11.1/PKG-INFO +101 -0
  2. pyscript_programming_language-1.11.1/README.md +65 -0
  3. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/__init__.pyi +2 -2
  4. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/__main__.py +70 -43
  5. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/__init__.py +4 -0
  6. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/analyzer.py +7 -7
  7. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/cache.py +1 -1
  8. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/checks.py +1 -2
  9. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/constants.py +2 -0
  10. pyscript_programming_language-1.11.1/pyscript/core/editor/__init__.py +15 -0
  11. pyscript_programming_language-1.11.1/pyscript/core/editor/bases.py +34 -0
  12. pyscript_programming_language-1.11.1/pyscript/core/editor/gui.py +141 -0
  13. pyscript_programming_language-1.11.1/pyscript/core/editor/terminal.py +142 -0
  14. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/exceptions.py +2 -2
  15. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/highlight.py +109 -97
  16. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/interpreter.py +67 -67
  17. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/lexer.py +12 -12
  18. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/nodes.py +1 -1
  19. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/objects.py +6 -19
  20. pyscript_programming_language-1.11.1/pyscript/core/other/.nomedia +0 -0
  21. pyscript_programming_language-1.11.1/pyscript/core/other/PyScript.ico +0 -0
  22. pyscript_programming_language-1.11.1/pyscript/core/other/copyright +2 -0
  23. pyscript_programming_language-1.11.1/pyscript/core/other/credits +2 -0
  24. pyscript_programming_language-1.11.1/pyscript/core/other/license +21 -0
  25. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/parser.py +44 -35
  26. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/position.py +7 -5
  27. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/pysbuiltins.py +37 -21
  28. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/runner.py +23 -22
  29. {pyscript_programming_language-1.10.4/pyscript/core/utils → pyscript_programming_language-1.11.1/pyscript/core}/shell.py +32 -18
  30. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/token.py +2 -5
  31. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/utils/__init__.py +4 -2
  32. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/version.py +2 -2
  33. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/ast_unparse.py +51 -91
  34. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/brainfuck.pys +1 -1
  35. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/explorer.pys +80 -53
  36. pyscript_programming_language-1.11.1/pyscript/lib/fpstimer/__init__.pys +6 -0
  37. pyscript_programming_language-1.10.4/pyscript/lib/fpstimer.pys → pyscript_programming_language-1.11.1/pyscript/lib/fpstimer/py_fpstimer.py +11 -28
  38. pyscript_programming_language-1.11.1/pyscript/lib/inspect.pys +27 -0
  39. pyscript_programming_language-1.11.1/pyscript/lib/opcode.pys +1 -0
  40. pyscript_programming_language-1.11.1/pyscript_programming_language.egg-info/PKG-INFO +101 -0
  41. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript_programming_language.egg-info/SOURCES.txt +13 -2
  42. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript_programming_language.egg-info/requires.txt +1 -0
  43. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/setup.py +2 -2
  44. pyscript_programming_language-1.10.4/PKG-INFO +0 -88
  45. pyscript_programming_language-1.10.4/README.md +0 -53
  46. pyscript_programming_language-1.10.4/pyscript/lib/inspect.pys +0 -46
  47. pyscript_programming_language-1.10.4/pyscript_programming_language.egg-info/PKG-INFO +0 -88
  48. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/MANIFEST.in +0 -0
  49. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/__init__.py +0 -0
  50. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/bases.py +0 -0
  51. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/buffer.py +0 -0
  52. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/context.py +0 -0
  53. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/handlers.py +0 -0
  54. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/mapping.py +0 -0
  55. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/results.py +0 -0
  56. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/symtab.py +0 -0
  57. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/utils/ansi.py +0 -0
  58. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/utils/debug.py +0 -0
  59. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/utils/decorators.py +0 -0
  60. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/utils/generic.py +0 -0
  61. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/utils/jsdict.py +0 -0
  62. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/utils/module.py +0 -0
  63. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/utils/path.py +0 -0
  64. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/utils/similarity.py +0 -0
  65. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/core/utils/string.py +0 -0
  66. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/__hello__.pys +0 -0
  67. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/ansi.pys +0 -0
  68. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/__init__.pys +0 -0
  69. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/ast_dump.py +0 -0
  70. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/ast_literal_eval.py +0 -0
  71. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/ast_walk.py +0 -0
  72. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/dis.pys +0 -0
  73. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/getch.pys +0 -0
  74. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/jsdict.pys +0 -0
  75. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/keyword.pys +0 -0
  76. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/parser.pys +0 -0
  77. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/site.pys +0 -0
  78. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/symtable.pys +0 -0
  79. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/sys.pys +0 -0
  80. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/token.pys +0 -0
  81. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/tokenize/__init__.pys +0 -0
  82. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/lib/tokenize/tok_untokenize.py +0 -0
  83. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/site-packages/this.pys +0 -0
  84. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript/this.py +0 -0
  85. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
  86. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/pyscript_programming_language.egg-info/top_level.txt +0 -0
  87. {pyscript_programming_language-1.10.4 → pyscript_programming_language-1.11.1}/setup.cfg +0 -0
@@ -0,0 +1,101 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyscript-programming-language
3
+ Version: 1.11.1
4
+ Summary: PyScript Programming Language
5
+ Home-page: https://azzammuhyala.github.io/pyscript
6
+ Author: azzammuhyala
7
+ Author-email: azzammuhyala@gmail.com
8
+ License: MIT
9
+ Project-URL: Source, https://github.com/azzammuhyala/pyscript
10
+ Project-URL: Bug Tracker, https://github.com/azzammuhyala/pyscript/issues
11
+ Keywords: pyscript,pyslang,pys,programming,language,programming language
12
+ Classifier: Programming Language :: Python
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
16
+ Classifier: Topic :: Software Development :: Interpreters
17
+ Classifier: Topic :: Software Development :: Compilers
18
+ Requires-Python: >=3.10
19
+ Description-Content-Type: text/markdown
20
+ Provides-Extra: other
21
+ Requires-Dist: beartype; extra == "other"
22
+ Requires-Dist: pygments; extra == "other"
23
+ Requires-Dist: prompt_toolkit; extra == "other"
24
+ Dynamic: author
25
+ Dynamic: author-email
26
+ Dynamic: classifier
27
+ Dynamic: description
28
+ Dynamic: description-content-type
29
+ Dynamic: home-page
30
+ Dynamic: keywords
31
+ Dynamic: license
32
+ Dynamic: project-url
33
+ Dynamic: provides-extra
34
+ Dynamic: requires-python
35
+ Dynamic: summary
36
+
37
+ # PyScript
38
+
39
+ <div align="center">
40
+ <img src="https://github.com/azzammuhyala/pyscript/blob/main/PyScript.png?raw=true" alt="PyScript Logo" width="200">
41
+ </div>
42
+
43
+ PyScript is a simple programming language built on top of Python. It combines some syntax from Python and JavaScript,
44
+ so if you're already familiar with Python, JavaScript or both, it should be quite easy to learn.
45
+
46
+ ## Introduction
47
+ PyScript may not be the language we'll be discussing, but the name PyScript already exists, a flexible and platform for
48
+ running Python in a browser. Since it's inception, the language was inspired by Python and JavaScript, which are
49
+ relatively easy for humans to read. This name was chosen because it wasn't immediately known whether this name was
50
+ already in use.
51
+
52
+ This language wasn't designed to compete with other modern programming languages, but rather as a learning for
53
+ understanding how programming languages ​​work and how human written code can be understood by machines. Furthermore, this
54
+ language was created as a relatively complex project. Using Python as the foundation for PyScript, it's easy to
55
+ understand how the language is built without having to understand complex instructions like those in C, C++, and other
56
+ low-level languages.
57
+
58
+ To learn more about PyScript, you can see on [PyScript documentation](https://azzammuhyala.github.io/pyscript) or
59
+ [PyScript repository](https://github.com/azzammuhyala/pyscript) for full source code.
60
+
61
+ ## Installation
62
+ First, you'll need to download Python. Make sure you're using the latest version above `3.10`, to ensure the code runs
63
+ correctly. Visit the official [Python website](https://python.org) to download it.
64
+
65
+ Next, after downloading and configuring the Python application, you can download the PyScript from
66
+ [PyScript releases](https://github.com/azzammuhyala/pyscript/releases) or from Python Pip with this command
67
+ (_Recommended_):
68
+ ```sh
69
+ pip install -U pyscript-programming-language
70
+ ```
71
+
72
+ [_OPTIONAL_] You can download additional libraries that PyScript requires with this command:
73
+ ```sh
74
+ pip install -U "pyscript-programming-language[other]"
75
+ ```
76
+
77
+ And also, you can download PyScript with `git`:
78
+ ```sh
79
+ git clone https://github.com/azzammuhyala/pyscript
80
+ cd pyscript
81
+ python setup.py install
82
+ ```
83
+
84
+ After that, you can run the PyScript shell (_REPL_) with this command:
85
+ ```sh
86
+ python -m pyscript
87
+ ```
88
+ If successful, you can see the version, release date, and a `>>>` like Python shell (_REPL_).
89
+
90
+ > If you are using the VS Code editor, you can use the
91
+ [PyScript extension](https://marketplace.visualstudio.com/items?itemName=azzammuhyala.pyslang) for Syntax Highlight!
92
+
93
+ ## Example
94
+ Familiar? There it is!
95
+ <pre><span style="color:#549952"># get a number and operator with input()</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">float</span><span style="color:#FFD705">(</span><span style="color:#DCDCAA">input</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Enter a first number : &quot;</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">float</span><span style="color:#FFD705">(</span><span style="color:#DCDCAA">input</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Enter a second number: &quot;</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">op</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">input</span><span style="color:#FFD705">(</span><span style="color:#CE9178">&quot;Enter an operation (+, -, *, /): &quot;</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br><br></span><span style="color:#549952"># define a functions</span><span style="color:#D4D4D4"><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">add</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> + </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">sub</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> - </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">mul</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> * </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">floordiv</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#549952"># check b is zero</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> != </span><span style="color:#B5CEA8">0</span><span style="color:#D4D4D4"> ? </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> / </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> : </span><span style="color:#CE9178">&quot;Cannot be divided by 0!&quot;</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#549952"># operation matching</span><span style="color:#D4D4D4"><br></span><span style="color:#C586C0">switch</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">op</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">strip</span><span style="color:#D45DBA">()</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">&#x27;+&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">add</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} + {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">&#x27;-&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">sub</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} - {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">&#x27;*&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">mul</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} * {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">&#x27;/&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">floordiv</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} / {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">default</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Unknown operation&quot;</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span></pre>
96
+
97
+ ## Behind it
98
+ This language created from based up on a
99
+ [YouTube tutorial](https://www.youtube.com/playlist?list=PLZQftyCk7_SdoVexSmwy_tBgs7P0b97yD) (check more on GitHub
100
+ [here](https://github.com/davidcallanan/py-myopl-code) by **@davidcallanan**). At least, it takes about 6 months to
101
+ learn it, and also need to learn general things that exist in other programming languages.
@@ -0,0 +1,65 @@
1
+ # PyScript
2
+
3
+ <div align="center">
4
+ <img src="https://github.com/azzammuhyala/pyscript/blob/main/PyScript.png?raw=true" alt="PyScript Logo" width="200">
5
+ </div>
6
+
7
+ PyScript is a simple programming language built on top of Python. It combines some syntax from Python and JavaScript,
8
+ so if you're already familiar with Python, JavaScript or both, it should be quite easy to learn.
9
+
10
+ ## Introduction
11
+ PyScript may not be the language we'll be discussing, but the name PyScript already exists, a flexible and platform for
12
+ running Python in a browser. Since it's inception, the language was inspired by Python and JavaScript, which are
13
+ relatively easy for humans to read. This name was chosen because it wasn't immediately known whether this name was
14
+ already in use.
15
+
16
+ This language wasn't designed to compete with other modern programming languages, but rather as a learning for
17
+ understanding how programming languages ​​work and how human written code can be understood by machines. Furthermore, this
18
+ language was created as a relatively complex project. Using Python as the foundation for PyScript, it's easy to
19
+ understand how the language is built without having to understand complex instructions like those in C, C++, and other
20
+ low-level languages.
21
+
22
+ To learn more about PyScript, you can see on [PyScript documentation](https://azzammuhyala.github.io/pyscript) or
23
+ [PyScript repository](https://github.com/azzammuhyala/pyscript) for full source code.
24
+
25
+ ## Installation
26
+ First, you'll need to download Python. Make sure you're using the latest version above `3.10`, to ensure the code runs
27
+ correctly. Visit the official [Python website](https://python.org) to download it.
28
+
29
+ Next, after downloading and configuring the Python application, you can download the PyScript from
30
+ [PyScript releases](https://github.com/azzammuhyala/pyscript/releases) or from Python Pip with this command
31
+ (_Recommended_):
32
+ ```sh
33
+ pip install -U pyscript-programming-language
34
+ ```
35
+
36
+ [_OPTIONAL_] You can download additional libraries that PyScript requires with this command:
37
+ ```sh
38
+ pip install -U "pyscript-programming-language[other]"
39
+ ```
40
+
41
+ And also, you can download PyScript with `git`:
42
+ ```sh
43
+ git clone https://github.com/azzammuhyala/pyscript
44
+ cd pyscript
45
+ python setup.py install
46
+ ```
47
+
48
+ After that, you can run the PyScript shell (_REPL_) with this command:
49
+ ```sh
50
+ python -m pyscript
51
+ ```
52
+ If successful, you can see the version, release date, and a `>>>` like Python shell (_REPL_).
53
+
54
+ > If you are using the VS Code editor, you can use the
55
+ [PyScript extension](https://marketplace.visualstudio.com/items?itemName=azzammuhyala.pyslang) for Syntax Highlight!
56
+
57
+ ## Example
58
+ Familiar? There it is!
59
+ <pre><span style="color:#549952"># get a number and operator with input()</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">float</span><span style="color:#FFD705">(</span><span style="color:#DCDCAA">input</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Enter a first number : &quot;</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">float</span><span style="color:#FFD705">(</span><span style="color:#DCDCAA">input</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Enter a second number: &quot;</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">op</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">input</span><span style="color:#FFD705">(</span><span style="color:#CE9178">&quot;Enter an operation (+, -, *, /): &quot;</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br><br></span><span style="color:#549952"># define a functions</span><span style="color:#D4D4D4"><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">add</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> + </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">sub</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> - </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">mul</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> * </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">floordiv</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#549952"># check b is zero</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> != </span><span style="color:#B5CEA8">0</span><span style="color:#D4D4D4"> ? </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> / </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> : </span><span style="color:#CE9178">&quot;Cannot be divided by 0!&quot;</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#549952"># operation matching</span><span style="color:#D4D4D4"><br></span><span style="color:#C586C0">switch</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">op</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">strip</span><span style="color:#D45DBA">()</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">&#x27;+&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">add</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} + {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">&#x27;-&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">sub</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} - {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">&#x27;*&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">mul</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} * {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">&#x27;/&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">floordiv</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} / {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">default</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Unknown operation&quot;</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span></pre>
60
+
61
+ ## Behind it
62
+ This language created from based up on a
63
+ [YouTube tutorial](https://www.youtube.com/playlist?list=PLZQftyCk7_SdoVexSmwy_tBgs7P0b97yD) (check more on GitHub
64
+ [here](https://github.com/davidcallanan/py-myopl-code) by **@davidcallanan**). At least, it takes about 6 months to
65
+ learn it, and also need to learn general things that exist in other programming languages.
@@ -43,8 +43,8 @@ def pys_highlight(
43
43
  Callable[
44
44
  [
45
45
  str | Literal[
46
- 'start', 'invalid', 'identifier', 'identifier-constant', 'identifier-function', 'identifier-type',
47
- 'keyword', 'keyword-constant', 'number', 'string', 'comment', 'newline', 'default', 'end'
46
+ 'start', 'default', 'newline', 'keyword', 'keyword-constant', 'identifier', 'identifier-constant',
47
+ 'identifier-function', 'identifier-type', 'number', 'string', 'comment', 'invalid', 'end'
48
48
  ],
49
49
  PysPosition,
50
50
  str
@@ -1,19 +1,29 @@
1
1
  from .core.buffer import PysFileBuffer
2
2
  from .core.cache import undefined, hook
3
3
  from .core.constants import DEFAULT, DEBUG, DONT_SHOW_BANNER_ON_SHELL, NO_COLOR
4
+ from .core.editor.gui import PysGUIEditor
5
+ from .core.editor.terminal import PysTerminalEditor
4
6
  from .core.highlight import (
5
7
  HLFMT_HTML, HLFMT_ANSI, HLFMT_BBCODE, pys_highlight, PygmentsPyScriptStyle, PygmentsPyScriptLexer
6
8
  )
7
- from .core.runner import _normalize_globals, pys_runner, pys_shell
9
+ from .core.runner import _normalize_namespace, pys_runner, pys_shell
8
10
  from .core.utils.module import get_module_name_from_path, remove_python_path
9
11
  from .core.utils.path import normpath, getcwd
10
12
  from .core.version import __version__
11
13
 
12
14
  try:
13
15
  from pygments import highlight
14
- from pygments.formatters import TerminalFormatter, TerminalTrueColorFormatter, Terminal256Formatter
16
+ from pygments.formatters import (
17
+ BBCodeFormatter,
18
+ HtmlFormatter,
19
+ LatexFormatter,
20
+ TerminalFormatter, TerminalTrueColorFormatter, Terminal256Formatter
21
+ )
15
22
 
16
23
  FORMAT_PYGMENTS_MAP = {
24
+ 'pm-bbcode': BBCodeFormatter,
25
+ 'pm-html': HtmlFormatter,
26
+ 'pm-latex': LatexFormatter,
17
27
  'pm-terminal': TerminalFormatter,
18
28
  'pm-true-terminal': TerminalTrueColorFormatter,
19
29
  'pm-256-terminal': Terminal256Formatter
@@ -23,27 +33,11 @@ try:
23
33
  except ImportError:
24
34
  PYGMENTS = False
25
35
 
26
- from argparse import ArgumentParser
36
+ from argparse import OPTIONAL, REMAINDER, ArgumentParser
27
37
  from os import environ
28
38
 
29
39
  import sys
30
40
 
31
- def split_argv():
32
- need_value_arguments = {'-c', '--command', '-l', '--highlight', '-r', '--py-recursion'}
33
- argv = sys.argv
34
- i = 1
35
-
36
- while i < len(argv):
37
- argument = argv[i]
38
- if argument in need_value_arguments:
39
- i += 1
40
- elif not argument.startswith('-'):
41
- break
42
- i += 1
43
-
44
- hook.argv = argv[i:]
45
- return argv[1:i + 1]
46
-
47
41
  FORMAT_HIGHLIGHT_MAP = {
48
42
  'html': HLFMT_HTML,
49
43
  'ansi': HLFMT_ANSI,
@@ -55,14 +49,6 @@ parser = ArgumentParser(
55
49
  description=f'PyScript Launcher for Python Version {".".join(map(str, sys.version_info))}'
56
50
  )
57
51
 
58
- parser.add_argument(
59
- 'file',
60
- type=str,
61
- nargs='?',
62
- default=None,
63
- help="File path to be executed"
64
- )
65
-
66
52
  parser.add_argument(
67
53
  '-v', '--version',
68
54
  action='version',
@@ -77,9 +63,16 @@ parser.add_argument(
77
63
  )
78
64
 
79
65
  parser.add_argument(
80
- '-d', '--debug',
66
+ '-d', '-O', '--debug',
81
67
  action='store_true',
82
- help="Set a debug flag, this will ignore assert statement"
68
+ help="Set a debug flag, this will ignore assert statement. Check the flag is active with the __debug__ keyword"
69
+ )
70
+
71
+ parser.add_argument(
72
+ '-e', '--editor',
73
+ choices=('terminal', 'gui'),
74
+ default=None,
75
+ help="Open the editor panel from a 'file'",
83
76
  )
84
77
 
85
78
  parser.add_argument(
@@ -111,7 +104,7 @@ parser.add_argument(
111
104
  parser.add_argument(
112
105
  '-P',
113
106
  action='store_true',
114
- help="Don't prepend a potentially unsafe path to sys.path (python sys)"
107
+ help="Don't prepend a potentially unsafe path to sys.path (python sys.path)"
115
108
  )
116
109
 
117
110
  parser.add_argument(
@@ -120,20 +113,37 @@ parser.add_argument(
120
113
  help="Don't print version and copyright messages on interactive startup"
121
114
  )
122
115
 
116
+ parser.add_argument(
117
+ 'file',
118
+ type=str,
119
+ nargs=OPTIONAL,
120
+ default=None,
121
+ help="File path to be executed"
122
+ )
123
+
124
+ parser.add_argument(
125
+ 'argv',
126
+ nargs=REMAINDER,
127
+ help="Remaining arguments stored in hook.argv (sys.argv or sys.hook.argv)"
128
+ )
129
+
123
130
  def argument_error(argument, message):
124
131
  parser.print_usage(sys.stderr)
125
132
  parser.exit(2, f"{parser.prog}: error: argument {argument}: {message}\n")
126
133
 
127
- args = parser.parse_args(split_argv())
134
+ args = parser.parse_args()
128
135
 
129
- if args.highlight and args.file is None:
130
- argument_error("-l/--highlight", "argument 'file' is required")
136
+ if args.file is None:
137
+ if args.editor:
138
+ argument_error('-e/--editor', "argument 'file' is required")
139
+ elif args.highlight:
140
+ argument_error('-l/--highlight', "argument 'file' is required")
131
141
 
132
142
  if args.py_recursion is not None:
133
143
  try:
134
144
  sys.setrecursionlimit(args.py_recursion)
135
145
  except BaseException as e:
136
- argument_error("-r/--py-recursion", e)
146
+ argument_error('-r/--py-recursion', e)
137
147
 
138
148
  code = 0
139
149
  flags = DEFAULT
@@ -148,14 +158,20 @@ if args.P:
148
158
  if args.q:
149
159
  flags |= DONT_SHOW_BANNER_ON_SHELL
150
160
 
161
+ hook.argv[1:] = args.argv
162
+
151
163
  if args.file is not None:
164
+ hook.argv[0] = args.file
152
165
  path = normpath(args.file)
153
166
 
154
167
  try:
155
168
  with open(path, 'r', encoding='utf-8') as file:
156
169
  file = PysFileBuffer(file, path)
157
170
  except FileNotFoundError:
158
- parser.error(f"can't open file {path!r}: No such file or directory")
171
+ if args.editor:
172
+ file = PysFileBuffer('', path)
173
+ else:
174
+ parser.error(f"can't open file {path!r}: No such file or directory")
159
175
  except PermissionError:
160
176
  parser.error(f"can't open file {path!r}: Permission denied")
161
177
  except IsADirectoryError:
@@ -169,7 +185,17 @@ if args.file is not None:
169
185
  except BaseException as e:
170
186
  parser.error(f"file {path!r}: Unexpected error: {e}")
171
187
 
172
- if args.highlight:
188
+ if args.editor:
189
+ try:
190
+ if args.editor == 'terminal':
191
+ editor = PysTerminalEditor
192
+ elif args.editor == 'gui':
193
+ editor = PysGUIEditor
194
+ editor(file).run()
195
+ except BaseException as e:
196
+ argument_error('-e/--editor', e)
197
+
198
+ elif args.highlight:
173
199
  try:
174
200
  if args.highlight in FORMAT_HIGHLIGHT_MAP:
175
201
  print(
@@ -180,21 +206,20 @@ if args.file is not None:
180
206
  )
181
207
  else:
182
208
  print(
183
- flush=True,
184
- end=highlight(
209
+ highlight(
185
210
  code=file.text,
186
211
  lexer=PygmentsPyScriptLexer(),
187
- formatter=FORMAT_PYGMENTS_MAP[args.highlight](style=PygmentsPyScriptStyle)
212
+ formatter=FORMAT_PYGMENTS_MAP[args.highlight](style=PygmentsPyScriptStyle, full=True)
188
213
  )
189
214
  )
190
215
  except BaseException as e:
191
- parser.error(f"file {path!r}: Highlight error: {e}")
216
+ argument_error('-l/--highlight', e)
192
217
 
193
218
  else:
194
219
  result = pys_runner(
195
220
  file=file,
196
221
  mode='exec',
197
- symbol_table=_normalize_globals(file, undefined),
222
+ symbol_table=_normalize_namespace(file, undefined),
198
223
  flags=flags
199
224
  )
200
225
 
@@ -211,11 +236,13 @@ if args.file is not None:
211
236
  )
212
237
 
213
238
  elif args.command is not None:
214
- file = PysFileBuffer(args.command)
239
+ hook.argv[0] = '-c'
240
+
241
+ file = PysFileBuffer(args.command, '<arg-command>')
215
242
  code = pys_runner(
216
243
  file=file,
217
244
  mode='exec',
218
- symbol_table=_normalize_globals(file, undefined),
245
+ symbol_table=_normalize_namespace(file, undefined),
219
246
  flags=flags
220
247
  ).end_process()[0]
221
248
 
@@ -10,6 +10,7 @@ from . import (
10
10
  checks,
11
11
  constants,
12
12
  context,
13
+ editor,
13
14
  exceptions,
14
15
  handlers,
15
16
  highlight,
@@ -23,6 +24,7 @@ from . import (
23
24
  pysbuiltins,
24
25
  results,
25
26
  runner,
27
+ shell,
26
28
  symtab,
27
29
  token,
28
30
  utils,
@@ -37,6 +39,7 @@ __all__ = (
37
39
  'checks',
38
40
  'constants',
39
41
  'context',
42
+ 'editor',
40
43
  'exceptions',
41
44
  'handlers',
42
45
  'highlight',
@@ -50,6 +53,7 @@ __all__ = (
50
53
  'pysbuiltins',
51
54
  'results',
52
55
  'runner',
56
+ 'shell',
53
57
  'symtab',
54
58
  'token',
55
59
  'utils',
@@ -31,7 +31,7 @@ class PysAnalyzer(Pys):
31
31
  self.in_function = 0
32
32
  self.in_class = 0
33
33
  self.in_switch = 0
34
- self.parameters = set()
34
+ self.function_parameters = set()
35
35
  self.error = None
36
36
 
37
37
  self.visit(self.node)
@@ -257,13 +257,13 @@ class PysAnalyzer(Pys):
257
257
 
258
258
  def visit_ForNode(self, node):
259
259
  if len(node.header) == 2:
260
- declaration, iterable = node.header
260
+ declaration, iteration = node.header
261
261
 
262
262
  self.visit_declaration_AssignNode(declaration, "cannot assign to expression")
263
263
  if self.error:
264
264
  return
265
265
 
266
- self.visit(iterable)
266
+ self.visit(iteration)
267
267
  if self.error:
268
268
  return
269
269
 
@@ -388,21 +388,21 @@ class PysAnalyzer(Pys):
388
388
  if self.error:
389
389
  return
390
390
 
391
- in_loop, in_class, in_switch, parameters = self.in_loop, self.in_class, self.in_switch, self.parameters
391
+ in_loop, in_class, in_switch, parameters = self.in_loop, self.in_class, self.in_switch, self.function_parameters
392
392
 
393
393
  self.in_loop = 0
394
394
  self.in_class = 0
395
395
  self.in_switch = 0
396
396
 
397
397
  self.in_function += 1
398
- self.parameters = parameter_names
398
+ self.function_parameters = parameter_names
399
399
 
400
400
  self.visit(node.body)
401
401
  if self.error:
402
402
  return
403
403
 
404
404
  self.in_function -= 1
405
- self.parameters = parameters
405
+ self.function_parameters = parameters
406
406
 
407
407
  self.in_loop = in_loop
408
408
  self.in_class = in_class
@@ -413,7 +413,7 @@ class PysAnalyzer(Pys):
413
413
  self.throw("global outside of function", node.position)
414
414
 
415
415
  for identifier in node.identifiers:
416
- if identifier.value in self.parameters:
416
+ if identifier.value in self.function_parameters:
417
417
  self.throw(f"name {identifier.value!r} is parameter and global", identifier.position)
418
418
  return
419
419
 
@@ -37,7 +37,7 @@ class PysHook(Pys):
37
37
  def __new_singleton__(cls) -> 'PysHook':
38
38
  global hook
39
39
  hook = super(cls, cls).__new__(cls)
40
- hook.argv = []
40
+ hook.argv = ['']
41
41
  hook.running_shell = False
42
42
  hook.running_breakpoint = False
43
43
  hook.display = print_display
@@ -19,6 +19,7 @@ is_unpack_assignment = frozenset([
19
19
  ]).__contains__
20
20
 
21
21
  is_keyword = frozenset(KEYWORDS).__contains__
22
+ is_constant_keywords = frozenset(CONSTANT_KEYWORDS).__contains__
22
23
 
23
24
  is_python_extensions = frozenset([
24
25
  '.py', '.ipy', '.pyc', '.pyd', '.pyi', '.pyo', '.pyp', '.pyw', '.pyz', '.rpy', '.xpy', '.pyproj'
@@ -37,7 +38,5 @@ is_left_bracket = frozenset(BRACKETS_MAP.keys()).__contains__
37
38
  is_right_bracket = frozenset(BRACKETS_MAP.values()).__contains__
38
39
  is_bracket = frozenset(BRACKETS_MAP.keys() | BRACKETS_MAP.values()).__contains__
39
40
 
40
- is_constant_keywords = frozenset(CONSTANT_KEYWORDS).__contains__
41
-
42
41
  is_private_attribute = lambda name : name.startswith('_') if isinstance(name, str) else name
43
42
  is_public_attribute = lambda name : not name.startswith('_') if isinstance(name, str) else name
@@ -6,6 +6,8 @@ PYSCRIPT_PATH = sep.join(__file__.split(sep)[:-2])
6
6
  CORE_PATH = join(PYSCRIPT_PATH, 'core')
7
7
  LIBRARIES_PATH = join(PYSCRIPT_PATH, 'lib')
8
8
  SITE_PACKAGES_PATH = join(PYSCRIPT_PATH, 'site-packages')
9
+ OTHER_PATH = join(CORE_PATH, 'other')
10
+ ICON_PATH = join(OTHER_PATH, 'PyScript.ico')
9
11
 
10
12
  # environment variables
11
13
  ENV_PYSCRIPT_NO_EXCEPTHOOK = 'PYSCRIPT_NO_EXCEPTHOOK'
@@ -0,0 +1,15 @@
1
+ """
2
+ All Editor Application Implementations for PyScript.
3
+ """
4
+
5
+ from . import (
6
+ bases,
7
+ gui,
8
+ terminal
9
+ )
10
+
11
+ __all__ = (
12
+ 'bases',
13
+ 'gui',
14
+ 'terminal'
15
+ )
@@ -0,0 +1,34 @@
1
+ from ..bases import Pys
2
+ from ..buffer import PysFileBuffer
3
+ from ..utils.decorators import inheritable
4
+ from ..utils.generic import setimuattr
5
+ from ..utils.string import normstr
6
+
7
+ from os.path import basename
8
+
9
+ class PysEditor(Pys):
10
+
11
+ __slots__ = ('file', 'used', 'modified', 'wrapped', 'basename')
12
+
13
+ def __init__(self, file: PysFileBuffer) -> None:
14
+ self.file = file
15
+ self.used = False
16
+ self.modified = False
17
+ self.wrapped = True
18
+ self.basename = basename(self.file.name)
19
+
20
+ def __init_subclass__(cls, **kwargs) -> None:
21
+ super().__init_subclass__(**kwargs)
22
+ inheritable(cls)
23
+
24
+ def save(self, text) -> None:
25
+ text = normstr(text)
26
+ with open(self.file.name, 'w', encoding='utf-8') as file:
27
+ file.write(text)
28
+ setimuattr(self.file, 'text', text)
29
+ self.modified = False
30
+
31
+ def run(self):
32
+ if self.used:
33
+ raise RuntimeError("one application object can only be used once")
34
+ self.used = True