easycoder 250107.2__py2.py3-none-any.whl → 250109.1__py2.py3-none-any.whl
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/__init__.py +1 -1
- easycoder/ec_graphics.py +51 -25
- easycoder/ec_program.py +1 -1
- easycoder/ec_renderer.py +57 -22
- easycoder/ec_screenspec.py +14 -7
- easycoder/ec_value.py +9 -2
- {easycoder-250107.2.dist-info → easycoder-250109.1.dist-info}/METADATA +1 -1
- easycoder-250109.1.dist-info/RECORD +19 -0
- easycoder-250107.2.dist-info/RECORD +0 -19
- {easycoder-250107.2.dist-info → easycoder-250109.1.dist-info}/LICENSE +0 -0
- {easycoder-250107.2.dist-info → easycoder-250109.1.dist-info}/WHEEL +0 -0
- {easycoder-250107.2.dist-info → easycoder-250109.1.dist-info}/entry_points.txt +0 -0
easycoder/__init__.py
CHANGED
easycoder/ec_graphics.py
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import sys, threading, json
|
|
2
1
|
from .ec_classes import FatalError, RuntimeError, Object
|
|
3
2
|
from .ec_handler import Handler
|
|
4
3
|
from .ec_screenspec import ScreenSpec
|
|
5
|
-
from .ec_renderer import Renderer
|
|
4
|
+
from .ec_renderer import Renderer, getUI
|
|
6
5
|
from .ec_program import flush
|
|
7
6
|
|
|
8
7
|
class Graphics(Handler):
|
|
@@ -32,7 +31,7 @@ class Graphics(Handler):
|
|
|
32
31
|
targetRecord = self.getVariable(command['name'])
|
|
33
32
|
keyword = targetRecord['keyword']
|
|
34
33
|
id = self.getRuntimeValue(command['id'])
|
|
35
|
-
uiElement =
|
|
34
|
+
uiElement = getUI().getElement(id)
|
|
36
35
|
if uiElement == None:
|
|
37
36
|
FatalError(self.program.compiler, f'There is no screen element with id \'{id}\'')
|
|
38
37
|
return -1
|
|
@@ -122,6 +121,7 @@ class Graphics(Handler):
|
|
|
122
121
|
for item in ['width', 'height', 'left', 'bottom', 'r', 'g', 'b', 'text']:
|
|
123
122
|
if command[item] == None:
|
|
124
123
|
FatalError(self.program.compiler, f'Missing property \'{item}\'')
|
|
124
|
+
else: return False
|
|
125
125
|
self.add(command)
|
|
126
126
|
record['elementID'] = command['id']
|
|
127
127
|
return False
|
|
@@ -199,7 +199,7 @@ class Graphics(Handler):
|
|
|
199
199
|
self.windowSpec.fill = (self.getRuntimeValue(command['fill'][0])/255, self.getRuntimeValue(command['fill'][1])/255, self.getRuntimeValue(command['fill'][2])/255)
|
|
200
200
|
self.windowCreated = True
|
|
201
201
|
else:
|
|
202
|
-
element =
|
|
202
|
+
element = getUI().createWidget(self.getWidgetSpec(command))
|
|
203
203
|
print(element)
|
|
204
204
|
except Exception as e:
|
|
205
205
|
RuntimeError(self.program, e)
|
|
@@ -224,8 +224,19 @@ class Graphics(Handler):
|
|
|
224
224
|
def r_ellipse(self, command):
|
|
225
225
|
return self.nextPC()
|
|
226
226
|
|
|
227
|
-
|
|
228
|
-
|
|
227
|
+
# Hide an element
|
|
228
|
+
def k_hide(self, command):
|
|
229
|
+
if self.nextIsSymbol():
|
|
230
|
+
record = self.getSymbolRecord()
|
|
231
|
+
type = record['keyword']
|
|
232
|
+
if self.isGraphicType(type):
|
|
233
|
+
command['target'] = record['id']
|
|
234
|
+
self.add(command)
|
|
235
|
+
return True
|
|
236
|
+
return False
|
|
237
|
+
|
|
238
|
+
def r_hide(self, command):
|
|
239
|
+
getUI().setVisible(self.getRuntimeValue(command['target']), False)
|
|
229
240
|
return self.nextPC()
|
|
230
241
|
|
|
231
242
|
def k_image(self, command):
|
|
@@ -257,12 +268,12 @@ class Graphics(Handler):
|
|
|
257
268
|
|
|
258
269
|
def r_move(self, command):
|
|
259
270
|
pos = (self.getRuntimeValue(command['x']), self.getRuntimeValue(command['y']))
|
|
260
|
-
|
|
271
|
+
getUI().moveElementTo(self.getRuntimeValue(command['target']), pos)
|
|
261
272
|
return self.nextPC()
|
|
262
273
|
|
|
263
274
|
def r_moveBy(self, command):
|
|
264
275
|
dist = (self.getRuntimeValue(command['dx']), self.getRuntimeValue(command['dy']))
|
|
265
|
-
|
|
276
|
+
getUI().moveElementBy(self.getRuntimeValue(command['target']), dist)
|
|
266
277
|
return self.nextPC()
|
|
267
278
|
|
|
268
279
|
# on click/tap {element} {action}
|
|
@@ -273,7 +284,7 @@ class Graphics(Handler):
|
|
|
273
284
|
if self.nextIsSymbol():
|
|
274
285
|
target = self.getSymbolRecord()
|
|
275
286
|
else:
|
|
276
|
-
|
|
287
|
+
Warning(f'{self.getToken()} is not a screen element')
|
|
277
288
|
return False
|
|
278
289
|
command['target'] = target['name']
|
|
279
290
|
command['goto'] = self.getPC() + 2
|
|
@@ -314,7 +325,7 @@ class Graphics(Handler):
|
|
|
314
325
|
data = Object()
|
|
315
326
|
data.pc = pc
|
|
316
327
|
data.index = index
|
|
317
|
-
|
|
328
|
+
getUI().setOnClick(id, data, oncb)
|
|
318
329
|
else:
|
|
319
330
|
name = record['name']
|
|
320
331
|
RuntimeError(self.program, f'{name} is not a clickable object')
|
|
@@ -326,25 +337,26 @@ class Graphics(Handler):
|
|
|
326
337
|
def r_rectangle(self, command):
|
|
327
338
|
return self.nextPC()
|
|
328
339
|
|
|
329
|
-
# render {spec}
|
|
340
|
+
# render spec {spec}
|
|
330
341
|
def k_render(self, command):
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
self.
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
342
|
+
if self.nextToken() in ['specification', 'spec']:
|
|
343
|
+
command['spec'] = self.nextValue()
|
|
344
|
+
command['parent'] = None
|
|
345
|
+
if self.peek() == 'in':
|
|
346
|
+
self.nextToken()
|
|
347
|
+
if self.nextIsSymbol():
|
|
348
|
+
command['parent'] = self.getSymbolRecord()['name']
|
|
349
|
+
self.add(command)
|
|
350
|
+
return True
|
|
351
|
+
return False
|
|
339
352
|
|
|
340
353
|
def r_render(self, command):
|
|
341
354
|
spec = self.getRuntimeValue(command['spec'])
|
|
342
355
|
parent = command['parent']
|
|
343
356
|
if parent !=None:
|
|
344
357
|
parent = self.getVariable(command['parent'])
|
|
345
|
-
self.ui = self.renderer.getUI()
|
|
346
358
|
try:
|
|
347
|
-
ScreenSpec().render(spec, parent
|
|
359
|
+
ScreenSpec().render(spec, parent)
|
|
348
360
|
except Exception as e:
|
|
349
361
|
RuntimeError(self.program, e)
|
|
350
362
|
return self.nextPC()
|
|
@@ -359,7 +371,6 @@ class Graphics(Handler):
|
|
|
359
371
|
def r_run(self, command):
|
|
360
372
|
self.renderer = Renderer()
|
|
361
373
|
self.renderer.init(self.windowSpec)
|
|
362
|
-
self.ui = self.renderer.getUI()
|
|
363
374
|
self.program.setExternalControl()
|
|
364
375
|
self.program.run(self.nextPC())
|
|
365
376
|
self.renderer.run()
|
|
@@ -390,7 +401,22 @@ class Graphics(Handler):
|
|
|
390
401
|
target = self.getVariable(command['target'])
|
|
391
402
|
id = target['value'][target['index']]['content']
|
|
392
403
|
value = self.getRuntimeValue(command['value'])
|
|
393
|
-
|
|
404
|
+
getUI().setAttribute(id, attribute, value)
|
|
405
|
+
return self.nextPC()
|
|
406
|
+
|
|
407
|
+
# Show an element (restore it to its current position)
|
|
408
|
+
def k_show(self, command):
|
|
409
|
+
if self.nextIsSymbol():
|
|
410
|
+
record = self.getSymbolRecord()
|
|
411
|
+
type = record['keyword']
|
|
412
|
+
if self.isGraphicType(type):
|
|
413
|
+
command['target'] = record['id']
|
|
414
|
+
self.add(command)
|
|
415
|
+
return True
|
|
416
|
+
return False
|
|
417
|
+
|
|
418
|
+
def r_show(self, command):
|
|
419
|
+
getUI().setVisible(self.getRuntimeValue(command['target']), True)
|
|
394
420
|
return self.nextPC()
|
|
395
421
|
|
|
396
422
|
def k_text(self, command):
|
|
@@ -453,7 +479,7 @@ class Graphics(Handler):
|
|
|
453
479
|
attribute = self.getRuntimeValue(v['attribute'])
|
|
454
480
|
target = self.getVariable(v['target'])
|
|
455
481
|
val = self.getSymbolValue(target)
|
|
456
|
-
v =
|
|
482
|
+
v = getUI().getAttribute(val['content'], attribute)
|
|
457
483
|
value = {}
|
|
458
484
|
value['type'] = 'int'
|
|
459
485
|
value['content'] = int(round(v))
|
|
@@ -475,7 +501,7 @@ class Graphics(Handler):
|
|
|
475
501
|
attribute = v['attribute']
|
|
476
502
|
value = {}
|
|
477
503
|
value['type'] = 'int'
|
|
478
|
-
value['content'] = int(round(
|
|
504
|
+
value['content'] = int(round(getUI().getWindowAttribute(attribute)))
|
|
479
505
|
return value
|
|
480
506
|
except Exception as e:
|
|
481
507
|
RuntimeError(self.program, e)
|
easycoder/ec_program.py
CHANGED
|
@@ -18,7 +18,6 @@ class Program:
|
|
|
18
18
|
|
|
19
19
|
def __init__(self, argv):
|
|
20
20
|
global queue
|
|
21
|
-
print(f'EasyCoder version {version("easycoder")}')
|
|
22
21
|
if len(argv) == 0:
|
|
23
22
|
print('No script supplied')
|
|
24
23
|
exit()
|
|
@@ -387,6 +386,7 @@ class Program:
|
|
|
387
386
|
|
|
388
387
|
# This is the program launcher
|
|
389
388
|
def Main():
|
|
389
|
+
print(f'EasyCoder version {version("easycoder")}')
|
|
390
390
|
if (len(sys.argv) > 1):
|
|
391
391
|
Program(sys.argv[1]).start()
|
|
392
392
|
else:
|
easycoder/ec_renderer.py
CHANGED
|
@@ -1,23 +1,31 @@
|
|
|
1
1
|
from kivy.app import App
|
|
2
2
|
from kivy.uix.widget import Widget
|
|
3
|
+
from kivy.graphics import Color, Ellipse, Rectangle
|
|
3
4
|
from kivy.uix.label import CoreLabel
|
|
4
5
|
from kivy.uix.image import AsyncImage
|
|
5
6
|
from kivy.core.window import Window
|
|
6
|
-
from kivy.graphics import Color, Ellipse, Rectangle
|
|
7
7
|
from kivy.utils import colormap
|
|
8
8
|
from kivy.clock import Clock
|
|
9
9
|
from kivy.vector import Vector
|
|
10
|
-
import math
|
|
10
|
+
import math, os
|
|
11
|
+
|
|
12
|
+
os.environ['KIVY_TEXT'] = 'pango'
|
|
13
|
+
|
|
14
|
+
ec_ui = None
|
|
15
|
+
|
|
16
|
+
def getUI():
|
|
17
|
+
global ec_ui
|
|
18
|
+
return ec_ui
|
|
11
19
|
|
|
12
|
-
# Get
|
|
13
|
-
#
|
|
20
|
+
# Get an actual screeen position or size value from a specified value
|
|
21
|
+
# such as {n}w/h, where w/h are percentages
|
|
14
22
|
# e.g. 25w or 50h
|
|
15
|
-
def
|
|
23
|
+
def getActual(val, spec=None):
|
|
16
24
|
if isinstance(val, str):
|
|
17
25
|
c = val[-1]
|
|
18
26
|
if c in ['w', 'h']:
|
|
19
27
|
val = int(val[0:len(val)-1])
|
|
20
|
-
if spec.parent == None:
|
|
28
|
+
if spec == None or spec.parent == None:
|
|
21
29
|
if c == 'w':
|
|
22
30
|
n = Window.width
|
|
23
31
|
else:
|
|
@@ -35,12 +43,13 @@ class Element():
|
|
|
35
43
|
def __init__(self, type, spec):
|
|
36
44
|
self.type = type
|
|
37
45
|
self.spec = spec
|
|
46
|
+
self.visible= True
|
|
38
47
|
self.actionCB = None
|
|
39
48
|
|
|
40
49
|
def getRelativePosition(self):
|
|
41
50
|
spec = self.spec
|
|
42
|
-
x =
|
|
43
|
-
y =
|
|
51
|
+
x = getActual(spec.pos[0], spec)
|
|
52
|
+
y = getActual(spec.pos[1], spec)
|
|
44
53
|
return Vector(x, y)
|
|
45
54
|
|
|
46
55
|
def getType(self):
|
|
@@ -57,10 +66,11 @@ class Element():
|
|
|
57
66
|
return pos
|
|
58
67
|
|
|
59
68
|
def setPos(self, pos):
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
69
|
+
if self.visible:
|
|
70
|
+
# Update the spec
|
|
71
|
+
self.spec.realpos = pos
|
|
72
|
+
# Update the displayed item
|
|
73
|
+
self.spec.item.pos = pos
|
|
64
74
|
|
|
65
75
|
def getSize(self):
|
|
66
76
|
return self.spec.realsize
|
|
@@ -69,6 +79,13 @@ class Element():
|
|
|
69
79
|
self.spec.realsize = size
|
|
70
80
|
self.spec.item.size = size
|
|
71
81
|
|
|
82
|
+
def setVisible(self, vis):
|
|
83
|
+
self.visible = vis
|
|
84
|
+
if vis:
|
|
85
|
+
self.setPos(self.spec.realpos)
|
|
86
|
+
else:
|
|
87
|
+
self.spec.item.pos = (Window.width, self.getPos()[1])
|
|
88
|
+
|
|
72
89
|
def getChildren(self):
|
|
73
90
|
return self.spec.children
|
|
74
91
|
|
|
@@ -99,10 +116,19 @@ class UI(Widget):
|
|
|
99
116
|
Color(c[0], c[1], c[2])
|
|
100
117
|
else:
|
|
101
118
|
Color(c[0]/255, c[1]/255, c[2]/255)
|
|
102
|
-
|
|
103
|
-
spec.realpos = pos
|
|
104
|
-
size = (getReal(spec, spec.size[0]), getReal(spec, spec.size[1]))
|
|
119
|
+
size = (getActual(spec.size[0], spec), getActual(spec.size[1], spec))
|
|
105
120
|
spec.realsize = size
|
|
121
|
+
# Deal with special case of 'center'
|
|
122
|
+
if spec.pos[0] == 'center':
|
|
123
|
+
left = getActual('50w', spec) - spec.realsize[0]/2
|
|
124
|
+
else:
|
|
125
|
+
left = getActual(spec.pos[0], spec)
|
|
126
|
+
if spec.pos[1] == 'center':
|
|
127
|
+
bottom = getActual('50h', spec) - spec.realsize[1]/2
|
|
128
|
+
else:
|
|
129
|
+
bottom = getActual(spec.pos[1], spec)
|
|
130
|
+
pos = (left, bottom)
|
|
131
|
+
spec.realpos = pos
|
|
106
132
|
if spec.parent != None:
|
|
107
133
|
pos = Vector(pos) + spec.parent.realpos
|
|
108
134
|
if spec.type == 'ellipse':
|
|
@@ -119,10 +145,12 @@ class UI(Widget):
|
|
|
119
145
|
Color(c[0]/255, c[1]/255, c[2]/255)
|
|
120
146
|
else:
|
|
121
147
|
Color(1, 1, 1, 1)
|
|
122
|
-
|
|
148
|
+
if self.font == None:
|
|
149
|
+
label = CoreLabel(text=spec.text, font_size=1000, halign='center', valign='center')
|
|
150
|
+
else:
|
|
151
|
+
label = CoreLabel(text=spec.text, font_context = None, font_name=self.font, font_size=1000, halign='center', valign='center')
|
|
123
152
|
label.refresh()
|
|
124
|
-
|
|
125
|
-
item = Rectangle(pos=pos, size=size, texture=text)
|
|
153
|
+
item = Rectangle(pos=pos, size=size, texture=label.texture)
|
|
126
154
|
elif spec.type == 'image':
|
|
127
155
|
item = AsyncImage(pos=pos, size=size, source=spec.source)
|
|
128
156
|
spec.item = item
|
|
@@ -142,6 +170,14 @@ class UI(Widget):
|
|
|
142
170
|
self.moveElementBy(id, Vector(pos) - element.getPos())
|
|
143
171
|
return
|
|
144
172
|
|
|
173
|
+
def setVisible(self, id, vis):
|
|
174
|
+
element = self.getElement(id)
|
|
175
|
+
if element != None:
|
|
176
|
+
element.setVisible(vis)
|
|
177
|
+
for id in element.getChildren():
|
|
178
|
+
self.setVisible(id, vis)
|
|
179
|
+
return
|
|
180
|
+
|
|
145
181
|
def on_touch_down(self, touch):
|
|
146
182
|
tp = touch.pos
|
|
147
183
|
x = tp[0]
|
|
@@ -214,9 +250,6 @@ class UI(Widget):
|
|
|
214
250
|
|
|
215
251
|
class Renderer(App):
|
|
216
252
|
|
|
217
|
-
def getUI(self):
|
|
218
|
-
return self.ui
|
|
219
|
-
|
|
220
253
|
def request_close(self):
|
|
221
254
|
print('close window')
|
|
222
255
|
self.kill()
|
|
@@ -230,7 +263,9 @@ class Renderer(App):
|
|
|
230
263
|
return self.ui
|
|
231
264
|
|
|
232
265
|
def init(self, spec):
|
|
233
|
-
|
|
266
|
+
global ec_ui
|
|
267
|
+
ec_ui = UI()
|
|
268
|
+
self.ui = ec_ui
|
|
234
269
|
self.title = spec.title
|
|
235
270
|
self.flush = spec.flush
|
|
236
271
|
self.kill = spec.kill
|
easycoder/ec_screenspec.py
CHANGED
|
@@ -1,21 +1,28 @@
|
|
|
1
1
|
# screenspec.py
|
|
2
2
|
|
|
3
3
|
from json import loads
|
|
4
|
-
from .ec_renderer import Object
|
|
4
|
+
from .ec_renderer import Object, getUI
|
|
5
|
+
|
|
6
|
+
global_id = 0
|
|
5
7
|
|
|
6
8
|
class ScreenSpec():
|
|
7
9
|
|
|
10
|
+
id = 0
|
|
11
|
+
|
|
8
12
|
# Get an attribute of an element
|
|
9
13
|
def getAttribute(self, id, attribute):
|
|
10
|
-
element =
|
|
14
|
+
element = getUI().getElement(id)
|
|
11
15
|
return element[attribute]
|
|
12
16
|
|
|
13
17
|
# Render a single widget
|
|
14
18
|
def createWidget(self, widget, parent):
|
|
19
|
+
global global_id
|
|
15
20
|
spec = Object()
|
|
16
21
|
type = widget['type']
|
|
17
22
|
spec.type = type
|
|
18
|
-
|
|
23
|
+
global_id += 1
|
|
24
|
+
if 'id' in widget: spec.id = widget['id']
|
|
25
|
+
else: spec.id = f'_{global_id}'
|
|
19
26
|
spec.pos = (widget['left'], widget['bottom'])
|
|
20
27
|
spec.size = (widget['width'], widget['height'])
|
|
21
28
|
if widget.get('fill') != None:
|
|
@@ -30,7 +37,7 @@ class ScreenSpec():
|
|
|
30
37
|
spec.color = widget['color']
|
|
31
38
|
spec.parent = parent
|
|
32
39
|
spec.children = []
|
|
33
|
-
|
|
40
|
+
getUI().createElement(spec)
|
|
34
41
|
|
|
35
42
|
if '#' in widget:
|
|
36
43
|
children = widget['#']
|
|
@@ -51,6 +58,8 @@ class ScreenSpec():
|
|
|
51
58
|
|
|
52
59
|
# Render a complete specification
|
|
53
60
|
def renderSpec(self, spec, parent):
|
|
61
|
+
if 'font' in spec: getUI().font = spec['font']
|
|
62
|
+
else: getUI().font = None
|
|
54
63
|
widgets = spec['#']
|
|
55
64
|
# If a list, iterate it
|
|
56
65
|
if isinstance(widgets, list):
|
|
@@ -61,8 +70,7 @@ class ScreenSpec():
|
|
|
61
70
|
self.createWidget(spec[widgets], parent)
|
|
62
71
|
|
|
63
72
|
# Render a graphic specification
|
|
64
|
-
def render(self, spec, parent
|
|
65
|
-
self.ui = ui
|
|
73
|
+
def render(self, spec, parent):
|
|
66
74
|
|
|
67
75
|
# If it'a string, process it
|
|
68
76
|
if isinstance(spec, str):
|
|
@@ -71,4 +79,3 @@ class ScreenSpec():
|
|
|
71
79
|
# If it's a 'dict', extract the spec and the args
|
|
72
80
|
else:
|
|
73
81
|
self.renderSpec(spec, parent)
|
|
74
|
-
|
easycoder/ec_value.py
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
from .ec_classes import FatalError
|
|
2
2
|
|
|
3
|
+
# Create a constant
|
|
4
|
+
def getConstant(str):
|
|
5
|
+
value = {}
|
|
6
|
+
value['type'] = 'text'
|
|
7
|
+
value['content'] = str
|
|
8
|
+
return value
|
|
9
|
+
|
|
3
10
|
class Value:
|
|
4
11
|
|
|
5
12
|
def __init__(self, compiler):
|
|
@@ -15,7 +22,7 @@ class Value:
|
|
|
15
22
|
return None
|
|
16
23
|
|
|
17
24
|
value = {}
|
|
18
|
-
|
|
25
|
+
|
|
19
26
|
if token == 'true':
|
|
20
27
|
value['type'] = 'boolean'
|
|
21
28
|
value['content'] = True
|
|
@@ -80,7 +87,7 @@ class Value:
|
|
|
80
87
|
value = domain.modifyValue(value)
|
|
81
88
|
|
|
82
89
|
return value
|
|
83
|
-
|
|
90
|
+
|
|
84
91
|
def compileConstant(self, token):
|
|
85
92
|
value = {}
|
|
86
93
|
if type(token) == 'str':
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: easycoder
|
|
3
|
-
Version:
|
|
3
|
+
Version: 250109.1
|
|
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>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
easycoder/README.md,sha256=PYqOc_SkIGiFbyCNs90y7JqoqWe4aO1xYIW-6bOnFKU,573
|
|
2
|
+
easycoder/__init__.py,sha256=wQ2Kn9KbWzsub8jAuII1644-ArCW8QmMuopYeT1FKfo,283
|
|
3
|
+
easycoder/ec.py,sha256=Nj5PRl8GsKjfGJKq0FOM1a7FeK3cN68CoIFg8lswQEg,221
|
|
4
|
+
easycoder/ec_classes.py,sha256=xnWBNak8oKydkFoxHLlq9wo3lIsB3aMnTDrqbtCfoWo,1512
|
|
5
|
+
easycoder/ec_compiler.py,sha256=f3zZRtbNsegBuRHTvTLK8BOdnuRq5p_p-1vtJYb-LiY,4800
|
|
6
|
+
easycoder/ec_condition.py,sha256=WSbONo4zs2sX1icOVpscZDFSCAEFmTsquoc2RGcLx_k,763
|
|
7
|
+
easycoder/ec_core.py,sha256=71rSNOwMrO0Ik1hdgTshOYRo2XVD0Br7gUZfCR7A0OA,86291
|
|
8
|
+
easycoder/ec_graphics.py,sha256=FesA34EeSTS7TH_84E5jCSJXnbc0ce9COf1VeXNWYi0,18639
|
|
9
|
+
easycoder/ec_handler.py,sha256=IJvxcrJJSR53d6DS_8H5qPHKhp9y5-GV4WXAjhZxu_o,2250
|
|
10
|
+
easycoder/ec_program.py,sha256=u51FxCnarubxwoAfREnqGMHf2YL7zaWnH9Gs8XUWmJ4,9843
|
|
11
|
+
easycoder/ec_renderer.py,sha256=yqLfXjCed1oFyFH0uzN6ffu1hot59vYx7yr1Sv7E_Uo,9225
|
|
12
|
+
easycoder/ec_screenspec.py,sha256=nhWuUJ4Jvew0iKmcfkTY-7EIvAWIwXWwrqub6aW4N3c,2609
|
|
13
|
+
easycoder/ec_timestamp.py,sha256=_3QFJPzIWZ9Rzk3SQOQJ-gwmvB07pg78k23SPntoZtY,288
|
|
14
|
+
easycoder/ec_value.py,sha256=zgDJTJhIg3yOvmnnKIfccIizmIhGbtvL_ghLTL1T5fg,2516
|
|
15
|
+
easycoder-250109.1.dist-info/entry_points.txt,sha256=JXAZbenl0TnsIft2FcGJbJ-4qoztVu2FuT8PFmWFexM,44
|
|
16
|
+
easycoder-250109.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
17
|
+
easycoder-250109.1.dist-info/WHEEL,sha256=Sgu64hAMa6g5FdzHxXv9Xdse9yxpGGMeagVtPMWpJQY,99
|
|
18
|
+
easycoder-250109.1.dist-info/METADATA,sha256=GYAtYztAU8hjM9c6e4_iu7Qb4mfZDlRwlsCkYCQGC5w,5817
|
|
19
|
+
easycoder-250109.1.dist-info/RECORD,,
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
easycoder/README.md,sha256=PYqOc_SkIGiFbyCNs90y7JqoqWe4aO1xYIW-6bOnFKU,573
|
|
2
|
-
easycoder/__init__.py,sha256=o6OZz0QSM7ohvjnlTSkXAzegCE7zs0mLOY6aHiiXb0I,283
|
|
3
|
-
easycoder/ec.py,sha256=Nj5PRl8GsKjfGJKq0FOM1a7FeK3cN68CoIFg8lswQEg,221
|
|
4
|
-
easycoder/ec_classes.py,sha256=xnWBNak8oKydkFoxHLlq9wo3lIsB3aMnTDrqbtCfoWo,1512
|
|
5
|
-
easycoder/ec_compiler.py,sha256=f3zZRtbNsegBuRHTvTLK8BOdnuRq5p_p-1vtJYb-LiY,4800
|
|
6
|
-
easycoder/ec_condition.py,sha256=WSbONo4zs2sX1icOVpscZDFSCAEFmTsquoc2RGcLx_k,763
|
|
7
|
-
easycoder/ec_core.py,sha256=71rSNOwMrO0Ik1hdgTshOYRo2XVD0Br7gUZfCR7A0OA,86291
|
|
8
|
-
easycoder/ec_graphics.py,sha256=yHNzpPBBXc7vLm3lIlWX5o8Fy0mVOCCUHiTSvqcAjlk,17742
|
|
9
|
-
easycoder/ec_handler.py,sha256=IJvxcrJJSR53d6DS_8H5qPHKhp9y5-GV4WXAjhZxu_o,2250
|
|
10
|
-
easycoder/ec_program.py,sha256=xNhFM6hoRaXx3Nl9Scn9f_qQL5-57WnvNXfwKdHl0rc,9844
|
|
11
|
-
easycoder/ec_renderer.py,sha256=UFMEXTWWWTMNys_KHDdweSA9wO7m15mpWr3Peisnzdk,8011
|
|
12
|
-
easycoder/ec_screenspec.py,sha256=qNqhbP16gAi2cRUD3W0dpb8tTC4-N4mE2l6HtOG0vbc,2405
|
|
13
|
-
easycoder/ec_timestamp.py,sha256=_3QFJPzIWZ9Rzk3SQOQJ-gwmvB07pg78k23SPntoZtY,288
|
|
14
|
-
easycoder/ec_value.py,sha256=7yJovn24pPC3jrURSQyEvZ8m826fXiqxsCpSvxwNrfQ,2403
|
|
15
|
-
easycoder-250107.2.dist-info/entry_points.txt,sha256=JXAZbenl0TnsIft2FcGJbJ-4qoztVu2FuT8PFmWFexM,44
|
|
16
|
-
easycoder-250107.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
17
|
-
easycoder-250107.2.dist-info/WHEEL,sha256=Sgu64hAMa6g5FdzHxXv9Xdse9yxpGGMeagVtPMWpJQY,99
|
|
18
|
-
easycoder-250107.2.dist-info/METADATA,sha256=UfdQPhoG9RLOhlJLWZHqRJ9Qvdb6mGtUqJFY9pZ4UVM,5817
|
|
19
|
-
easycoder-250107.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|