Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/taexportlogo.py
diff options
context:
space:
mode:
Diffstat (limited to 'taexportlogo.py')
-rw-r--r--taexportlogo.py411
1 files changed, 200 insertions, 211 deletions
diff --git a/taexportlogo.py b/taexportlogo.py
index 06fd061..2311872 100644
--- a/taexportlogo.py
+++ b/taexportlogo.py
@@ -22,15 +22,14 @@ IGNORE = ["hideblocks", "showblocks", "fullscreen", "polar", "cartesian",
"sandwichbottom"]
import math
+from tautils import walk_stack
try:
from sugar.datastore import datastore
except:
pass
-def save_logo(self, tw):
- """
- We need to set up the Turtle Art color palette and color processing.
- """
+def save_logo(tw):
+ """ We need to set up the Turtle Art color palette and color processing. """
color_processing = "\
to tasetpalette :i :r :g :b :myshade \r\
make \"s ((:myshade - 50) / 50) \r\
@@ -123,225 +122,215 @@ tasetshade :shade \r"
Walk through the code, substituting UCB Logo for Turtle Art primitives.
"""
for b in bs:
- this_stack = ""
- data = walk_stack(self, tw, b)
- # We need to catch several special cases: stacks, random, etc.
- stack = False
- namedstack = False
- namedbox = False
- refstack = False
- refbox = False
- myvar = ""
- for d in data:
- if type(d) == type((1,2)):
- (d,b) = d
- if type(d) is float:
- if namedbox:
- myvar += str(d)
- myvar += " "
- elif write:
- this_stack += "labelsize "
- this_stack += str(d)
- write = False
- else:
- this_stack += str(d)
- elif show == 2:
- # Use title for Journal objects
- if d[0:8] == '#smedia_':
- try:
- dsobject = datastore.get(d[8:])
- this_stack += dsobject.metadata['title']
- dsobject.destroy()
- except:
- this_stack += str(d)
- else:
- this_stack += str(d)
- show = 0
- else:
- # Translate some Turtle Art primitives into UCB Logo
- if namedstack:
- this_stack += "to "
- this_stack += d[2:].replace(" ","_")
- this_stack += "\r"
- stack = True
- namedstack = False
- elif namedbox:
- if d[0:2] == "#s":
- this_stack += "make \""
- this_stack += d[2:].replace(" ","_")
- this_stack += " "
- this_stack += myvar
- namedbox = False
- myvar = ""
- else:
- myvar += d
- elif refstack:
- this_stack += d[2:].replace(" ","_")
- this_stack += " "
- refstack = False
- elif refbox:
- this_stack += ":"
- this_stack += d[2:].replace(" ","_")
- refbox = False
- elif d == "stack":
- refstack = True
- elif d == "box":
- refbox = True
- elif d == "storeinbox":
- namedbox = True
- elif d == "storeinbox1":
- this_stack += "make \"box1"
- elif d == "box1":
- this_stack += ":box1"
- elif d == "storeinbox2":
- this_stack += "make \"box2"
- elif d == "box2":
- this_stack += ":box2"
- elif d == "shade":
- this_stack += ":shade"
- elif d == "setshade":
- setcolor = True
- this_stack += "tasetshade"
- elif d == "color":
- this_stack += "pencolor"
- elif d == "nop":
- this_stack += " "
- elif d == "start":
- this_stack += "to start\r"
- stack = True
- elif d == "nop1":
- this_stack += "to stack1\r"
- stack = True
- elif d == "nop2":
- this_stack += "to stack2\r"
- stack = True
- elif d == "nop3":
- namedstack = True
- elif d == "stopstack":
- this_stack += "stop"
- elif d == "clean":
- this_stack += "clearscreen"
- elif d == "setxy":
- setxy = True
- this_stack += "tasetxy"
- elif d == "color":
- this_stack += ":color"
- elif d == "plus":
- this_stack += "sum"
- elif d == "setcolor":
- setcolor = True
- this_stack += "tasetpencolor"
- elif d == "fillscreen":
- fillscreen = True
- setcolor = True
- this_stack += "tasetbackground"
- elif d == "random":
- random = True
- this_stack += "tarandom"
- elif d == "pensize":
- pensize = True
- this_stack += "tapensize"
- elif d == "arc":
- arc = True
- this_stack += "taarc"
- elif d == "pop":
- heap = True
- this_stack += "tapop"
- elif d == "push":
- heap = True
- this_stack += "tapush"
- elif d == "heap":
- heap = True
- this_stack += "taprintheap"
- elif d == "emptyheap":
- heap = True
- this_stack += "taclearheap"
- elif d == "kbinput":
- this_stack += "make \"keyboard readchar"
- elif d == "keyboard":
- this_stack += ":keyboard"
- elif d == 'insertimage':
- image = True
- elif image:
- # Skip this arg
- image = 2
- elif image == 2:
- # Skip this arg
- image = False
- elif d[0:2] == "#s":
- # output single characters as a string
- if len(d[2:]):
- this_stack += "\""
- this_stack += d[2:]
- # make a sentence out of everything else
- else:
- this_stack += "sentence "
- this_stack += d[2:].replace("\s"," \"")
- this_stack += "\r"
- elif d == "write":
- this_stack += "label"
- write = True
- elif d == 'show' or d == 'showaligned':
- this_stack += "label"
- show = 1
- elif d == "minus2":
- this_stack == "taminus"
- minus = True
- elif d in IGNORE:
- this_stack += " "
- elif show == 1 and d[0:2] == "#s":
- this_stack += d[2:]
- # We don't handle depreciated 'template' blocks
- else:
- this_stack += d
- this_stack += " "
- if stack:
- stack = False
- # if it is not a stack, we need to add a "to ta#" label
- elif len(data) > 0:
- this_stack = "to ta" + str(stack_count) + "\r" + this_stack
- stack_count += 1
- if len(data) > 0:
- code += this_stack
- code += "\rend\r"
+ this_stack = ""
+ data = walk_stack(tw, b)
+ # We need to catch several special cases: stacks, random, etc.
+ stack = False
+ namedstack = False
+ namedbox = False
+ refstack = False
+ refbox = False
+ myvar = ""
+ for d in data:
+ if type(d) == type((1, 2)):
+ (d, b) = d
+ if type(d) is float:
+ if namedbox:
+ myvar += str(d)
+ myvar += " "
+ elif write:
+ this_stack += "labelsize "
+ this_stack += str(d)
+ write = False
+ else:
+ this_stack += str(d)
+ elif show == 2:
+ # Use title for Journal objects
+ if d[0:8] == '#smedia_':
+ try:
+ dsobject = datastore.get(d[8:])
+ this_stack += dsobject.metadata['title']
+ dsobject.destroy()
+ except:
+ this_stack += str(d)
+ else:
+ this_stack += str(d)
+ show = 0
+ else:
+ # Translate some Turtle Art primitives into UCB Logo
+ if namedstack:
+ this_stack += "to "
+ this_stack += d[2:].replace(" ","_")
+ this_stack += "\r"
+ stack = True
+ namedstack = False
+ elif namedbox:
+ if d[0:2] == "#s":
+ this_stack += "make \""
+ this_stack += d[2:].replace(" ","_")
+ this_stack += " "
+ this_stack += myvar
+ namedbox = False
+ myvar = ""
+ else:
+ myvar += d
+ elif refstack:
+ this_stack += d[2:].replace(" ","_")
+ this_stack += " "
+ refstack = False
+ elif refbox:
+ this_stack += ":"
+ this_stack += d[2:].replace(" ","_")
+ refbox = False
+ elif d == "stack":
+ refstack = True
+ elif d == "box":
+ refbox = True
+ elif d == "storeinbox":
+ namedbox = True
+ elif d == "storeinbox1":
+ this_stack += "make \"box1"
+ elif d == "box1":
+ this_stack += ":box1"
+ elif d == "storeinbox2":
+ this_stack += "make \"box2"
+ elif d == "box2":
+ this_stack += ":box2"
+ elif d == "shade":
+ this_stack += ":shade"
+ elif d == "setshade":
+ setcolor = True
+ this_stack += "tasetshade"
+ elif d == "color":
+ this_stack += "pencolor"
+ elif d == "nop":
+ this_stack += " "
+ elif d == "start":
+ this_stack += "to start\r"
+ stack = True
+ elif d == "nop1":
+ this_stack += "to stack1\r"
+ stack = True
+ elif d == "nop2":
+ this_stack += "to stack2\r"
+ stack = True
+ elif d == "nop3":
+ namedstack = True
+ elif d == "stopstack":
+ this_stack += "stop"
+ elif d == "clean":
+ this_stack += "clearscreen"
+ elif d == "setxy":
+ setxy = True
+ this_stack += "tasetxy"
+ elif d == "color":
+ this_stack += ":color"
+ elif d == "plus":
+ this_stack += "sum"
+ elif d == "setcolor":
+ setcolor = True
+ this_stack += "tasetpencolor"
+ elif d == "fillscreen":
+ fillscreen = True
+ setcolor = True
+ this_stack += "tasetbackground"
+ elif d == "random":
+ random = True
+ this_stack += "tarandom"
+ elif d == "pensize":
+ pensize = True
+ this_stack += "tapensize"
+ elif d == "arc":
+ arc = True
+ this_stack += "taarc"
+ elif d == "pop":
+ heap = True
+ this_stack += "tapop"
+ elif d == "push":
+ heap = True
+ this_stack += "tapush"
+ elif d == "heap":
+ heap = True
+ this_stack += "taprintheap"
+ elif d == "emptyheap":
+ heap = True
+ this_stack += "taclearheap"
+ elif d == "kbinput":
+ this_stack += "make \"keyboard readchar"
+ elif d == "keyboard":
+ this_stack += ":keyboard"
+ elif d == 'insertimage':
+ image = True
+ elif image:
+ # Skip this arg
+ image = 2
+ elif image == 2:
+ # Skip this arg
+ image = False
+ elif d[0:2] == "#s":
+ # output single characters as a string
+ if len(d[2:]):
+ this_stack += "\""
+ this_stack += d[2:]
+ # make a sentence out of everything else
+ else:
+ this_stack += "sentence "
+ this_stack += d[2:].replace("\s"," \"")
+ this_stack += "\r"
+ elif d == "write":
+ this_stack += "label"
+ write = True
+ elif d == 'show' or d == 'showaligned':
+ this_stack += "label"
+ show = 1
+ elif d == "minus2":
+ this_stack == "taminus"
+ minus = True
+ elif d in IGNORE:
+ this_stack += " "
+ elif show == 1 and d[0:2] == "#s":
+ this_stack += d[2:]
+ # We don't handle depreciated 'template' blocks
+ else:
+ this_stack += d
+ this_stack += " "
+ if stack:
+ stack = False
+ # if it is not a stack, we need to add a "to ta#" label
+ elif len(data) > 0:
+ this_stack = "to ta" + str(stack_count) + "\r" + this_stack
+ stack_count += 1
+ if len(data) > 0:
+ code += this_stack
+ code += "\rend\r"
# We need to define some additional procedures.
if minus: # Logo minus only takes one argument.
code = "to taminus :y :x\routput sum :x minus :y\rend\r" + code
if random: # to avoid negative numbers
- code = "to tarandom :min :max\r" + \
- "output (random (:max - :min)) + :min\rend\r" +\
- code
+ code = "to tarandom :min :max\r" + \
+ "output (random (:max - :min)) + :min\rend\r" + code
if fillscreen: # Set shade than background color
- code = "to tasetbackground :color :shade\r" + \
- "tasetshade :shade\rsetbackground :color\rend\r" + \
- code
+ code = "to tasetbackground :color :shade\r" + \
+ "tasetshade :shade\rsetbackground :color\rend\r" + code
if setcolor: # Load the Turtle Art color palette.
- code = color_processing + code
+ code = color_processing + code
if pensize: # Return only the first argument.
- code = "to tapensize\routput first round pensize\rend\r" + code
+ code = "to tapensize\routput first round pensize\rend\r" + code
if setxy: # Swap and round arguments
- code = "to tasetxy :x :y\rpenup\rsetxy :x :y\rpendown\rend\r" + code
+ code = "to tasetxy :x :y\rpenup\rsetxy :x :y\rpendown\rend\r" + code
if arc: # Turtle Art 'arc' needs to be redefined.
- c = (2 * math.pi)/360
- code = "to taarc :a :r\rrepeat round :a [right 1 forward (" +\
- str(c) + " * :r)]\rend\r" + code
+ c = (2 * math.pi)/360
+ code = "to taarc :a :r\rrepeat round :a [right 1 forward (" + \
+ str(c) + " * :r)]\rend\r" + code
if heap: # Add psuedo 'push' and 'pop'
- code = "to tapush :foo\rmake \"taheap fput :foo :taheap\rend\r" + \
- "to tapop\rif emptyp :taheap [stop]\rmake \"tmp first :taheap\r" +\
- "make \"taheap butfirst :taheap\routput :tmp\rend\r" + \
- "to taclearheap\rmake \"taheap []\rend\r" + \
- "to taprintheap \rprint :taheap\rend\r" + \
- "make \"taheap []\r" + code
+ code = "to tapush :foo\rmake \"taheap fput :foo :taheap\rend\r" + \
+ "to tapop\rif emptyp :taheap [stop]\rmake \"tmp first :taheap\r" + \
+ "make \"taheap butfirst :taheap\routput :tmp\rend\r" + \
+ "to taclearheap\rmake \"taheap []\rend\r" + \
+ "to taprintheap \rprint :taheap\rend\r" + \
+ "make \"taheap []\r" + code
code = "window\r" + code
return code
-def walk_stack(self, tw, blk):
- top = tw.find_top_block(blk)
- if blk == top:
- code = tw.lc.run_blocks(top, tw.block_list.list, False)
- return code
- else:
- return []
-