pyscript-programming-language 1.12.12__tar.gz → 1.13.0__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 (91) hide show
  1. pyscript_programming_language-1.13.0/PKG-INFO +156 -0
  2. pyscript_programming_language-1.13.0/README.md +124 -0
  3. pyscript_programming_language-1.13.0/changelog.md +27 -0
  4. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyproject.toml +2 -2
  5. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/__main__.py +18 -16
  6. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/cache.py +2 -0
  7. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/constants.py +4 -3
  8. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/handlers.py +28 -28
  9. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/highlight.py +8 -9
  10. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/interpreter.py +24 -49
  11. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/lexer.py +1 -3
  12. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/mapping.py +12 -9
  13. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/parser.py +57 -20
  14. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/position.py +8 -7
  15. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/pysbuiltins.py +73 -89
  16. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/pystypes.py +35 -21
  17. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/runner.py +21 -14
  18. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/shell.py +3 -6
  19. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/symtab.py +30 -27
  20. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/token.py +12 -8
  21. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/debug.py +1 -4
  22. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/generic.py +1 -0
  23. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/string.py +3 -3
  24. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/version.py +3 -3
  25. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_literal_eval.py +14 -5
  26. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_unparse.py +3 -19
  27. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/brainfuck.pys +5 -4
  28. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/inspect.pys +2 -2
  29. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/parser.pys +16 -3
  30. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/site.pys +3 -0
  31. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/tokenize/__init__.pys +1 -1
  32. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/tokenize/tok_untokenize.py +15 -7
  33. pyscript_programming_language-1.13.0/pyscript_programming_language.egg-info/PKG-INFO +156 -0
  34. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/setup.py +2 -2
  35. pyscript_programming_language-1.12.12/PKG-INFO +0 -140
  36. pyscript_programming_language-1.12.12/README.md +0 -108
  37. pyscript_programming_language-1.12.12/changelog.md +0 -10
  38. pyscript_programming_language-1.12.12/pyscript_programming_language.egg-info/PKG-INFO +0 -140
  39. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/MANIFEST.in +0 -0
  40. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/__init__.py +0 -0
  41. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/__init__.pyi +0 -0
  42. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/__init__.py +0 -0
  43. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/analyzer.py +0 -0
  44. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/bases.py +0 -0
  45. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/buffer.py +0 -0
  46. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/checks.py +0 -0
  47. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/context.py +0 -0
  48. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/editor/__init__.py +0 -0
  49. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/editor/bases.py +0 -0
  50. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/editor/gui.py +0 -0
  51. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/editor/terminal.py +0 -0
  52. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/exceptions.py +0 -0
  53. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/nodes.py +0 -0
  54. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/results.py +0 -0
  55. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/__init__.py +0 -0
  56. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/ansi.py +0 -0
  57. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/decorators.py +0 -0
  58. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/module.py +0 -0
  59. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/path.py +0 -0
  60. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/similarity.py +0 -0
  61. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/__hello__.pys +0 -0
  62. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/ansi.pys +0 -0
  63. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/__init__.pys +0 -0
  64. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_dump.py +0 -0
  65. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_walk.py +0 -0
  66. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/code.pys +0 -0
  67. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/dis.pys +0 -0
  68. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/explorer.pys +0 -0
  69. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/fpstimer/__init__.pys +0 -0
  70. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/fpstimer/py_fpstimer.py +0 -0
  71. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/getch/__init__.pys +0 -0
  72. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/getch/py_getch.py +0 -0
  73. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/history.pys +0 -0
  74. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/jsdict.pys +0 -0
  75. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/keyword.pys +0 -0
  76. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/opcode.pys +0 -0
  77. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/pdisplay.pys +0 -0
  78. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/symtable.pys +0 -0
  79. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/token.pys +0 -0
  80. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/other/.nomedia +0 -0
  81. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/other/PyScript.ico +0 -0
  82. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/other/copyright +0 -0
  83. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/other/credits +0 -0
  84. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/other/license +0 -0
  85. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/site-packages/this.pys +0 -0
  86. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/this.py +0 -0
  87. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/SOURCES.txt +0 -0
  88. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
  89. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/requires.txt +0 -0
  90. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/top_level.txt +0 -0
  91. {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/setup.cfg +0 -0
@@ -0,0 +1,156 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyscript-programming-language
3
+ Version: 1.13.0
4
+ Summary: PyScript Programming Language
5
+ Home-page: https://azzammuhyala.github.io/pyscript
6
+ Author: Azzam Muhyala
7
+ Author-email: Azzam Muhyala <azzammuhyala@gmail.com>
8
+ License-Expression: MIT
9
+ Project-URL: Homepage, https://azzammuhyala.github.io/pyscript
10
+ Project-URL: Documentation, https://azzammuhyala.github.io/pyscript
11
+ Project-URL: Source, https://github.com/azzammuhyala/pyscript
12
+ Project-URL: Releases, https://github.com/azzammuhyala/pyscript/releases
13
+ Project-URL: Change Log, https://github.com/azzammuhyala/pyscript/blob/main/changelog.md
14
+ Project-URL: Bug Tracker, https://github.com/azzammuhyala/pyscript/issues
15
+ Project-URL: PyPi Stats, https://pepy.tech/projects/pyscript-programming-language
16
+ Keywords: pyscript,pyslang,pys,programming,language,programming language
17
+ Classifier: Programming Language :: Python
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Intended Audience :: Developers
20
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
+ Classifier: Topic :: Software Development :: Interpreters
22
+ Classifier: Topic :: Software Development :: Compilers
23
+ Requires-Python: >=3.10
24
+ Description-Content-Type: text/markdown
25
+ Provides-Extra: other
26
+ Requires-Dist: beartype; extra == "other"
27
+ Requires-Dist: pygments; extra == "other"
28
+ Requires-Dist: prompt_toolkit; extra == "other"
29
+ Dynamic: author
30
+ Dynamic: home-page
31
+ Dynamic: requires-python
32
+
33
+ # PyScript
34
+
35
+ <div align="center">
36
+ <img src="https://github.com/azzammuhyala/pyscript/blob/main/PyScript.png?raw=true" alt="PyScript Logo" width="200">
37
+ <br>
38
+ <a href="https://pepy.tech/project/pyscript-programming-language">
39
+ <img src="https://static.pepy.tech/personalized-badge/pyscript-programming-language?period=total&units=NONE&left_color=GRAY&right_color=GREEN&left_text=downloads" alt="PyPI Downloads">
40
+ </a>
41
+ <a href="https://en.wikipedia.org/wiki/MIT_License">
42
+ <img src="https://img.shields.io/badge/license-MIT-orange" alt="License MIT">
43
+ </a>
44
+ <a href="https://www.python.org/">
45
+ <img src="https://img.shields.io/badge/python-3.10-yellow" alt="Python 3.10+">
46
+ </a>
47
+ </div>
48
+
49
+ PyScript is a programming language built on top of Python. It combines some syntax from Python and JavaScript, so if
50
+ you're already familiar with Python, JavaScript or both, it should be quite easy to learn.
51
+
52
+ ## Introduction 📖
53
+ PyScript may not be the language we'll be discussing, but the name PyScript already exists, a flexible and platform for
54
+ running Python in a browser. Since it's inception, the language was inspired by Python and JavaScript, which are
55
+ relatively easy for humans to read. This name was chosen because it wasn't immediately known whether this name was
56
+ already in use.
57
+
58
+ This language wasn't designed to compete with other modern programming languages, but rather as a learning for
59
+ understanding how programming languages ​​work and how human written code can be understood by machines. Furthermore, this
60
+ language was created as a relatively complex project. Using Python as the foundation for PyScript, it's easy to
61
+ understand how the language is built without having to understand complex instructions like those in C, C++, and other
62
+ low-level languages.
63
+
64
+ To learn more about PyScript, you can see on [PyScript documentation](https://azzammuhyala.github.io/pyscript) or
65
+ [PyScript repository](https://github.com/azzammuhyala/pyscript) for full source code.
66
+
67
+ ## Try PyScript ▶️
68
+ Try [PyScript Shell (_REPL_)](https://azzammuhyala.github.io/pyscript/shell.html) inside your browser directly
69
+ (no installation required).
70
+
71
+ ## Installation ⬇️
72
+ First, you'll need to download Python. Make sure you're using the latest version above `3.10`, to ensure the code runs
73
+ correctly. Visit the official [Python website](https://python.org) to download it.
74
+
75
+ Next, after downloading and configuring the Python application, you can download the PyScript from
76
+ [PyScript releases](https://github.com/azzammuhyala/pyscript/releases) or from PIP with this command (_Recommended_):
77
+ ```sh
78
+ pip install -U pyscript-programming-language
79
+ ```
80
+
81
+ [_OPTIONAL_] You can download additional libraries that PyScript requires with this command:
82
+ ```sh
83
+ pip install -U pyscript-programming-language[other]
84
+ ```
85
+
86
+ And also, you can download PyScript with `git`:
87
+ ```sh
88
+ git clone https://github.com/azzammuhyala/pyscript
89
+ cd pyscript
90
+ pip install .
91
+ ```
92
+
93
+ After that, you can run the PyScript shell (_REPL_) with this command:
94
+ ```sh
95
+ python -m pyscript
96
+ ```
97
+ If successful, you can see the version, release date, and a `>>>` like Python shell (_REPL_).
98
+
99
+ ## Example 📜
100
+ Familiar? There it is!
101
+ <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">operation</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:#307CD6">none</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">operation</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:#D4D4D4"><br></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:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> </span><span style="color:#307CD6">is</span><span style="color:#D4D4D4"> </span><span style="color:#307CD6">not</span><span style="color:#D4D4D4"> </span><span style="color:#307CD6">none</span><span style="color:#D4D4D4"> ? </span><span style="color:#DCDCAA">format</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4">, </span><span style="color:#CE9178">&#x27;,&#x27;</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> : </span><span style="color:#CE9178">&quot;Cannot be divided by 0&quot;</span><span style="color:#1A9FFF">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </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>
102
+
103
+ ## Library Requirements 📓
104
+ | No | Name | Status |
105
+ |:--:|:------------------|:----------------------:|
106
+ | 1 | `argparse` | **required** |
107
+ | 2 | `builtins` | **required** |
108
+ | 3 | `collections.abc` | **required** |
109
+ | 4 | `functools` | **required** |
110
+ | 5 | `html` | **required** |
111
+ | 6 | `importlib` | **required** |
112
+ | 7 | `inspect` | **required** |
113
+ | 8 | `io` | **required** |
114
+ | 9 | `itertools` | **required** |
115
+ | 10 | `json` | **required** |
116
+ | 11 | `math` | **required** |
117
+ | 12 | `operator` | **required** |
118
+ | 13 | `os` | **required** |
119
+ | 14 | `re` | **required** |
120
+ | 15 | `subprocess` | **required** |
121
+ | 16 | `sys` | **required** |
122
+ | 17 | `threading` | **required** |
123
+ | 18 | `types` | **required** |
124
+ | 19 | `typing` | **required** |
125
+ | 20 | `unicodedata` | **required** |
126
+ | 1 | `ast` | **required (library)** |
127
+ | 2 | `msvcrt` | **required (library)** |
128
+ | 3 | `pprint` | **required (library)** |
129
+ | 4 | `shutil` | **required (library)** |
130
+ | 5 | `stat` | **required (library)** |
131
+ | 6 | `termios` | **required (library)** |
132
+ | 7 | `time` | **required (library)** |
133
+ | 8 | `tty` | **required (library)** |
134
+ | 1 | `beartype` | **optional** |
135
+ | 2 | `prompt_toolkit` | **optional** |
136
+ | 3 | `pygments` | **optional** |
137
+ | 4 | `readline` | **optional** |
138
+ | 5 | `tkinter` | **optional** |
139
+ | 6 | `IPython` | **optional** |
140
+
141
+ ### Status Explanation
142
+ - **required**: Required by PyScript entirely.
143
+ - **required (library)**: Required PyScript library (located in `pyscript/lib`). PyScript is not affected unless you
144
+ import it.
145
+ - **optional**: Not required, but if it is present, some features can be used without issue.
146
+
147
+ ## Highlights
148
+ - [PyScript plugin for Acode](https://acode.app/plugin/acode.plugin.pyscript)
149
+ - [PyScript nano for Linux](https://github.com/azzammuhyala/pyscript/tree/main/highlight/nano)
150
+ - [PyScript extension for VSCode](https://marketplace.visualstudio.com/items?itemName=azzammuhyala.pyslang)
151
+
152
+ ## Behind it 🕰️
153
+ This language created from based up on a
154
+ [YouTube tutorial](https://www.youtube.com/playlist?list=PLZQftyCk7_SdoVexSmwy_tBgs7P0b97yD) (check more on GitHub
155
+ [here](https://github.com/davidcallanan/py-myopl-code) by **@davidcallanan**). At least, it takes about 6 months to
156
+ learn it, and also need to learn general things that exist in other programming languages.
@@ -0,0 +1,124 @@
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
+ <br>
6
+ <a href="https://pepy.tech/project/pyscript-programming-language">
7
+ <img src="https://static.pepy.tech/personalized-badge/pyscript-programming-language?period=total&units=NONE&left_color=GRAY&right_color=GREEN&left_text=downloads" alt="PyPI Downloads">
8
+ </a>
9
+ <a href="https://en.wikipedia.org/wiki/MIT_License">
10
+ <img src="https://img.shields.io/badge/license-MIT-orange" alt="License MIT">
11
+ </a>
12
+ <a href="https://www.python.org/">
13
+ <img src="https://img.shields.io/badge/python-3.10-yellow" alt="Python 3.10+">
14
+ </a>
15
+ </div>
16
+
17
+ PyScript is a programming language built on top of Python. It combines some syntax from Python and JavaScript, so if
18
+ you're already familiar with Python, JavaScript or both, it should be quite easy to learn.
19
+
20
+ ## Introduction 📖
21
+ PyScript may not be the language we'll be discussing, but the name PyScript already exists, a flexible and platform for
22
+ running Python in a browser. Since it's inception, the language was inspired by Python and JavaScript, which are
23
+ relatively easy for humans to read. This name was chosen because it wasn't immediately known whether this name was
24
+ already in use.
25
+
26
+ This language wasn't designed to compete with other modern programming languages, but rather as a learning for
27
+ understanding how programming languages ​​work and how human written code can be understood by machines. Furthermore, this
28
+ language was created as a relatively complex project. Using Python as the foundation for PyScript, it's easy to
29
+ understand how the language is built without having to understand complex instructions like those in C, C++, and other
30
+ low-level languages.
31
+
32
+ To learn more about PyScript, you can see on [PyScript documentation](https://azzammuhyala.github.io/pyscript) or
33
+ [PyScript repository](https://github.com/azzammuhyala/pyscript) for full source code.
34
+
35
+ ## Try PyScript ▶️
36
+ Try [PyScript Shell (_REPL_)](https://azzammuhyala.github.io/pyscript/shell.html) inside your browser directly
37
+ (no installation required).
38
+
39
+ ## Installation ⬇️
40
+ First, you'll need to download Python. Make sure you're using the latest version above `3.10`, to ensure the code runs
41
+ correctly. Visit the official [Python website](https://python.org) to download it.
42
+
43
+ Next, after downloading and configuring the Python application, you can download the PyScript from
44
+ [PyScript releases](https://github.com/azzammuhyala/pyscript/releases) or from PIP with this command (_Recommended_):
45
+ ```sh
46
+ pip install -U pyscript-programming-language
47
+ ```
48
+
49
+ [_OPTIONAL_] You can download additional libraries that PyScript requires with this command:
50
+ ```sh
51
+ pip install -U pyscript-programming-language[other]
52
+ ```
53
+
54
+ And also, you can download PyScript with `git`:
55
+ ```sh
56
+ git clone https://github.com/azzammuhyala/pyscript
57
+ cd pyscript
58
+ pip install .
59
+ ```
60
+
61
+ After that, you can run the PyScript shell (_REPL_) with this command:
62
+ ```sh
63
+ python -m pyscript
64
+ ```
65
+ If successful, you can see the version, release date, and a `>>>` like Python shell (_REPL_).
66
+
67
+ ## Example 📜
68
+ Familiar? There it is!
69
+ <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">operation</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:#307CD6">none</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">operation</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:#D4D4D4"><br></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:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> </span><span style="color:#307CD6">is</span><span style="color:#D4D4D4"> </span><span style="color:#307CD6">not</span><span style="color:#D4D4D4"> </span><span style="color:#307CD6">none</span><span style="color:#D4D4D4"> ? </span><span style="color:#DCDCAA">format</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4">, </span><span style="color:#CE9178">&#x27;,&#x27;</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> : </span><span style="color:#CE9178">&quot;Cannot be divided by 0&quot;</span><span style="color:#1A9FFF">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </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>
70
+
71
+ ## Library Requirements 📓
72
+ | No | Name | Status |
73
+ |:--:|:------------------|:----------------------:|
74
+ | 1 | `argparse` | **required** |
75
+ | 2 | `builtins` | **required** |
76
+ | 3 | `collections.abc` | **required** |
77
+ | 4 | `functools` | **required** |
78
+ | 5 | `html` | **required** |
79
+ | 6 | `importlib` | **required** |
80
+ | 7 | `inspect` | **required** |
81
+ | 8 | `io` | **required** |
82
+ | 9 | `itertools` | **required** |
83
+ | 10 | `json` | **required** |
84
+ | 11 | `math` | **required** |
85
+ | 12 | `operator` | **required** |
86
+ | 13 | `os` | **required** |
87
+ | 14 | `re` | **required** |
88
+ | 15 | `subprocess` | **required** |
89
+ | 16 | `sys` | **required** |
90
+ | 17 | `threading` | **required** |
91
+ | 18 | `types` | **required** |
92
+ | 19 | `typing` | **required** |
93
+ | 20 | `unicodedata` | **required** |
94
+ | 1 | `ast` | **required (library)** |
95
+ | 2 | `msvcrt` | **required (library)** |
96
+ | 3 | `pprint` | **required (library)** |
97
+ | 4 | `shutil` | **required (library)** |
98
+ | 5 | `stat` | **required (library)** |
99
+ | 6 | `termios` | **required (library)** |
100
+ | 7 | `time` | **required (library)** |
101
+ | 8 | `tty` | **required (library)** |
102
+ | 1 | `beartype` | **optional** |
103
+ | 2 | `prompt_toolkit` | **optional** |
104
+ | 3 | `pygments` | **optional** |
105
+ | 4 | `readline` | **optional** |
106
+ | 5 | `tkinter` | **optional** |
107
+ | 6 | `IPython` | **optional** |
108
+
109
+ ### Status Explanation
110
+ - **required**: Required by PyScript entirely.
111
+ - **required (library)**: Required PyScript library (located in `pyscript/lib`). PyScript is not affected unless you
112
+ import it.
113
+ - **optional**: Not required, but if it is present, some features can be used without issue.
114
+
115
+ ## Highlights
116
+ - [PyScript plugin for Acode](https://acode.app/plugin/acode.plugin.pyscript)
117
+ - [PyScript nano for Linux](https://github.com/azzammuhyala/pyscript/tree/main/highlight/nano)
118
+ - [PyScript extension for VSCode](https://marketplace.visualstudio.com/items?itemName=azzammuhyala.pyslang)
119
+
120
+ ## Behind it 🕰️
121
+ This language created from based up on a
122
+ [YouTube tutorial](https://www.youtube.com/playlist?list=PLZQftyCk7_SdoVexSmwy_tBgs7P0b97yD) (check more on GitHub
123
+ [here](https://github.com/davidcallanan/py-myopl-code) by **@davidcallanan**). At least, it takes about 6 months to
124
+ learn it, and also need to learn general things that exist in other programming languages.
@@ -0,0 +1,27 @@
1
+ # Change Logs
2
+
3
+ ## [1.13.0] - 14/05/2026
4
+
5
+ ### Added
6
+ - The `else` keyword is used in `match` as an alias for the `default` keyword.
7
+ - The `pyscript.core.pystypes.PysPythonFunction` passes two parameters, `context` and `position`, instead of passing one
8
+ parameter to itself.
9
+ - In the symbol table object, `__builtins__` has its own namespace named `builtins`.
10
+ - Direct deletion of the global namespace with the `/clean` command. This allows the _Python Garbage Collector_ to
11
+ immediately delete all objects in that namespace.
12
+ - A single statement will directly provide that single node instead of providing a
13
+ `pyscript.core.nodes.PysStatementsNode`.
14
+ - A new mechanism for getting built-in module import functions in `import` and `from` statements.
15
+ - The keywords `in`, `is`, `and`, `or`, `not`, and `typeof` are not available in `PysToken` (new token types).
16
+ - The `instanceof` keyword (same as the built-in `isinstance()` function).
17
+ - _etc._
18
+
19
+ ### Fixed
20
+ - Add word boundary `'\b'` to number regex.
21
+ - Add of information in the parser in the form of rows and columns.
22
+ - Fixed some bugs.
23
+ - _etc._
24
+
25
+ ### Deleted
26
+ - `pyscript.core.mapping.EMPTY_MAP`.
27
+ - _etc._
@@ -4,14 +4,14 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyscript-programming-language"
7
- version = "1.12.12"
7
+ version = "1.13.0"
8
8
  description = "PyScript Programming Language"
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  requires-python = ">=3.10"
11
11
  license = "MIT"
12
12
 
13
13
  authors = [
14
- { name = "azzammuhyala", email = "azzammuhyala@gmail.com" }
14
+ { name = "Azzam Muhyala", email = "azzammuhyala@gmail.com" }
15
15
  ]
16
16
 
17
17
  keywords = [
@@ -13,7 +13,7 @@ from .core.runner import _namespace_to_symbol_table, pys_runner, pys_shell
13
13
  from .core.utils.debug import USE_NOTEBOOK
14
14
  from .core.utils.generic import is_environ
15
15
  from .core.utils.module import find_module_path, remove_python_path
16
- from .core.utils.path import getcwd, base, normpath
16
+ from .core.utils.path import getcwd, base
17
17
  from .core.version import __version__
18
18
 
19
19
  if PYGMENTS:
@@ -42,13 +42,13 @@ FORMATER_HIGHLIGHT_MAP = {
42
42
  'bbcode': HLFMT_BBCODE
43
43
  }
44
44
 
45
- EDITOR_MAP = {}
46
- for supported, name, class_editor in [
47
- (GUI_SUPPORT, 'gui', PysGUIEditor),
48
- (TERMINAL_SUPPORT, 'terminal', PysTerminalEditor)
49
- ]:
50
- if supported:
51
- EDITOR_MAP[name] = class_editor
45
+ EDITOR_MAP = {
46
+ name: cls
47
+ for support, name, cls in [
48
+ (GUI_SUPPORT, 'gui', PysGUIEditor),
49
+ (TERMINAL_SUPPORT, 'terminal', PysTerminalEditor)
50
+ ] if support
51
+ }
52
52
 
53
53
  arguments_requiring_value = {'-l', '--highlight', '-r', '--py-recursion'}
54
54
 
@@ -262,9 +262,9 @@ def clean_up() -> None:
262
262
  'PygmentsPyScriptStyle', 'PysFileBuffer', 'PysGUIEditor', 'PysTerminalEditor', 'REMAINDER', 'TERMINAL_SUPPORT',
263
263
  'Terminal256Formatter', 'TerminalFormatter', 'TerminalTrueColorFormatter', 'USE_NOTEBOOK', '__version__',
264
264
  '_namespace_to_symbol_table', 'arg', 'arg_index', 'argc', 'args', 'argument_error', 'arguments_requiring_value',
265
- 'argv', 'base', 'class_editor', 'clean_up', 'condition', 'ctypes', 'execute', 'fd', 'file', 'find_module_path',
266
- 'flag', 'getcwd', 'highlight', 'i', 'index', 'is_environ', 'kernel32', 'load_file', 'module_path', 'name',
267
- 'normpath', 'parser', 'pys_highlight', 'pys_sys', 'remove_python_path', 'supported'
265
+ 'argv', 'base', 'clean_up', 'condition', 'ctypes', 'execute', 'fd', 'file', 'find_module_path', 'flag',
266
+ 'getcwd', 'highlight', 'i', 'index', 'is_environ', 'kernel32', 'load_file', 'module_path', 'parser',
267
+ 'pys_highlight', 'pys_sys', 'remove_python_path'
268
268
  }:
269
269
  try:
270
270
  del g[name]
@@ -272,10 +272,9 @@ def clean_up() -> None:
272
272
  continue
273
273
 
274
274
  def load_file(path) -> PysFileBuffer:
275
- file = PysFileBuffer('', path)
276
275
  try:
277
276
  with open(path, 'r', encoding='utf-8') as file:
278
- file = PysFileBuffer(file, path)
277
+ return PysFileBuffer(file, path)
279
278
  except FileNotFoundError:
280
279
  if not (EDITOR_MAP and args.editor):
281
280
  argument_error('file', f"can't open file \"{path}\": No such file or directory")
@@ -291,7 +290,7 @@ def load_file(path) -> PysFileBuffer:
291
290
  argument_error('file', f"can't read file \"{path}\": Bad file")
292
291
  except BaseException as e:
293
292
  argument_error('file', f"file \"{path}\": Unexpected error: {e}")
294
- return file
293
+ return PysFileBuffer('', path)
295
294
 
296
295
  def execute(file: PysFileBuffer) -> None:
297
296
  global code
@@ -326,7 +325,7 @@ def execute(file: PysFileBuffer) -> None:
326
325
 
327
326
  if args.file is not None:
328
327
  argv[0] = args.file
329
- file = load_file(normpath(args.file))
328
+ file = load_file(args.file)
330
329
 
331
330
  if EDITOR_MAP and args.editor:
332
331
  try:
@@ -348,7 +347,10 @@ if args.file is not None:
348
347
  highlight(
349
348
  code=file.text,
350
349
  lexer=PygmentsPyScriptLexer(),
351
- formatter=FORMATER_PYGMENTS_MAP[args.highlight](style=PygmentsPyScriptStyle, full=True)
350
+ formatter=FORMATER_PYGMENTS_MAP[args.highlight](
351
+ style=PygmentsPyScriptStyle,
352
+ full=True
353
+ )
352
354
  )
353
355
  )
354
356
  except BaseException as e:
@@ -34,6 +34,7 @@ pys_sys.site_packages_path = SITE_PACKAGES_PATH
34
34
  pys_sys.executable = f'{base(sys.executable)} -m pyscript'
35
35
  pys_sys.ps1 = '>>> '
36
36
  pys_sys.ps2 = '... '
37
+ pys_sys._is_gil_enabled = lambda : pys_sys.gil
37
38
 
38
39
  for name in (
39
40
  'exit', 'float_info', 'float_repr_style', 'get_int_max_str_digits', 'getdefaultencoding',
@@ -44,6 +45,7 @@ for name in (
44
45
  if hasattr(sys, name):
45
46
  setattr(pys_sys, name, getattr(sys, name))
46
47
 
48
+ # sentinel
47
49
  @singleton
48
50
  @inheritable
49
51
  class PysUndefined(Pys):
@@ -22,13 +22,14 @@ ENV_PYSCRIPT_MAXIMUM_HISTORY_LINE = 'PYSCRIPT_MAXIMUM_HISTORY_LINE'
22
22
  KEYWORDS = (
23
23
  '__debug__', 'False', 'None', 'True', 'and', 'as', 'assert', 'break', 'case', 'catch', 'class', 'constructor',
24
24
  'continue', 'default', 'del', 'delete', 'do', 'elif', 'else', 'elseif', 'except', 'extends', 'false', 'finally',
25
- 'for', 'from', 'func', 'function', 'global', 'if', 'import', 'in', 'is', 'match', 'nil', 'none', 'null', 'not',
26
- 'true', 'typeof', 'of', 'or', 'raise', 'repeat', 'return', 'switch', 'throw', 'try', 'until', 'while', 'with'
25
+ 'for', 'from', 'func', 'function', 'global', 'if', 'import', 'in', 'instanceof', 'is', 'match', 'nil', 'none',
26
+ 'null', 'not', 'true', 'typeof', 'of', 'or', 'raise', 'repeat', 'return', 'switch', 'throw', 'try', 'until',
27
+ 'while', 'with'
27
28
  )
28
29
 
29
30
  CONSTANT_KEYWORDS = (
30
31
  '__debug__', 'False', 'None', 'True', 'and', 'class', 'constructor', 'extends', 'func', 'function', 'false',
31
- 'global', 'in', 'is', 'not', 'nil', 'none', 'null', 'of', 'or', 'true', 'typeof'
32
+ 'global', 'in', 'instanceof', 'is', 'not', 'nil', 'none', 'null', 'of', 'or', 'true', 'typeof'
32
33
  )
33
34
 
34
35
  DEFAULT = 0
@@ -10,9 +10,34 @@ from typing import Any
10
10
 
11
11
  wrapper_function = (MethodType, classmethod, staticmethod)
12
12
 
13
- if not is_environ(ENV_PYSCRIPT_NO_GIL):
14
- from threading import RLock
13
+ if is_environ(ENV_PYSCRIPT_NO_GIL):
14
+
15
+ def handle_call(object: Any, context: PysContext, position: PysPosition) -> None:
16
+ ins = isinstance
15
17
 
18
+ if ins(object, PysFunction):
19
+ code = object.__code__
20
+ code.context = context
21
+ code.position = position
22
+
23
+ elif ins(object, wrapper_function):
24
+ handle_call(object.__func__, context, position)
25
+
26
+ elif ins(object, type):
27
+ gt = getattr
28
+
29
+ method = gt(object, '__new__', None)
30
+ if method is not None:
31
+ handle_call(method, context, position)
32
+
33
+ method = gt(object, '__init__', None)
34
+ if method is not None:
35
+ handle_call(method, context, position)
36
+
37
+ GIL = pys_sys.gil = False
38
+
39
+ else:
40
+ from threading import RLock
16
41
  gil_lock = RLock()
17
42
 
18
43
  def handle_call(object: Any, context: PysContext, position: PysPosition) -> None:
@@ -38,29 +63,4 @@ if not is_environ(ENV_PYSCRIPT_NO_GIL):
38
63
  if method is not None:
39
64
  handle_call(method, context, position)
40
65
 
41
- GIL = pys_sys.gil = True
42
- else:
43
-
44
- def handle_call(object: Any, context: PysContext, position: PysPosition) -> None:
45
- ins = isinstance
46
-
47
- if ins(object, PysFunction):
48
- code = object.__code__
49
- code.context = context
50
- code.position = position
51
-
52
- elif ins(object, wrapper_function):
53
- handle_call(object.__func__, context, position)
54
-
55
- elif ins(object, type):
56
- gt = getattr
57
-
58
- method = gt(object, '__new__', None)
59
- if method is not None:
60
- handle_call(method, context, position)
61
-
62
- method = gt(object, '__init__', None)
63
- if method is not None:
64
- handle_call(method, context, position)
65
-
66
- GIL = pys_sys.gil = False
66
+ GIL = pys_sys.gil = True