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.
- pyscript_programming_language-1.13.0/PKG-INFO +156 -0
- pyscript_programming_language-1.13.0/README.md +124 -0
- pyscript_programming_language-1.13.0/changelog.md +27 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyproject.toml +2 -2
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/__main__.py +18 -16
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/cache.py +2 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/constants.py +4 -3
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/handlers.py +28 -28
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/highlight.py +8 -9
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/interpreter.py +24 -49
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/lexer.py +1 -3
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/mapping.py +12 -9
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/parser.py +57 -20
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/position.py +8 -7
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/pysbuiltins.py +73 -89
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/pystypes.py +35 -21
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/runner.py +21 -14
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/shell.py +3 -6
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/symtab.py +30 -27
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/token.py +12 -8
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/debug.py +1 -4
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/generic.py +1 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/string.py +3 -3
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/version.py +3 -3
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_literal_eval.py +14 -5
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_unparse.py +3 -19
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/brainfuck.pys +5 -4
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/inspect.pys +2 -2
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/parser.pys +16 -3
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/site.pys +3 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/tokenize/__init__.pys +1 -1
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/tokenize/tok_untokenize.py +15 -7
- pyscript_programming_language-1.13.0/pyscript_programming_language.egg-info/PKG-INFO +156 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/setup.py +2 -2
- pyscript_programming_language-1.12.12/PKG-INFO +0 -140
- pyscript_programming_language-1.12.12/README.md +0 -108
- pyscript_programming_language-1.12.12/changelog.md +0 -10
- pyscript_programming_language-1.12.12/pyscript_programming_language.egg-info/PKG-INFO +0 -140
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/MANIFEST.in +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/__init__.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/__init__.pyi +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/__init__.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/analyzer.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/bases.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/buffer.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/checks.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/context.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/editor/__init__.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/editor/bases.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/editor/gui.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/editor/terminal.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/exceptions.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/nodes.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/results.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/__init__.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/ansi.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/decorators.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/module.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/path.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/core/utils/similarity.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/__hello__.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/ansi.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/__init__.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_dump.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_walk.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/code.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/dis.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/explorer.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/fpstimer/__init__.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/fpstimer/py_fpstimer.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/getch/__init__.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/getch/py_getch.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/history.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/jsdict.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/keyword.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/opcode.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/pdisplay.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/symtable.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/lib/token.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/other/.nomedia +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/other/PyScript.ico +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/other/copyright +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/other/credits +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/other/license +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/site-packages/this.pys +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/this.py +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/SOURCES.txt +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/requires.txt +0 -0
- {pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/top_level.txt +0 -0
- {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">"Enter a first number : "</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">"Enter a second number: "</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">"Enter an operation (+, -, *, /): "</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">'+'</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">"Result of {:,} + {:,} = {:,}"</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">'-'</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">"Result of {:,} - {:,} = {:,}"</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">'*'</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">"Result of {:,} * {:,} = {:,}"</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">'/'</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">"Result of {:,} / {:,} = {}"</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">','</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> : </span><span style="color:#CE9178">"Cannot be divided by 0"</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">"Unknown operation"</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">"Enter a first number : "</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">"Enter a second number: "</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">"Enter an operation (+, -, *, /): "</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">'+'</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">"Result of {:,} + {:,} = {:,}"</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">'-'</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">"Result of {:,} - {:,} = {:,}"</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">'*'</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">"Result of {:,} * {:,} = {:,}"</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">'/'</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">"Result of {:,} / {:,} = {}"</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">','</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> : </span><span style="color:#CE9178">"Cannot be divided by 0"</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">"Unknown operation"</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._
|
{pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyproject.toml
RENAMED
|
@@ -4,14 +4,14 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyscript-programming-language"
|
|
7
|
-
version = "1.
|
|
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 = "
|
|
14
|
+
{ name = "Azzam Muhyala", email = "azzammuhyala@gmail.com" }
|
|
15
15
|
]
|
|
16
16
|
|
|
17
17
|
keywords = [
|
{pyscript_programming_language-1.12.12 → pyscript_programming_language-1.13.0}/pyscript/__main__.py
RENAMED
|
@@ -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
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if
|
|
51
|
-
|
|
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', '
|
|
266
|
-
'
|
|
267
|
-
'
|
|
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
|
-
|
|
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
|
|
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(
|
|
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](
|
|
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',
|
|
26
|
-
'true', 'typeof', 'of', 'or', 'raise', 'repeat', 'return', 'switch', 'throw', 'try', 'until',
|
|
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
|
|
14
|
-
|
|
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
|