easycoder 250116.4__tar.gz → 250118.2__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.
Potentially problematic release.
This version of easycoder might be problematic. Click here for more details.
- {easycoder-250116.4 → easycoder-250118.2}/PKG-INFO +1 -1
- {easycoder-250116.4 → easycoder-250118.2}/easycoder/__init__.py +1 -1
- {easycoder-250116.4 → easycoder-250118.2}/easycoder/ec_core.py +23 -8
- {easycoder-250116.4 → easycoder-250118.2}/easycoder/ec_graphics.py +83 -42
- easycoder-250118.2/easycoder/ec_gutils.py +84 -0
- {easycoder-250116.4 → easycoder-250118.2}/easycoder/ec_program.py +2 -2
- easycoder-250118.2/scripts/config.ecg +190 -0
- {easycoder-250116.4 → easycoder-250118.2}/scripts/points.ecs +1 -1
- easycoder-250118.2/test.ecs +3 -0
- easycoder-250116.4/easycoder/ec_gutils.py +0 -52
- {easycoder-250116.4 → easycoder-250118.2}/LICENSE +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/README.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/README.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/README.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/boolean.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/empty.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/ends.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/even.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/exists.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/greater.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/hasProperty.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/includes.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/is.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/less.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/list.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/none.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/not.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/numeric.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/object.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/odd.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/starts.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/conditions/string.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/add.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/append.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/assert.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/begin.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/clear.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/close.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/create.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/debug.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/decrement.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/delete.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/divide.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/exit.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/file.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/fork.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/get.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/go.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/gosub.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/if.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/import.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/increment.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/index.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/init.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/input.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/load.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/lock.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/module.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/multiply.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/negate.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/open.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/pop.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/post.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/print.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/push.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/put.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/read.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/release.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/replace.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/return.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/run.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/save.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/script.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/set.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/split.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/stack.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/stop.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/system.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/take.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/toggle.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/truncate.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/unlock.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/variable.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/wait.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/while.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/keywords/write.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/arg.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/args.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/cos.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/datime.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/decode.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/element.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/elements.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/empty.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/encode.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/error.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/files.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/float.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/from.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/hash.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/index.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/integer.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/json.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/keys.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/left.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/length.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/lowercase.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/memory.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/modification.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/modulo.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/newline.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/now.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/position.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/property.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/random.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/right.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/sin.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/stringify.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/tab.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/tan.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/timestamp.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/today.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/trim.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/type.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/uppercase.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/value.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/core/values/weekday.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/README.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/keywords/attach.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/keywords/close.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/keywords/create.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/keywords/ellipse.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/keywords/image.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/keywords/move.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/keywords/on.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/keywords/rectangle.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/keywords/render.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/keywords/run.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/keywords/set.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/keywords/text.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/values/attribute.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/doc/graphics/values/window.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/easycoder/README.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/easycoder/ec_classes.py +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/easycoder/ec_compiler.py +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/easycoder/ec_condition.py +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/easycoder/ec_handler.py +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/easycoder/ec_timestamp.py +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/easycoder/ec_value.py +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/images/Semoigo Dawn.jpg +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/json/graphics-demo.json +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/plugins/ec_keyboard.py +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/plugins/ec_p100.py +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/plugins/keyboards/4-function.json +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/plugins/keyboards/4-function.png +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/plugins/keyboards/qwerty-0.json +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/plugins/keyboards/qwerty-0.png +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/plugins/keyboards/qwerty-1.json +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/plugins/keyboards/qwerty-1.png +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/plugins/keyboards/qwerty-2.json +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/plugins/keyboards/qwerty-2.png +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/plugins/keyboards/qwerty-3.json +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/plugins/keyboards/qwerty-3.png +0 -0
- /easycoder-250116.4/plugins/example.py → /easycoder-250118.2/plugins/points.py +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/pyproject.toml +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/scripts/README.md +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/scripts/benchmark.ecs +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/scripts/ec_keyboard.py +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/scripts/fizzbuzz.ecs +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/scripts/hello.ecs +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/scripts/test.ecs +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/scripts/testg.ecg +0 -0
- {easycoder-250116.4 → easycoder-250118.2}/scripts/tests.ecs +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: easycoder
|
|
3
|
-
Version:
|
|
3
|
+
Version: 250118.2
|
|
4
4
|
Summary: Rapid scripting in English
|
|
5
5
|
Keywords: compiler,scripting,prototyping,programming,coding,python,low code,hypertalk,computer language,learn to code
|
|
6
6
|
Author-email: Graham Trott <gtanyware@gmail.com>
|
|
@@ -1427,7 +1427,6 @@ class Core(Handler):
|
|
|
1427
1427
|
|
|
1428
1428
|
def r_system(self, command):
|
|
1429
1429
|
value = self.getRuntimeValue(command['value'])
|
|
1430
|
-
background = command['background']
|
|
1431
1430
|
if value != None:
|
|
1432
1431
|
if command['background']:
|
|
1433
1432
|
subprocess.Popen(["sh",value,"&"])
|
|
@@ -1735,6 +1734,9 @@ class Core(Handler):
|
|
|
1735
1734
|
if symbolRecord['valueHolder']:
|
|
1736
1735
|
value['target'] = symbolRecord['name']
|
|
1737
1736
|
return value
|
|
1737
|
+
else:
|
|
1738
|
+
value['value'] = self.getValue()
|
|
1739
|
+
return value
|
|
1738
1740
|
self.warning(f'Core.compileValue: Token \'{self.getToken()}\' does not hold a value')
|
|
1739
1741
|
return None
|
|
1740
1742
|
|
|
@@ -1900,6 +1902,10 @@ class Core(Handler):
|
|
|
1900
1902
|
return value
|
|
1901
1903
|
return None
|
|
1902
1904
|
|
|
1905
|
+
if token == 'system':
|
|
1906
|
+
value['command'] = self.nextValue()
|
|
1907
|
+
return value
|
|
1908
|
+
|
|
1903
1909
|
return None
|
|
1904
1910
|
|
|
1905
1911
|
#############################################################################
|
|
@@ -2199,13 +2205,16 @@ class Core(Handler):
|
|
|
2199
2205
|
|
|
2200
2206
|
def v_property(self, v):
|
|
2201
2207
|
propertyValue = self.getRuntimeValue(v['name'])
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2208
|
+
if 'target' in v:
|
|
2209
|
+
targetName = v['target']
|
|
2210
|
+
target = self.getVariable(targetName)
|
|
2211
|
+
targetValue = self.getRuntimeValue(target)
|
|
2212
|
+
else:
|
|
2213
|
+
targetValue = self.getRuntimeValue(v['value'])
|
|
2205
2214
|
try:
|
|
2206
2215
|
val = targetValue[propertyValue]
|
|
2207
2216
|
except:
|
|
2208
|
-
RuntimeError(self.program, f'
|
|
2217
|
+
RuntimeError(self.program, f'This value does not have the property \'{propertyValue}\'')
|
|
2209
2218
|
return None
|
|
2210
2219
|
value = {}
|
|
2211
2220
|
value['content'] = val
|
|
@@ -2247,13 +2256,19 @@ class Core(Handler):
|
|
|
2247
2256
|
|
|
2248
2257
|
# This is used by the expression evaluator to get the value of a symbol
|
|
2249
2258
|
def v_symbol(self, symbolRecord):
|
|
2250
|
-
result = {}
|
|
2251
2259
|
if symbolRecord['keyword'] == 'variable':
|
|
2252
|
-
|
|
2253
|
-
return symbolValue
|
|
2260
|
+
return self.getSymbolValue(symbolRecord)
|
|
2254
2261
|
else:
|
|
2255
2262
|
return None
|
|
2256
2263
|
|
|
2264
|
+
def v_system(self, v):
|
|
2265
|
+
command = self.getRuntimeValue(v['command'])
|
|
2266
|
+
result = os.popen(command).read()
|
|
2267
|
+
value = {}
|
|
2268
|
+
value['type'] = 'text'
|
|
2269
|
+
value['content'] = result
|
|
2270
|
+
return value
|
|
2271
|
+
|
|
2257
2272
|
def v_tab(self, v):
|
|
2258
2273
|
value = {}
|
|
2259
2274
|
value['type'] = 'text'
|
|
@@ -9,7 +9,6 @@ class Graphics(Handler):
|
|
|
9
9
|
def __init__(self, compiler):
|
|
10
10
|
Handler.__init__(self, compiler)
|
|
11
11
|
self.utils = GUtils()
|
|
12
|
-
self.eventHandlers = {}
|
|
13
12
|
|
|
14
13
|
def getName(self):
|
|
15
14
|
return 'graphics'
|
|
@@ -18,22 +17,27 @@ class Graphics(Handler):
|
|
|
18
17
|
# Keyword handlers
|
|
19
18
|
|
|
20
19
|
def k_add(self, command):
|
|
21
|
-
elements = []
|
|
22
20
|
token = self.nextToken()
|
|
23
21
|
if self.isSymbol():
|
|
24
22
|
symbolRecord = self.getSymbolRecord()
|
|
25
23
|
name = symbolRecord['name']
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
keyword = symbolRecord['keyword']
|
|
25
|
+
if keyword == 'layout':
|
|
28
26
|
command['args'] = name
|
|
29
|
-
|
|
27
|
+
elif keyword in ['column', 'frame', 'tab']:
|
|
28
|
+
command['name'] = name
|
|
29
|
+
command['type'] = token
|
|
30
|
+
if self.peek() == 'to':
|
|
31
|
+
command['args'] = []
|
|
32
|
+
else:
|
|
33
|
+
command['args'] = self.utils.getArgs(self)
|
|
30
34
|
else:
|
|
31
35
|
command['type'] = token
|
|
32
36
|
command['args'] = self.utils.getArgs(self)
|
|
33
37
|
if self.nextIs('to'):
|
|
34
38
|
if self.nextIsSymbol():
|
|
35
39
|
symbolRecord = self.getSymbolRecord()
|
|
36
|
-
if symbolRecord['keyword']
|
|
40
|
+
if symbolRecord['keyword'] in ['column', 'frame', 'layout', 'tab']:
|
|
37
41
|
command['target'] = symbolRecord['name']
|
|
38
42
|
self.addCommand(command)
|
|
39
43
|
return True
|
|
@@ -43,14 +47,19 @@ class Graphics(Handler):
|
|
|
43
47
|
target = self.getVariable(command['target'])
|
|
44
48
|
type = command['type']
|
|
45
49
|
args = command['args']
|
|
50
|
+
param= None
|
|
46
51
|
if not 'layout' in target:
|
|
47
52
|
target['layout'] = []
|
|
48
53
|
if args[0] == '{':
|
|
54
|
+
if type in ['Column', 'Frame', 'Tab']:
|
|
55
|
+
record = self.getVariable(command['name'])
|
|
56
|
+
param = record['layout']
|
|
49
57
|
layout = json.loads(self.getRuntimeValue(json.loads(args)))
|
|
50
58
|
default = self.utils.getDefaultArgs(type)
|
|
51
59
|
for n in range(0, len(layout)):
|
|
52
60
|
args = self.utils.decode(default, layout[n])
|
|
53
|
-
|
|
61
|
+
item = self.utils.createElement(type, param, args)
|
|
62
|
+
target['layout'].append(item)
|
|
54
63
|
else:
|
|
55
64
|
v = self.getVariable(args)
|
|
56
65
|
target['layout'].append(v['layout'])
|
|
@@ -85,6 +94,12 @@ class Graphics(Handler):
|
|
|
85
94
|
target['window'].close()
|
|
86
95
|
return self.nextPC()
|
|
87
96
|
|
|
97
|
+
def k_column(self, command):
|
|
98
|
+
return self.compileVariable(command)
|
|
99
|
+
|
|
100
|
+
def r_column(self, command):
|
|
101
|
+
return self.nextPC()
|
|
102
|
+
|
|
88
103
|
# create {window} layout {layout}
|
|
89
104
|
# create {element} {args...}
|
|
90
105
|
def k_create(self, command):
|
|
@@ -110,14 +125,30 @@ class Graphics(Handler):
|
|
|
110
125
|
if type == 'window':
|
|
111
126
|
layout = self.getVariable(command['layout'])
|
|
112
127
|
title = self.getRuntimeValue(command['title'])
|
|
113
|
-
|
|
128
|
+
record['window'] = psg.Window(title, layout['layout'], finalize=True)
|
|
129
|
+
record['eventHandlers'] = {}
|
|
130
|
+
self.program.windowRecord = record
|
|
114
131
|
self.program.run(self.nextPC())
|
|
115
132
|
self.mainLoop()
|
|
116
|
-
self.program.kill()
|
|
133
|
+
# self.program.kill()
|
|
117
134
|
return 0
|
|
118
135
|
else:
|
|
119
136
|
RuntimeError(self.program, 'Variable is not a window or an element')
|
|
120
137
|
|
|
138
|
+
def k_init(self, command):
|
|
139
|
+
if self.nextIsSymbol():
|
|
140
|
+
symbolRecord = self.getSymbolRecord()
|
|
141
|
+
if symbolRecord['keyword'] in ['column', 'frame', 'layout', 'tab']:
|
|
142
|
+
command['target'] = symbolRecord['name']
|
|
143
|
+
self.add(command)
|
|
144
|
+
return True
|
|
145
|
+
return False
|
|
146
|
+
|
|
147
|
+
def r_init(self, command):
|
|
148
|
+
target = self.getVariable(command['target'])
|
|
149
|
+
target['layout'] = []
|
|
150
|
+
return self.nextPC()
|
|
151
|
+
|
|
121
152
|
def k_layout(self, command):
|
|
122
153
|
return self.compileVariable(command)
|
|
123
154
|
|
|
@@ -128,33 +159,38 @@ class Graphics(Handler):
|
|
|
128
159
|
token = self.nextToken()
|
|
129
160
|
if token == 'event':
|
|
130
161
|
command['key'] = self.nextValue()
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
162
|
+
if self.nextIs('in'):
|
|
163
|
+
if self.nextIsSymbol():
|
|
164
|
+
record = self.getSymbolRecord()
|
|
165
|
+
if record['keyword'] == 'window':
|
|
166
|
+
command['window'] = record['name']
|
|
167
|
+
command['goto'] = self.getPC() + 2
|
|
168
|
+
self.add(command)
|
|
169
|
+
self.nextToken()
|
|
170
|
+
pcNext = self.getPC()
|
|
171
|
+
cmd = {}
|
|
172
|
+
cmd['domain'] = 'core'
|
|
173
|
+
cmd['lino'] = command['lino']
|
|
174
|
+
cmd['keyword'] = 'gotoPC'
|
|
175
|
+
cmd['goto'] = 0
|
|
176
|
+
cmd['debug'] = False
|
|
177
|
+
self.addCommand(cmd)
|
|
178
|
+
self.compileOne()
|
|
179
|
+
cmd = {}
|
|
180
|
+
cmd['domain'] = 'core'
|
|
181
|
+
cmd['lino'] = command['lino']
|
|
182
|
+
cmd['keyword'] = 'stop'
|
|
183
|
+
cmd['debug'] = False
|
|
184
|
+
self.addCommand(cmd)
|
|
185
|
+
# Fixup the link
|
|
186
|
+
self.getCommandAt(pcNext)['goto'] = self.getPC()
|
|
187
|
+
return True
|
|
152
188
|
return False
|
|
153
189
|
|
|
154
190
|
def r_on(self, command):
|
|
155
191
|
key = self.getRuntimeValue(command['key'])
|
|
156
|
-
|
|
157
|
-
|
|
192
|
+
window = self.getVariable(command['window'])
|
|
193
|
+
window['eventHandlers'][key] = lambda: self.run(command['goto'])
|
|
158
194
|
return self.nextPC()
|
|
159
195
|
|
|
160
196
|
def k_popup(self, command):
|
|
@@ -221,13 +257,14 @@ class Graphics(Handler):
|
|
|
221
257
|
return value
|
|
222
258
|
return None
|
|
223
259
|
|
|
260
|
+
if self.getToken() == 'the':
|
|
261
|
+
self.nextToken()
|
|
262
|
+
|
|
263
|
+
token = self.getToken()
|
|
224
264
|
value['type'] = token
|
|
225
265
|
|
|
226
|
-
if token == '
|
|
227
|
-
|
|
228
|
-
value['type'] = 'text'
|
|
229
|
-
value['content'] = 'test'
|
|
230
|
-
return value
|
|
266
|
+
if token == 'event':
|
|
267
|
+
return value
|
|
231
268
|
|
|
232
269
|
return None
|
|
233
270
|
|
|
@@ -246,7 +283,9 @@ class Graphics(Handler):
|
|
|
246
283
|
else:
|
|
247
284
|
return None
|
|
248
285
|
|
|
249
|
-
def
|
|
286
|
+
def v_event(self, v):
|
|
287
|
+
v['type'] = 'text'
|
|
288
|
+
v['content'] = self.eventValues
|
|
250
289
|
return v
|
|
251
290
|
|
|
252
291
|
#############################################################################
|
|
@@ -261,13 +300,15 @@ class Graphics(Handler):
|
|
|
261
300
|
#############################################################################
|
|
262
301
|
# The main loop
|
|
263
302
|
def mainLoop(self):
|
|
303
|
+
windowRecord = self.program.windowRecord
|
|
304
|
+
window = windowRecord['window']
|
|
305
|
+
eventHandlers = windowRecord['eventHandlers']
|
|
264
306
|
while True:
|
|
265
|
-
event, values =
|
|
307
|
+
event, values = window.Read(timeout=100)
|
|
266
308
|
if event == psg.WINDOW_CLOSED or event == "EXIT":
|
|
267
309
|
break
|
|
268
310
|
if event == '__TIMEOUT__': self.program.flushCB()
|
|
269
311
|
else:
|
|
270
|
-
if event in
|
|
312
|
+
if event in eventHandlers:
|
|
271
313
|
self.eventValues = values
|
|
272
|
-
|
|
273
|
-
|
|
314
|
+
eventHandlers[event]()
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import PySimpleGUI as psg
|
|
2
|
+
import json
|
|
3
|
+
|
|
4
|
+
class GUtils:
|
|
5
|
+
|
|
6
|
+
# Parse a set of compile-time arguments
|
|
7
|
+
def getArgs(self, handler):
|
|
8
|
+
args = []
|
|
9
|
+
while True:
|
|
10
|
+
key = handler.nextToken()
|
|
11
|
+
value = json.dumps(handler.nextValue())
|
|
12
|
+
args.append(f'{key}={value}')
|
|
13
|
+
if handler.peek() == 'and':
|
|
14
|
+
handler.nextToken()
|
|
15
|
+
else: break
|
|
16
|
+
v = {}
|
|
17
|
+
v['type'] = 'text'
|
|
18
|
+
v['content'] = json.dumps(args)
|
|
19
|
+
return json.dumps(v)
|
|
20
|
+
|
|
21
|
+
# Get the default args for a graphic element
|
|
22
|
+
def getDefaultArgs(self, type):
|
|
23
|
+
args = {}
|
|
24
|
+
if type == 'Button':
|
|
25
|
+
args['button_text'] = '(empty)'
|
|
26
|
+
args['size'] = (None, None)
|
|
27
|
+
if type == 'Checkbox':
|
|
28
|
+
args['text'] = ''
|
|
29
|
+
args['key'] = None
|
|
30
|
+
args['size'] = (None, None)
|
|
31
|
+
args['expand_x'] = False
|
|
32
|
+
elif type == 'Column':
|
|
33
|
+
args['expand_x'] = False
|
|
34
|
+
args['pad'] = (0, 0)
|
|
35
|
+
elif type == 'Input':
|
|
36
|
+
args['key'] = None
|
|
37
|
+
args['size'] = (None, None)
|
|
38
|
+
elif type == 'Multiline':
|
|
39
|
+
args['default_text'] = ''
|
|
40
|
+
args['key'] = None
|
|
41
|
+
args['size'] = (None, None)
|
|
42
|
+
elif type == 'Text':
|
|
43
|
+
args['text'] = '(empty)'
|
|
44
|
+
args['size'] = (None, None)
|
|
45
|
+
args['expand_x'] = False
|
|
46
|
+
return args
|
|
47
|
+
|
|
48
|
+
# Decode an argument at runtime
|
|
49
|
+
def decode(self, args, text):
|
|
50
|
+
p = text.find('=')
|
|
51
|
+
if p > 0:
|
|
52
|
+
key = text[0:p]
|
|
53
|
+
value = json.loads(text[p+1:])['content']
|
|
54
|
+
args[key] = value
|
|
55
|
+
return args
|
|
56
|
+
return None
|
|
57
|
+
|
|
58
|
+
# Create an element
|
|
59
|
+
def createElement(self, type, param, args):
|
|
60
|
+
if type == 'Button':
|
|
61
|
+
size = self.getSize(args)
|
|
62
|
+
return psg.Button(button_text=args['button_text'], size=size)
|
|
63
|
+
if type == 'Checkbox':
|
|
64
|
+
size = self.getSize(args)
|
|
65
|
+
return psg.Checkbox(args['text'], key=args['key'], expand_x=args['expand_x'], size=size)
|
|
66
|
+
if type == 'Column':
|
|
67
|
+
return psg.Column(param, expand_x=args['expand_x'], pad=args['pad'])
|
|
68
|
+
elif type == 'Input':
|
|
69
|
+
size = self.getSize(args)
|
|
70
|
+
return psg.Input(key=args['key'], size=size)
|
|
71
|
+
elif type == 'Multiline':
|
|
72
|
+
size = self.getSize(args)
|
|
73
|
+
return psg.Multiline(default_text=args['default_text'], key=args['key'], size=size)
|
|
74
|
+
elif type == 'Text':
|
|
75
|
+
size = self.getSize(args)
|
|
76
|
+
return psg.Text(text=args['text'], size=size, expand_x=args['expand_x'])
|
|
77
|
+
else: return None
|
|
78
|
+
|
|
79
|
+
def getSize(self, args):
|
|
80
|
+
size = args['size']
|
|
81
|
+
if size == (None, None):
|
|
82
|
+
return size
|
|
83
|
+
size = size.split()
|
|
84
|
+
return (size[0], size[1])
|
|
@@ -127,7 +127,7 @@ class Program:
|
|
|
127
127
|
|
|
128
128
|
def doValue(self, value):
|
|
129
129
|
if value == None:
|
|
130
|
-
|
|
130
|
+
RuntimeError(self, f'Undefined value (variable not initialized?)')
|
|
131
131
|
|
|
132
132
|
result = {}
|
|
133
133
|
valType = value['type']
|
|
@@ -150,7 +150,7 @@ class Program:
|
|
|
150
150
|
name = value['name']
|
|
151
151
|
symbolRecord = self.getSymbolRecord(name)
|
|
152
152
|
if symbolRecord['value'] == [None]:
|
|
153
|
-
RuntimeWarning(self
|
|
153
|
+
RuntimeWarning(self, f'Variable "{name}" has no value')
|
|
154
154
|
return None
|
|
155
155
|
handler = self.domainIndex[symbolRecord['domain']].valueHandler('symbol')
|
|
156
156
|
result = handler(symbolRecord)
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
! RBR XR Configurator
|
|
2
|
+
|
|
3
|
+
script Config
|
|
4
|
+
|
|
5
|
+
layout MainLayout
|
|
6
|
+
layout SecondLayout
|
|
7
|
+
layout Row
|
|
8
|
+
column Column
|
|
9
|
+
window MainWindow
|
|
10
|
+
window SecondWindow
|
|
11
|
+
variable SSID
|
|
12
|
+
variable Value
|
|
13
|
+
variable Content
|
|
14
|
+
variable IPAddr
|
|
15
|
+
variable N
|
|
16
|
+
|
|
17
|
+
! debug step
|
|
18
|
+
|
|
19
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
20
|
+
! Create the main window
|
|
21
|
+
init MainLayout
|
|
22
|
+
|
|
23
|
+
! The top row is the room name
|
|
24
|
+
init Row
|
|
25
|
+
add Text text `Room Name` and expand_x true to Row
|
|
26
|
+
add Input key `-NAME-` and size `40 1` to Row
|
|
27
|
+
add Button button_text `Set Name` and size `20 1` to Row
|
|
28
|
+
add Row to MainLayout
|
|
29
|
+
|
|
30
|
+
! The second row is the host SSID
|
|
31
|
+
init Row
|
|
32
|
+
add Text text `Host SSID` and expand_x true to Row
|
|
33
|
+
add Input key `-SSID-` and size `40 1` to Row
|
|
34
|
+
add Button button_text `Set Host SSID` and size `20 1` to Row
|
|
35
|
+
add Row to MainLayout
|
|
36
|
+
|
|
37
|
+
! The third row is the host password
|
|
38
|
+
init Row
|
|
39
|
+
add Text text `Host Password` and expand_x true to Row
|
|
40
|
+
add Input key `-HPASS-` and size `40 1` to Row
|
|
41
|
+
add Button button_text `Set Host Password` and size `20 1` to Row
|
|
42
|
+
add Row to MainLayout
|
|
43
|
+
|
|
44
|
+
! The fourth row is the device password
|
|
45
|
+
init Row
|
|
46
|
+
add Text text `Device Password` and expand_x true to Row
|
|
47
|
+
add Input key `-DPASS-` and size `40 1` to Row
|
|
48
|
+
add Button button_text `Set Device Password` and size `20 1` to Row
|
|
49
|
+
add Row to MainLayout
|
|
50
|
+
|
|
51
|
+
! The fifth row deals with the LED
|
|
52
|
+
init Column
|
|
53
|
+
init Row
|
|
54
|
+
add Text text `Pin #` to Row
|
|
55
|
+
add Input key `-LED_PIN-` and size `4 1` to Row
|
|
56
|
+
add Text text ` ` to Row
|
|
57
|
+
add Checkbox text `Invert the pin logic` and key `-LED_INVERT-` to Row
|
|
58
|
+
add Text text ` ` to Row
|
|
59
|
+
add Row to Column
|
|
60
|
+
init Row
|
|
61
|
+
add Text text `LED` and size `40 1` and expand_x true to Row
|
|
62
|
+
add Column expand_x true to Row
|
|
63
|
+
add Button button_text `Set LED Params` and size `20 1` to Row
|
|
64
|
+
add Row to MainLayout
|
|
65
|
+
|
|
66
|
+
! The sixth row deals with the relay
|
|
67
|
+
init Column
|
|
68
|
+
init Row
|
|
69
|
+
add Text text `Pin #` to Row
|
|
70
|
+
add Input key `-RELAY_PIN-` and size `4 1` to Row
|
|
71
|
+
add Text text ` ` to Row
|
|
72
|
+
add Checkbox text `Invert the pin logic` and key `-RELAY_INVERT-` to Row
|
|
73
|
+
add Text text ` ` to Row
|
|
74
|
+
add Row to Column
|
|
75
|
+
init Row
|
|
76
|
+
add Text text `Relay` and size `40 1` and expand_x true to Row
|
|
77
|
+
add Column expand_x true to Row
|
|
78
|
+
add Button button_text `Set Relay Params` and size `20 1` to Row
|
|
79
|
+
add Row to MainLayout
|
|
80
|
+
|
|
81
|
+
! The final row is the various buttons
|
|
82
|
+
init Row
|
|
83
|
+
add Button button_text `Connect` to Row
|
|
84
|
+
add Button button_text `Set All` to Row
|
|
85
|
+
add Button button_text `Exit` to Row
|
|
86
|
+
add Row to MainLayout
|
|
87
|
+
|
|
88
|
+
create MainWindow `RBR XR Config`
|
|
89
|
+
layout MainLayout
|
|
90
|
+
|
|
91
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
92
|
+
! Event handlers for the main window
|
|
93
|
+
|
|
94
|
+
on event `Set Name` in MainWindow go to SetName
|
|
95
|
+
on event `Set Host SSID` in MainWindow go to SetHostSSID
|
|
96
|
+
on event `Set Host Password` in MainWindow go to SetHostPassword
|
|
97
|
+
on event `Set Device Password` in MainWindow go to SetDevicePassword
|
|
98
|
+
on event `Set LED Params` in MainWindow go to SetLEDParams
|
|
99
|
+
on event `Set Relay Params` in MainWindow go to SetRelayParams
|
|
100
|
+
on event `Connect` in MainWindow go to Connect
|
|
101
|
+
on event `Set All` in MainWindow go to SetAll
|
|
102
|
+
on event `Exit` in MainWindow
|
|
103
|
+
begin
|
|
104
|
+
close MainWindow
|
|
105
|
+
exit
|
|
106
|
+
end
|
|
107
|
+
stop
|
|
108
|
+
|
|
109
|
+
SetName:
|
|
110
|
+
put property `-NAME-` of the event into Value
|
|
111
|
+
print `Name: ` cat Value
|
|
112
|
+
stop
|
|
113
|
+
|
|
114
|
+
SetHostSSID:
|
|
115
|
+
put property `-SSID-` of the event into Value
|
|
116
|
+
print `Host SSID: ` cat Value
|
|
117
|
+
stop
|
|
118
|
+
|
|
119
|
+
SetHostPassword:
|
|
120
|
+
put property `-HPASS-` of the event into Value
|
|
121
|
+
print `Host Password: ` cat Value
|
|
122
|
+
stop
|
|
123
|
+
|
|
124
|
+
SetDevicePassword:
|
|
125
|
+
put property `-DPASS-` of the event into Value
|
|
126
|
+
print `Device Password: ` cat Value
|
|
127
|
+
stop
|
|
128
|
+
|
|
129
|
+
SetLEDParams:
|
|
130
|
+
put property `-LED_PIN-` of the event into Value
|
|
131
|
+
print `LED Pin: ` cat Value
|
|
132
|
+
put property `-LED_INVERT-` of the event into Value
|
|
133
|
+
print `LED Invert: ` cat Value
|
|
134
|
+
stop
|
|
135
|
+
|
|
136
|
+
SetRelayParams:
|
|
137
|
+
put property `-RELAY_PIN-` of the event into Value
|
|
138
|
+
print `Relay Pin: ` cat Value
|
|
139
|
+
put property `-RELAY_INVERT-` of the event into Value
|
|
140
|
+
print `Relay Invert: ` cat Value
|
|
141
|
+
stop
|
|
142
|
+
|
|
143
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
144
|
+
! Set all parameters
|
|
145
|
+
SetAll:
|
|
146
|
+
fork to SetName
|
|
147
|
+
fork to SetHostSSID
|
|
148
|
+
fork to SetHostPassword
|
|
149
|
+
fork to SetDevicePassword
|
|
150
|
+
fork to SetLEDParams
|
|
151
|
+
fork to SetRelayParams
|
|
152
|
+
stop
|
|
153
|
+
|
|
154
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
155
|
+
! Specify an access point
|
|
156
|
+
Connect:
|
|
157
|
+
init SecondLayout
|
|
158
|
+
|
|
159
|
+
init Row
|
|
160
|
+
add Text text `Device SSID` and expand_x true to Row
|
|
161
|
+
add Input key `-SSID-` and size `20 1` to Row
|
|
162
|
+
add Row to SecondLayout
|
|
163
|
+
|
|
164
|
+
init Row
|
|
165
|
+
add Button button_text `Connect` to Row
|
|
166
|
+
add Row to SecondLayout
|
|
167
|
+
|
|
168
|
+
create SecondWindow `Connect`
|
|
169
|
+
layout SecondLayout
|
|
170
|
+
|
|
171
|
+
on event `Connect` in SecondWindow
|
|
172
|
+
begin
|
|
173
|
+
put property `-SSID-` of the event into SSID
|
|
174
|
+
go to OpenConnection
|
|
175
|
+
end
|
|
176
|
+
stop
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
180
|
+
! Connect to the access point
|
|
181
|
+
OpenConnection:
|
|
182
|
+
system `nmcli dev wifi connect ` cat SSID cat ` password 00000000`
|
|
183
|
+
put system `hostname -I` into IPAddr
|
|
184
|
+
put the position of the last `.` in IPAddr into N
|
|
185
|
+
increment N
|
|
186
|
+
put left N of IPAddr into IPAddr
|
|
187
|
+
put IPAddr cat `1` into IPAddr
|
|
188
|
+
print `Connected to ` cat IPAddr
|
|
189
|
+
close SecondWindow
|
|
190
|
+
stop
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import PySimpleGUI as psg
|
|
2
|
-
import json
|
|
3
|
-
|
|
4
|
-
class GUtils:
|
|
5
|
-
|
|
6
|
-
# Parse a set of compile-time arguments
|
|
7
|
-
def getArgs(self, handler):
|
|
8
|
-
args = []
|
|
9
|
-
while True:
|
|
10
|
-
key = handler.nextToken()
|
|
11
|
-
value = json.dumps(handler.nextValue())
|
|
12
|
-
args.append(f'{key}={value}')
|
|
13
|
-
if handler.peek() == 'and':
|
|
14
|
-
handler.nextToken()
|
|
15
|
-
else: break
|
|
16
|
-
v = {}
|
|
17
|
-
v['type'] = 'text'
|
|
18
|
-
v['content'] = json.dumps(args)
|
|
19
|
-
return json.dumps(v)
|
|
20
|
-
|
|
21
|
-
# Get the default args for a graphic element
|
|
22
|
-
def getDefaultArgs(self, type):
|
|
23
|
-
args = {}
|
|
24
|
-
if type == 'Text':
|
|
25
|
-
args['text'] = '(empty)'
|
|
26
|
-
args['expand_x'] = False
|
|
27
|
-
elif type == 'Input':
|
|
28
|
-
args['key'] = None
|
|
29
|
-
args['size'] = (None, None)
|
|
30
|
-
elif type == 'Button':
|
|
31
|
-
args['button_text'] = '(empty)'
|
|
32
|
-
return args
|
|
33
|
-
|
|
34
|
-
# Decode an argument at runtime
|
|
35
|
-
def decode(self, args, text):
|
|
36
|
-
p = text.find('=')
|
|
37
|
-
if p > 0:
|
|
38
|
-
key = text[0:p]
|
|
39
|
-
value = json.loads(text[p+1:])['content']
|
|
40
|
-
args[key] = value
|
|
41
|
-
return args
|
|
42
|
-
return None
|
|
43
|
-
|
|
44
|
-
# Create an element
|
|
45
|
-
def createElement(self, type, args):
|
|
46
|
-
if type == 'Text': return psg.Text(text=args['text'], expand_x=args['expand_x'])
|
|
47
|
-
elif type == 'Input':
|
|
48
|
-
size = args['size'].split()
|
|
49
|
-
size = (size[0], size[1])
|
|
50
|
-
return psg.Input(key=args['key'], size=size)
|
|
51
|
-
elif type == 'Button': return psg.Button(button_text=args['button_text'])
|
|
52
|
-
else: return None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|