Code: Select all
import golly as g
letters = g.parse("""2bobobo2bobo4bo3b2o5bo4bo2bobo4bo20bo$2bobobo2bobo3b4ob2o2bobobo3bobo
3bobobobo3bo14bo$2bo5b5obo8bo2bobo5bo3bo2b3o4bo13bo$2bo6bobo3b3o4bo4bo
6bo3bobobobob5o4b3o4bo$2bo5b5o5bo2bo4bobobo3bo3bo3bo5bo13bo$9bobo2b4o
2bo2b2obo2bo4bo3bo9bo12bo$2bo6bobo4bo6b2o2b2obo4bobo15bo5bobo$52bo3$b
3o3bo3b3o3b3o5bo2b5o2b3o2b5o2b3o3b3o26b3o$o3bob2o2bo3bobo3bo3b2o2bo5bo
3bo5bobo3bobo3bo9b2o7b2o4bo3bo$o3bo2bo6bo5bo2bobo2bo5bo8bo2bo3bobo3bo
7b2o3b5o3b2o6bo$obobo2bo5bo4b2o2bo2bo3b3o2b4o5bo3b3o3b4obo2bobo15bo4bo
$o3bo2bo4bo7bob5o5bobo3bo3bo3bo3bo5bo7b2o3b5o3b2o4bo$o3bo2bo3bo4bo3bo
4bo2bo3bobo3bo3bo3bo3bobo3bo9b2o7b2o$b3o2b3ob5o2b3o5bo3b3o3b3o4bo4b3o
3b3o2bo2bo21bo$60bo3$2b2o4bo3b4o3b3o2b3o3b5ob5o2b3o2bo3bob3ob5obo3bobo
5bo5bobo3bo2b3o$bo2bo2bobo2bo3bobo3bobo2bo2bo5bo5bo3bobo3bo2bo5bo2bo2b
o2bo5b2o3b2ob2o2bobo3bo$o2b2obo3bobo3bobo5bo3bobo5bo5bo5bo3bo2bo5bo2bo
bo3bo5bobobobobobobobo3bo$obobobo3bob4o2bo5bo3bob4o2b4o2bob2o2b5o2bo5b
o2b2o4bo5bobobobobobobobo3bo$o2b2ob5obo3bobo5bo3bobo5bo5bo3bobo3bo2bo
5bo2bobo3bo5bo2bo2bobobobobo3bo$bo4bo3bobo3bobo3bobo2bo2bo5bo5bo3bobo
3bo2bo2bo2bo2bo2bo2bo5bo5bobo2b2obo3bo$2b3obo3bob4o3b3o2b3o3b5obo6b3o
2bo3bob3o2b2o3bo3bob5obo5bobo3bo2b3o4$4o3b3o2b4o3b3o2b5obo3bobo3bobo5b
obo3bobo3bob5ob2obo3b2o3bo$o3bobo3bobo3bobo3bo3bo3bo3bobo3bobo2bo2bobo
3bobo3bo5bobo2bo4bo2bobo$o3bobo3bobo3bobo7bo3bo3bobo3bobo2bo2bo2bobo2b
o3bo4bo2bo3bo3bobo3bo$4o2bo3bob4o3b3o4bo3bo3bo2bobo2bobobobo3bo4bobo4b
o3bo3bo3bo$o5bo3bobobo7bo3bo3bo3bo2bobo2bobobobo2bobo4bo4bo4bo3bo3bo$o
5bo2bo2bo2bo2bo3bo3bo3bo3bo3bo4bo3bo2bo3bo3bo3bo5bo4bo2bo$o6b2obobo3bo
2b3o4bo4b3o4bo4bo3bo2bo3bo3bo3b5ob2o3bob2o7b5o4$o8bo15bo9b2o7bo5bo3bob
o4bo$bo7bo15bo8bo9bo11bo4bo$4b3o2bob2o3b3o3b2obo2b3o2b4o2b2obobob2o2bo
3bobo2bobo2bobob2o2bob2o3b3o$3bo3bob2o2bobo3bobo2b2obo3bo2bo3bo2b2ob2o
2bobo3bobobo2bo2b2obo2bob2o2bobo3bo$3bo3bobo3bobo5bo3bob5o2bo3bo3bobo
3bobo3bob2o3bo2bo2bo2bobo3bobo3bo$3bo2b2ob2o2bobo3bobo2b2obo6bo3bo2b2o
bo3bobo3bobobo2bo2bo2bo2bobo3bobo3bo$4b2obobob2o3b3o3b2obo2b3o3bo4b2ob
obo3bobo3bobo2bo2bobo2bo2bobo3bo2b3o$42bo11bo$39b3o10b2o2$24bo41bobobo
$24bo40bo2bo2bo$ob2o3b2obobob2o2b4ob4obo3bobo3bobo3bobo3bobo3bob5o2bo
2bo2bo3bo2bo$2o2bobo2b2ob2o3bo6bo3bo3bobo3bobobobo2bobo2bo3bo4bo2bo3bo
3bobobobo$o3bobo3bobo5b3o3bo3bo3bo2bobo2bobobo3bo3bo3bo3bo4bo2bo2bo2bo
2bo$2o2bobo2b2obo8bo2bo3bo2b2o2bobo2bobobo2bobo2bo2b2o2bo5bo2bo2bo$ob
2o3b2obobo4b4o4b2o2b2obo3bo4bobo2bo3bo2b2obob5o3bobobo$o9bo45bo$o9bo
42b3o!""")
ltuples = tuple(zip(*[iter(letters)]*2))
lpositions = {' ': (0, 0, 1), '!': (2, 0, 1), '"': (4, 0, 3), '#': (8, 0, 5), '$': (14, 0, 5), '%': (20, 0, 5), '&': (26, 0, 5), "'": (32, 0, 1), '(': (34, 0, 2), ')': (37, 0, 2), '*': (40, 0, 5), '+': (46, 0, 5), ',': (52, 0, 2), '-': (55, 0, 3), '.': (59, 0, 1), '/': (61, 0, 3), '0': (0, 10, 5), '1': (6, 10, 3), '2': (10, 10, 5), '3': (16, 10, 5), '4': (22, 10, 5), '5': (28, 10, 5), '6': (34, 10, 5), '7': (40, 10, 5), '8': (46, 10, 5), '9': (52, 10, 5), ':': (58, 10, 1), ';': (60, 10, 2), '<': (63, 10, 5), '=': (69, 10, 5), '>': (75, 10, 5), '?': (81, 10, 5), '@': (0, 20, 5), 'A': (6, 20, 5), 'B': (12, 20, 5), 'C': (18, 20, 5), 'D': (24, 20, 5), 'E': (30, 20, 5), 'F': (36, 20, 5), 'G': (42, 20, 5), 'H': (48, 20, 5), 'I': (54, 20, 3), 'J': (58, 20, 5), 'K': (64, 20, 5), 'L': (70, 20, 5), 'M': (76, 20, 7), 'N': (84, 20, 5), 'O': (90, 20, 5), 'P': (0, 30, 5), 'Q': (6, 30, 5), 'R': (12, 30, 5), 'S': (18, 30, 5), 'T': (24, 30, 5), 'U': (30, 30, 5), 'V': (36, 30, 5), 'W': (42, 30, 7), 'X': (50, 30, 5), 'Y': (56, 30, 5), 'Z': (62, 30, 5), '[': (68, 30, 2), '\\': (71, 30, 3), ']': (75, 30, 2), '^': (78, 30, 5), '_': (84, 30, 5), '`': (0, 40, 2), 'a': (3, 40, 5), 'b': (9, 40, 5), 'c': (15, 40, 5), 'd': (21, 40, 5), 'e': (27, 40, 5), 'f': (33, 40, 4), 'g': (38, 40, 5), 'h': (44, 40, 5), 'i': (50, 40, 1), 'j': (52, 40, 3), 'k': (56, 40, 4), 'l': (61, 40, 2), 'm': (64, 40, 7), 'n': (72, 40, 5), 'o': (78, 40, 5), 'p': (0, 50, 5), 'q': (6, 50, 5), 'r': (12, 50, 4), 's': (17, 50, 5), 't': (23, 50, 4), 'u': (28, 50, 5), 'v': (34, 50, 5), 'w': (40, 50, 5), 'x': (46, 50, 5), 'y': (52, 50, 5), 'z': (58, 50, 5), '{': (64, 50, 3), '|': (68, 50, 1), '}': (70, 50, 3), '~': (74, 50, 5)}
g.show("Click to start typing from that point")
while True:
event = g.getevent()
if event.startswith("click"):
_, xs, ys, _, _ = event.split()
ocx = cx = int(xs)
cy = int(ys)
break
else:
g.doevent(event)
g.getevent(False)
for c in g.getstring("Enter text:"):
if c == '\n':
cy += 10
cx = ocx
continue
lx, ly, width = lpositions[c]
clist = [(xi-lx, yi-ly) for (xi, yi) in ltuples if lx <= xi < lx+width and ly <= yi < ly+9]
clist = [z for t in clist for z in t]
g.putcells(clist, cx, cy)
cx += width+1