pyscript-programming-language 1.12.13__tar.gz → 1.13.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 (94) hide show
  1. pyscript_programming_language-1.13.1/PKG-INFO +156 -0
  2. pyscript_programming_language-1.13.1/README.md +124 -0
  3. pyscript_programming_language-1.13.1/changelog.md +12 -0
  4. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyproject.toml +2 -2
  5. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/__main__.py +3 -4
  6. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/cache.py +3 -1
  7. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/constants.py +5 -4
  8. pyscript_programming_language-1.13.1/pyscript/core/editor/bases.py +70 -0
  9. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/editor/gui.py +37 -44
  10. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/editor/terminal.py +7 -2
  11. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/highlight.py +8 -9
  12. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/interpreter.py +18 -42
  13. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/lexer.py +1 -3
  14. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/mapping.py +12 -9
  15. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/parser.py +56 -19
  16. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/position.py +8 -7
  17. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/pysbuiltins.py +54 -88
  18. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/pystypes.py +6 -2
  19. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/runner.py +22 -15
  20. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/shell.py +1 -1
  21. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/symtab.py +35 -26
  22. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/token.py +12 -8
  23. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/utils/debug.py +1 -2
  24. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/utils/generic.py +4 -0
  25. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/utils/string.py +3 -3
  26. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/version.py +3 -3
  27. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/ast/ast_literal_eval.py +13 -5
  28. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/ast/ast_unparse.py +3 -19
  29. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/brainfuck.pys +2 -2
  30. pyscript_programming_language-1.13.1/pyscript/lib/inspect.pys +26 -0
  31. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/parser.pys +29 -7
  32. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/pdisplay.pys +3 -3
  33. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/site.pys +4 -1
  34. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/tokenize/__init__.pys +1 -1
  35. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/tokenize/tok_untokenize.py +2 -2
  36. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/site-packages/this.pys +5 -10
  37. pyscript_programming_language-1.13.1/pyscript/this.py +11 -0
  38. pyscript_programming_language-1.13.1/pyscript_programming_language.egg-info/PKG-INFO +156 -0
  39. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/setup.py +2 -2
  40. pyscript_programming_language-1.12.13/PKG-INFO +0 -150
  41. pyscript_programming_language-1.12.13/README.md +0 -118
  42. pyscript_programming_language-1.12.13/changelog.md +0 -11
  43. pyscript_programming_language-1.12.13/pyscript/core/editor/bases.py +0 -38
  44. pyscript_programming_language-1.12.13/pyscript/lib/inspect.pys +0 -26
  45. pyscript_programming_language-1.12.13/pyscript/this.py +0 -8
  46. pyscript_programming_language-1.12.13/pyscript_programming_language.egg-info/PKG-INFO +0 -150
  47. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/MANIFEST.in +0 -0
  48. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/__init__.py +0 -0
  49. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/__init__.pyi +0 -0
  50. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/__init__.py +0 -0
  51. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/analyzer.py +0 -0
  52. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/bases.py +0 -0
  53. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/buffer.py +0 -0
  54. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/checks.py +0 -0
  55. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/context.py +0 -0
  56. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/editor/__init__.py +0 -0
  57. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/exceptions.py +0 -0
  58. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/handlers.py +0 -0
  59. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/nodes.py +0 -0
  60. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/results.py +0 -0
  61. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/utils/__init__.py +0 -0
  62. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/utils/ansi.py +0 -0
  63. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/utils/decorators.py +0 -0
  64. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/utils/module.py +0 -0
  65. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/utils/path.py +0 -0
  66. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/core/utils/similarity.py +0 -0
  67. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/__hello__.pys +0 -0
  68. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/ansi.pys +0 -0
  69. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/ast/__init__.pys +0 -0
  70. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/ast/ast_dump.py +0 -0
  71. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/ast/ast_walk.py +0 -0
  72. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/code.pys +0 -0
  73. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/dis.pys +0 -0
  74. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/explorer.pys +0 -0
  75. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/fpstimer/__init__.pys +0 -0
  76. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/fpstimer/py_fpstimer.py +0 -0
  77. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/getch/__init__.pys +0 -0
  78. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/getch/py_getch.py +0 -0
  79. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/history.pys +0 -0
  80. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/jsdict.pys +0 -0
  81. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/keyword.pys +0 -0
  82. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/opcode.pys +0 -0
  83. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/symtable.pys +0 -0
  84. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/lib/token.pys +0 -0
  85. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/other/.nomedia +0 -0
  86. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/other/PyScript.ico +0 -0
  87. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/other/copyright +0 -0
  88. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/other/credits +0 -0
  89. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript/other/license +0 -0
  90. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript_programming_language.egg-info/SOURCES.txt +0 -0
  91. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
  92. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript_programming_language.egg-info/requires.txt +0 -0
  93. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/pyscript_programming_language.egg-info/top_level.txt +0 -0
  94. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.1}/setup.cfg +0 -0
@@ -0,0 +1,156 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyscript-programming-language
3
+ Version: 1.13.1
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 (Ace Editor)](https://github.com/azzammuhyala/pyscript/releases/download/v1.13.1/plugin.zip)
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 (Ace Editor)](https://github.com/azzammuhyala/pyscript/releases/download/v1.13.1/plugin.zip)
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,12 @@
1
+ # Change Logs
2
+
3
+ ## [1.13.1] - 16/05/2026
4
+
5
+ ### Added
6
+ - `__builtins__` is available in the module namespace.
7
+ - The editor can save multiple configurations.
8
+
9
+ ### Fixed
10
+ - Changed the order of `instanceof` operation.
11
+ - Fixed some bugs.
12
+ - _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.13"
7
+ version = "1.13.1"
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 = [
@@ -255,8 +255,8 @@ def clean_up() -> None:
255
255
  g = globals()
256
256
 
257
257
  for name in {
258
- 'ArgumentParser', 'BBCodeFormatter', 'CLASSIC_LINE_SHELL', 'DEBUG', 'DEFAULT', 'DONT_SHOW_BANNER_ON_SHELL',
259
- 'EDITOR_MAP', 'ENV_PYSCRIPT_CLASSIC_LINE_SHELL', 'ENV_PYSCRIPT_NO_COLOR_PROMPT', 'FORMATER_HIGHLIGHT_MAP',
258
+ 'ArgumentParser', 'BBCodeFormatter', 'CLASSIC_LINE_SHELL', 'DEBUG', 'DEFAULT', 'EDITOR_MAP',
259
+ 'ENV_PYSCRIPT_CLASSIC_LINE_SHELL', 'ENV_PYSCRIPT_NO_COLOR_PROMPT', 'FORMATER_HIGHLIGHT_MAP',
260
260
  'FORMATER_PYGMENTS_MAP', 'GUI_SUPPORT', 'HLFMT_ANSI', 'HLFMT_BBCODE', 'HLFMT_HTML', 'HtmlFormatter',
261
261
  'LatexFormatter', 'NOTEBOOK', 'NO_COLOR', 'NO_COLOR_PROMPT', 'OPTIONAL', 'PYGMENTS', 'PygmentsPyScriptLexer',
262
262
  'PygmentsPyScriptStyle', 'PysFileBuffer', 'PysGUIEditor', 'PysTerminalEditor', 'REMAINDER', 'TERMINAL_SUPPORT',
@@ -295,7 +295,6 @@ def load_file(path) -> PysFileBuffer:
295
295
  def execute(file: PysFileBuffer) -> None:
296
296
  global code
297
297
 
298
- not_show_banner_flag = DONT_SHOW_BANNER_ON_SHELL
299
298
  inspect = args.inspect
300
299
  symtab = _namespace_to_symbol_table(undefined, file)
301
300
 
@@ -319,7 +318,7 @@ def execute(file: PysFileBuffer) -> None:
319
318
  else:
320
319
  code = pys_shell(
321
320
  globals=result.context.symbol_table,
322
- flags=result.context.flags | not_show_banner_flag,
321
+ flags=result.context.flags | DONT_SHOW_BANNER_ON_SHELL,
323
322
  parser_flags=result.parser_flags
324
323
  )
325
324
 
@@ -1,5 +1,5 @@
1
1
  from .bases import Pys
2
- from .constants import PYSCRIPT_PATH, CORE_PATH, LIBRARIES_PATH, SITE_PACKAGES_PATH, DEFAULT
2
+ from .constants import PYSCRIPT_PATH, CORE_PATH, LIBRARIES_PATH, SITE_PACKAGES_PATH, CONFIGURATIONS_PATH, DEFAULT
3
3
  from .utils.debug import print_display, print_traceback, clear_shell
4
4
  from .utils.decorators import inheritable, singleton
5
5
  from .utils.path import base
@@ -31,6 +31,7 @@ pys_sys.pyscript_path = PYSCRIPT_PATH
31
31
  pys_sys.core_path = CORE_PATH
32
32
  pys_sys.libraries_path = LIBRARIES_PATH
33
33
  pys_sys.site_packages_path = SITE_PACKAGES_PATH
34
+ pys_sys.configurations_path = CONFIGURATIONS_PATH
34
35
  pys_sys.executable = f'{base(sys.executable)} -m pyscript'
35
36
  pys_sys.ps1 = '>>> '
36
37
  pys_sys.ps2 = '... '
@@ -45,6 +46,7 @@ for name in (
45
46
  if hasattr(sys, name):
46
47
  setattr(pys_sys, name, getattr(sys, name))
47
48
 
49
+ # sentinel
48
50
  @singleton
49
51
  @inheritable
50
52
  class PysUndefined(Pys):
@@ -7,7 +7,7 @@ OTHER_PATH = os.path.join(PYSCRIPT_PATH, 'other')
7
7
  SITE_PACKAGES_PATH = os.path.join(PYSCRIPT_PATH, 'site-packages')
8
8
  ICON_PATH = os.path.join(OTHER_PATH, 'PyScript.ico')
9
9
  GLOBAL_HISTORY_PATH = os.path.join(os.path.expanduser('~'), '.pyscript_history')
10
- GUI_GEOMETRY_PATH = os.path.join(OTHER_PATH, 'gui_geometry.txt')
10
+ CONFIGURATIONS_PATH = os.path.join(OTHER_PATH, 'configurations.json')
11
11
 
12
12
  ENV_PYSCRIPT_NO_EXCEPTHOOK = 'PYSCRIPT_NO_EXCEPTHOOK'
13
13
  ENV_PYSCRIPT_NO_GIL = 'PYSCRIPT_NO_GIL'
@@ -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
@@ -0,0 +1,70 @@
1
+ from ..bases import Pys
2
+ from ..buffer import PysFileBuffer
3
+ from ..constants import CONFIGURATIONS_PATH
4
+ from ..utils.decorators import typecheck, inheritable
5
+ from ..utils.generic import setimuattr
6
+ from ..utils.string import normstr
7
+
8
+ from json import dump, load
9
+ from typing import Any
10
+
11
+ import os
12
+
13
+ class PysEditor(Pys):
14
+
15
+ @typecheck
16
+ def __init__(self, file: PysFileBuffer, colored: bool = True) -> None:
17
+ self.file = file
18
+ self.colored = bool(colored)
19
+ self.basename = os.path.basename(self.file.name)
20
+ self.used = False
21
+ self.modified = False
22
+
23
+ def __init_subclass__(cls, **kwargs) -> None:
24
+ super().__init_subclass__(**kwargs)
25
+ inheritable(cls)
26
+
27
+ def load_configuration(self) -> None:
28
+ try:
29
+ with open(CONFIGURATIONS_PATH, 'r', encoding='utf-8') as file:
30
+ result = load(file)
31
+ if not isinstance(result, dict):
32
+ raise ValueError
33
+ for key in result:
34
+ if not isinstance(key, str):
35
+ raise ValueError
36
+ self.configurations = result
37
+ except:
38
+ self.configurations = {}
39
+
40
+ def get_configuration(self, configuration: str, default: Any) -> Any:
41
+ if configuration in self.configurations:
42
+ return self.configurations[configuration]
43
+ self.configurations[configuration] = default
44
+ return default
45
+
46
+ def set_configuration(self, configuration: str, value: Any) -> None:
47
+ self.configurations[configuration] = value
48
+
49
+ def save_configuration(self) -> None:
50
+ try:
51
+ with open(CONFIGURATIONS_PATH, 'w', encoding='utf-8') as file:
52
+ dump(self.configurations, file, separators=(',', ':'))
53
+ except:
54
+ pass
55
+
56
+ def save(self, text) -> None:
57
+ try:
58
+ text = normstr(text)
59
+ with open(self.file.name, 'w', encoding='utf-8') as file:
60
+ file.write(text)
61
+ setimuattr(self.file, 'text', text)
62
+ except:
63
+ pass
64
+ else:
65
+ self.modified = False
66
+
67
+ def run(self) -> None:
68
+ if self.used:
69
+ raise RuntimeError("one application object can only be used once")
70
+ self.used = True