pyscript-programming-language 1.11.0__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.11.0 → pyscript_programming_language-1.11.1}/pyscript/__main__.py +32 -7
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/__init__.py +2 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/analyzer.py +7 -7
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/constants.py +1 -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.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/highlight.py +53 -17
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/interpreter.py +31 -36
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/nodes.py +1 -1
- 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.0 → pyscript_programming_language-1.11.1}/pyscript/core/parser.py +19 -14
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/pysbuiltins.py +5 -1
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/__init__.py +4 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/version.py +2 -2
- pyscript_programming_language-1.11.1/pyscript_programming_language.egg-info/PKG-INFO +101 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript_programming_language.egg-info/SOURCES.txt +6 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript_programming_language.egg-info/requires.txt +1 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/setup.py +2 -2
- pyscript_programming_language-1.11.0/PKG-INFO +0 -100
- pyscript_programming_language-1.11.0/README.md +0 -65
- pyscript_programming_language-1.11.0/pyscript_programming_language.egg-info/PKG-INFO +0 -100
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/MANIFEST.in +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/__init__.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/__init__.pyi +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/bases.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/buffer.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/cache.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/checks.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/context.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/exceptions.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/handlers.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/lexer.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/mapping.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/objects.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/other/copyright +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/other/credits +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/other/license +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/position.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/results.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/runner.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/shell.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/symtab.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/token.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/ansi.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/debug.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/decorators.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/generic.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/jsdict.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/module.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/path.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/similarity.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/string.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/__hello__.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/ansi.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/__init__.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/ast_dump.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/ast_literal_eval.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/ast_unparse.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/ast_walk.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/brainfuck.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/dis.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/explorer.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/fpstimer/__init__.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/fpstimer/py_fpstimer.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/getch.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/inspect.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/jsdict.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/keyword.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/opcode.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/parser.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/site.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/symtable.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/sys.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/token.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/tokenize/__init__.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/tokenize/tok_untokenize.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/site-packages/this.pys +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/this.py +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
- {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript_programming_language.egg-info/top_level.txt +0 -0
- {pyscript_programming_language-1.11.0 → 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.11.0 → pyscript_programming_language-1.11.1}/pyscript/__main__.py
RENAMED
|
@@ -1,6 +1,8 @@
|
|
|
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
|
)
|
|
@@ -66,6 +68,13 @@ parser.add_argument(
|
|
|
66
68
|
help="Set a debug flag, this will ignore assert statement. Check the flag is active with the __debug__ keyword"
|
|
67
69
|
)
|
|
68
70
|
|
|
71
|
+
parser.add_argument(
|
|
72
|
+
'-e', '--editor',
|
|
73
|
+
choices=('terminal', 'gui'),
|
|
74
|
+
default=None,
|
|
75
|
+
help="Open the editor panel from a 'file'",
|
|
76
|
+
)
|
|
77
|
+
|
|
69
78
|
parser.add_argument(
|
|
70
79
|
'-i', '--inspect',
|
|
71
80
|
action='store_true',
|
|
@@ -124,14 +133,17 @@ def argument_error(argument, message):
|
|
|
124
133
|
|
|
125
134
|
args = parser.parse_args()
|
|
126
135
|
|
|
127
|
-
if args.
|
|
128
|
-
|
|
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")
|
|
129
141
|
|
|
130
142
|
if args.py_recursion is not None:
|
|
131
143
|
try:
|
|
132
144
|
sys.setrecursionlimit(args.py_recursion)
|
|
133
145
|
except BaseException as e:
|
|
134
|
-
argument_error(
|
|
146
|
+
argument_error('-r/--py-recursion', e)
|
|
135
147
|
|
|
136
148
|
code = 0
|
|
137
149
|
flags = DEFAULT
|
|
@@ -146,7 +158,7 @@ if args.P:
|
|
|
146
158
|
if args.q:
|
|
147
159
|
flags |= DONT_SHOW_BANNER_ON_SHELL
|
|
148
160
|
|
|
149
|
-
hook.argv
|
|
161
|
+
hook.argv[1:] = args.argv
|
|
150
162
|
|
|
151
163
|
if args.file is not None:
|
|
152
164
|
hook.argv[0] = args.file
|
|
@@ -156,7 +168,10 @@ if args.file is not None:
|
|
|
156
168
|
with open(path, 'r', encoding='utf-8') as file:
|
|
157
169
|
file = PysFileBuffer(file, path)
|
|
158
170
|
except FileNotFoundError:
|
|
159
|
-
|
|
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")
|
|
160
175
|
except PermissionError:
|
|
161
176
|
parser.error(f"can't open file {path!r}: Permission denied")
|
|
162
177
|
except IsADirectoryError:
|
|
@@ -170,7 +185,17 @@ if args.file is not None:
|
|
|
170
185
|
except BaseException as e:
|
|
171
186
|
parser.error(f"file {path!r}: Unexpected error: {e}")
|
|
172
187
|
|
|
173
|
-
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:
|
|
174
199
|
try:
|
|
175
200
|
if args.highlight in FORMAT_HIGHLIGHT_MAP:
|
|
176
201
|
print(
|
|
@@ -188,7 +213,7 @@ if args.file is not None:
|
|
|
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(
|
|
@@ -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
|
|
|
@@ -7,6 +7,7 @@ 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
9
|
OTHER_PATH = join(CORE_PATH, 'other')
|
|
10
|
+
ICON_PATH = join(OTHER_PATH, 'PyScript.ico')
|
|
10
11
|
|
|
11
12
|
# environment variables
|
|
12
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
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
from .bases import PysEditor
|
|
2
|
+
from ..buffer import PysFileBuffer
|
|
3
|
+
|
|
4
|
+
try:
|
|
5
|
+
|
|
6
|
+
from ..constants import ICON_PATH
|
|
7
|
+
from ..highlight import PygmentsPyScriptStyle, PygmentsPyScriptLexer
|
|
8
|
+
from ..version import __version__
|
|
9
|
+
|
|
10
|
+
from tkinter import END, Tk, Scrollbar, Text, messagebox
|
|
11
|
+
from tkinter.font import Font
|
|
12
|
+
|
|
13
|
+
class PysGUIEditor(PysEditor, Tk):
|
|
14
|
+
|
|
15
|
+
def __init__(self, file: PysFileBuffer) -> None:
|
|
16
|
+
PysEditor.__init__(self, file)
|
|
17
|
+
Tk.__init__(self)
|
|
18
|
+
|
|
19
|
+
try:
|
|
20
|
+
self.iconbitmap(ICON_PATH)
|
|
21
|
+
except:
|
|
22
|
+
pass
|
|
23
|
+
|
|
24
|
+
self.lexer = PygmentsPyScriptLexer()
|
|
25
|
+
self.style = PygmentsPyScriptStyle
|
|
26
|
+
|
|
27
|
+
self.font = Font(family='Consolas', size=10)
|
|
28
|
+
|
|
29
|
+
self.scrollbar = Scrollbar(self)
|
|
30
|
+
self.scrollbar.pack_configure(side='right', fill='y')
|
|
31
|
+
|
|
32
|
+
self.text = Text(
|
|
33
|
+
self,
|
|
34
|
+
undo=True,
|
|
35
|
+
width=120,
|
|
36
|
+
font=self.font,
|
|
37
|
+
wrap='char',
|
|
38
|
+
bg='#131313',
|
|
39
|
+
fg='#f8f8f2',
|
|
40
|
+
insertbackground='white',
|
|
41
|
+
yscrollcommand=self.scrollbar.set
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
self.text.pack_configure(side='left', expand=True, fill='both')
|
|
45
|
+
self.scrollbar.configure(command=self.text.yview)
|
|
46
|
+
|
|
47
|
+
self.text.insert('1.0', self.file.text)
|
|
48
|
+
self.text.edit_modified(False)
|
|
49
|
+
|
|
50
|
+
self.text.bind('<<Modified>>', self.on_modified)
|
|
51
|
+
|
|
52
|
+
self.bind_all('<Control-S>', self.on_save)
|
|
53
|
+
self.bind_all('<Control-s>', self.on_save)
|
|
54
|
+
self.bind_all('<Control-W>', self.on_toggle_wrap)
|
|
55
|
+
self.bind_all('<Control-w>', self.on_toggle_wrap)
|
|
56
|
+
self.bind_all('<Control-minus>', self.on_change_font(-1, lambda size : size > 1))
|
|
57
|
+
self.bind_all('<Control-underscore>', self.on_change_font(-5, lambda size : size > 1))
|
|
58
|
+
self.bind_all('<Control-equal>', self.on_change_font(1, lambda size : size < 128))
|
|
59
|
+
self.bind_all('<Control-plus>', self.on_change_font(5, lambda size : size < 128))
|
|
60
|
+
|
|
61
|
+
self.protocol('WM_DELETE_WINDOW', self.on_close)
|
|
62
|
+
|
|
63
|
+
self.setup_tags()
|
|
64
|
+
self.update()
|
|
65
|
+
|
|
66
|
+
def setup_tags(self):
|
|
67
|
+
tag_configure = self.text.tag_configure
|
|
68
|
+
for token, style in self.style.list_styles():
|
|
69
|
+
if color := style['color']:
|
|
70
|
+
tag_configure(str(token), foreground=f'#{color}')
|
|
71
|
+
|
|
72
|
+
def update(self):
|
|
73
|
+
self.title(f'PyScript {__version__} - {self.basename}{"*" if self.modified else ""}')
|
|
74
|
+
|
|
75
|
+
index = '1.0'
|
|
76
|
+
|
|
77
|
+
text = self.text
|
|
78
|
+
text_tag_add = text.tag_add
|
|
79
|
+
text_tag_remove = text.tag_remove
|
|
80
|
+
text_index = text.index
|
|
81
|
+
|
|
82
|
+
for tag in text.tag_names():
|
|
83
|
+
if tag != 'sel':
|
|
84
|
+
text_tag_remove(tag, '1.0', END)
|
|
85
|
+
|
|
86
|
+
for type, value in self.lexer.get_tokens(text.get('1.0', END)):
|
|
87
|
+
end_index = text_index(f'{index} + {len(value)} chars')
|
|
88
|
+
text_tag_add(str(type), index, end_index)
|
|
89
|
+
index = end_index
|
|
90
|
+
|
|
91
|
+
def on_save(self, event=None):
|
|
92
|
+
self.save(self.text.get('1.0', END))
|
|
93
|
+
self.update()
|
|
94
|
+
return 'break'
|
|
95
|
+
|
|
96
|
+
def on_close(self):
|
|
97
|
+
if self.modified:
|
|
98
|
+
answer = messagebox.askyesnocancel('Unsaved changes', 'File has been modified. Save before exit?')
|
|
99
|
+
if answer is True:
|
|
100
|
+
self.on_save()
|
|
101
|
+
self.destroy()
|
|
102
|
+
elif answer is False:
|
|
103
|
+
self.destroy()
|
|
104
|
+
else:
|
|
105
|
+
self.destroy()
|
|
106
|
+
|
|
107
|
+
def on_modified(self, event=None):
|
|
108
|
+
text = self.text
|
|
109
|
+
if text.edit_modified():
|
|
110
|
+
self.modified = True
|
|
111
|
+
self.update()
|
|
112
|
+
text.edit_modified(False)
|
|
113
|
+
|
|
114
|
+
def on_change_font(self, value, limit):
|
|
115
|
+
def wrapper(event=None):
|
|
116
|
+
font = self.font
|
|
117
|
+
size = font.cget('size')
|
|
118
|
+
if limit(size):
|
|
119
|
+
font.config(size=size + value)
|
|
120
|
+
return 'break'
|
|
121
|
+
return wrapper
|
|
122
|
+
|
|
123
|
+
def on_toggle_wrap(self, event=None):
|
|
124
|
+
self.wrapped = not self.wrapped
|
|
125
|
+
self.text.configure(wrap='char' if self.wrapped else 'none')
|
|
126
|
+
return 'break'
|
|
127
|
+
|
|
128
|
+
def run(self):
|
|
129
|
+
PysEditor.run(self)
|
|
130
|
+
Tk.mainloop(self)
|
|
131
|
+
|
|
132
|
+
except ImportError as e:
|
|
133
|
+
_error = e
|
|
134
|
+
|
|
135
|
+
class PysGUIEditor(PysEditor):
|
|
136
|
+
def __new__(cls, *args, **kwargs):
|
|
137
|
+
raise ImportError(
|
|
138
|
+
"cannot import module tkinter. Did you forgot install separate tkinter module or "
|
|
139
|
+
"not check the option for tkinter during python installation?: " +
|
|
140
|
+
str(_error)
|
|
141
|
+
) from _error
|