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