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.
Files changed (86) hide show
  1. pyscript_programming_language-1.11.1/PKG-INFO +101 -0
  2. pyscript_programming_language-1.11.1/README.md +65 -0
  3. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/__main__.py +32 -7
  4. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/__init__.py +2 -0
  5. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/analyzer.py +7 -7
  6. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/constants.py +1 -0
  7. pyscript_programming_language-1.11.1/pyscript/core/editor/__init__.py +15 -0
  8. pyscript_programming_language-1.11.1/pyscript/core/editor/bases.py +34 -0
  9. pyscript_programming_language-1.11.1/pyscript/core/editor/gui.py +141 -0
  10. pyscript_programming_language-1.11.1/pyscript/core/editor/terminal.py +142 -0
  11. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/highlight.py +53 -17
  12. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/interpreter.py +31 -36
  13. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/nodes.py +1 -1
  14. pyscript_programming_language-1.11.1/pyscript/core/other/.nomedia +0 -0
  15. pyscript_programming_language-1.11.1/pyscript/core/other/PyScript.ico +0 -0
  16. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/parser.py +19 -14
  17. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/pysbuiltins.py +5 -1
  18. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/__init__.py +4 -0
  19. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/version.py +2 -2
  20. pyscript_programming_language-1.11.1/pyscript_programming_language.egg-info/PKG-INFO +101 -0
  21. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript_programming_language.egg-info/SOURCES.txt +6 -0
  22. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript_programming_language.egg-info/requires.txt +1 -0
  23. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/setup.py +2 -2
  24. pyscript_programming_language-1.11.0/PKG-INFO +0 -100
  25. pyscript_programming_language-1.11.0/README.md +0 -65
  26. pyscript_programming_language-1.11.0/pyscript_programming_language.egg-info/PKG-INFO +0 -100
  27. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/MANIFEST.in +0 -0
  28. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/__init__.py +0 -0
  29. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/__init__.pyi +0 -0
  30. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/bases.py +0 -0
  31. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/buffer.py +0 -0
  32. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/cache.py +0 -0
  33. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/checks.py +0 -0
  34. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/context.py +0 -0
  35. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/exceptions.py +0 -0
  36. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/handlers.py +0 -0
  37. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/lexer.py +0 -0
  38. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/mapping.py +0 -0
  39. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/objects.py +0 -0
  40. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/other/copyright +0 -0
  41. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/other/credits +0 -0
  42. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/other/license +0 -0
  43. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/position.py +0 -0
  44. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/results.py +0 -0
  45. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/runner.py +0 -0
  46. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/shell.py +0 -0
  47. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/symtab.py +0 -0
  48. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/token.py +0 -0
  49. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/ansi.py +0 -0
  50. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/debug.py +0 -0
  51. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/decorators.py +0 -0
  52. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/generic.py +0 -0
  53. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/jsdict.py +0 -0
  54. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/module.py +0 -0
  55. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/path.py +0 -0
  56. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/similarity.py +0 -0
  57. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/core/utils/string.py +0 -0
  58. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/__hello__.pys +0 -0
  59. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/ansi.pys +0 -0
  60. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/__init__.pys +0 -0
  61. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/ast_dump.py +0 -0
  62. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/ast_literal_eval.py +0 -0
  63. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/ast_unparse.py +0 -0
  64. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/ast/ast_walk.py +0 -0
  65. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/brainfuck.pys +0 -0
  66. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/dis.pys +0 -0
  67. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/explorer.pys +0 -0
  68. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/fpstimer/__init__.pys +0 -0
  69. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/fpstimer/py_fpstimer.py +0 -0
  70. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/getch.pys +0 -0
  71. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/inspect.pys +0 -0
  72. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/jsdict.pys +0 -0
  73. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/keyword.pys +0 -0
  74. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/opcode.pys +0 -0
  75. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/parser.pys +0 -0
  76. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/site.pys +0 -0
  77. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/symtable.pys +0 -0
  78. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/sys.pys +0 -0
  79. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/token.pys +0 -0
  80. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/tokenize/__init__.pys +0 -0
  81. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/lib/tokenize/tok_untokenize.py +0 -0
  82. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/site-packages/this.pys +0 -0
  83. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript/this.py +0 -0
  84. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
  85. {pyscript_programming_language-1.11.0 → pyscript_programming_language-1.11.1}/pyscript_programming_language.egg-info/top_level.txt +0 -0
  86. {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">&quot;Enter a first number : &quot;</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">float</span><span style="color:#FFD705">(</span><span style="color:#DCDCAA">input</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Enter a second number: &quot;</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">op</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">input</span><span style="color:#FFD705">(</span><span style="color:#CE9178">&quot;Enter an operation (+, -, *, /): &quot;</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br><br></span><span style="color:#549952"># define a functions</span><span style="color:#D4D4D4"><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">add</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> + </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">sub</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> - </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">mul</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> * </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">floordiv</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#549952"># check b is zero</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> != </span><span style="color:#B5CEA8">0</span><span style="color:#D4D4D4"> ? </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> / </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> : </span><span style="color:#CE9178">&quot;Cannot be divided by 0!&quot;</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">&#x27;+&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">add</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} + {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">&#x27;-&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">sub</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} - {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">&#x27;*&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">mul</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} * {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">&#x27;/&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">floordiv</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} / {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#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">&quot;Unknown operation&quot;</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">&quot;Enter a first number : &quot;</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">float</span><span style="color:#FFD705">(</span><span style="color:#DCDCAA">input</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Enter a second number: &quot;</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">op</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">input</span><span style="color:#FFD705">(</span><span style="color:#CE9178">&quot;Enter an operation (+, -, *, /): &quot;</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br><br></span><span style="color:#549952"># define a functions</span><span style="color:#D4D4D4"><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">add</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> + </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">sub</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> - </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">mul</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> * </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">floordiv</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#549952"># check b is zero</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> != </span><span style="color:#B5CEA8">0</span><span style="color:#D4D4D4"> ? </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> / </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> : </span><span style="color:#CE9178">&quot;Cannot be divided by 0!&quot;</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">&#x27;+&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">add</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} + {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">&#x27;-&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">sub</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} - {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">&#x27;*&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">mul</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} * {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">&#x27;/&#x27;</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">floordiv</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">&quot;Result of {} / {} = {}&quot;</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#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">&quot;Unknown operation&quot;</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.
@@ -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.highlight and args.file is None:
128
- argument_error("-l/--highlight", "argument 'file' is required")
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("-r/--py-recursion", e)
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.extend(args.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
- parser.error(f"can't open file {path!r}: No such file or directory")
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.highlight:
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
- parser.error(f"file {path!r}: Highlight error: {e}")
216
+ argument_error('-l/--highlight', e)
192
217
 
193
218
  else:
194
219
  result = pys_runner(
@@ -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,
@@ -38,6 +39,7 @@ __all__ = (
38
39
  'checks',
39
40
  'constants',
40
41
  'context',
42
+ 'editor',
41
43
  'exceptions',
42
44
  'handlers',
43
45
  'highlight',
@@ -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.parameters = set()
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, iterable = node.header
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(iterable)
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.parameters
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.parameters = parameter_names
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.parameters = parameters
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.parameters:
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,15 @@
1
+ """
2
+ All Editor Application Implementations for PyScript.
3
+ """
4
+
5
+ from . import (
6
+ bases,
7
+ gui,
8
+ terminal
9
+ )
10
+
11
+ __all__ = (
12
+ 'bases',
13
+ 'gui',
14
+ 'terminal'
15
+ )
@@ -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