From 861293558f6ab522d615839556de58db8bf04fb1 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Mon, 01 Feb 2010 15:44:12 +0000 Subject: oofy talogo --- (limited to 'talogo.py') diff --git a/talogo.py b/talogo.py index f1d9a42..64f5736 100644 --- a/talogo.py +++ b/talogo.py @@ -35,29 +35,17 @@ try: except: pass -class noKeyError(UserDict): - __missing__=lambda x,y: 0 - -class taLogo: pass - -from tacanvas import * -from tagplay import * -from tajail import * from constants import * +from tacanvas import * +from tagplay import play_audio, play_movie_from_file, stop_media +from tajail import myfunc, myfunc_import from gettext import gettext as _ procstop = False -def movie_media_type(suffix): - if suffix.replace('.','') in ['ogv','vob','mp4','wmv','mov', 'mpeg']: - return True - return False - -def audio_media_type(suffix): - if suffix.replace('.','') in ['ogg', 'oga', 'm4a']: - return True - return False +class noKeyError(UserDict): + __missing__=lambda x,y: 0 class symbol: def __init__(self, name): @@ -76,332 +64,28 @@ class logoerror(Exception): def __str__(self): return repr(self.value) -def run_blocks(lc, blk, blocks, run_flag): - for x in lc.stacks.keys(): - lc.stacks[x] = None - lc.stacks['stack1'] = None - lc.stacks['stack2'] = None - for b in blocks: - if b.name == 'hat1': - lc.stacks['stack1'] = readline(lc,blocks_to_code(lc, b)) - if b.name=='hat2': - lc.stacks['stack2'] = readline(lc,blocks_to_code(lc, b)) - if b.name == 'hat': - if (b.connections[1] is not None): - text = b.connections[1].values[0] - lc.stacks['stack3'+text] = readline(lc,blocks_to_code(lc, b)) - code = blocks_to_code(lc, blk) - if run_flag is True: - print "code: %s" % (code) - setup_cmd(lc, code) - else: return code - -def blocks_to_code(lc, blk): - if blk is None: - return ['%nothing%'] - code = [] - dock = blk.docks[0] - if len(dock)>4: - code.append(dock[4]) - if blk.primitive is not None: - code.append(blk.primitive) - else: - if blk.name=='number': - try: - code.append(float(blk.values[0])) - except ValueError: - code.append(float(ord(blk.values[0][0]))) - elif blk.name=='string' or blk.name=='title': - if type(blk.values[0]) == float or type(blk.values[0]) == int: - if int(blk.values[0]) == blk.values[0]: - blk.values[0] = int(blk.values[0]) - code.append('#s'+str(blk.values[0])) - else: - code.append('#s'+blk.values[0]) - elif blk.name=='journal': - if blk.values[0] is not None: - code.append('#smedia_'+str(blk.values[0])) - else: - code.append('#smedia_None') - elif blk.name=='description': - if blk.values[0] is not None: - code.append('#sdescr_'+str(blk.values[0])) - else: - code.append('#sdescr_None') - elif blk.name=='audio': - if blk.values[0] is not None: - code.append('#saudio_'+str(blk.values[0])) - else: - code.append('#saudio_None') - else: - return ['%nothing%'] - for i in range(1,len(blk.connections)): - b = blk.connections[i] - dock = blk.docks[i] - if len(dock)>4: - for c in dock[4]: - code.append(c) - if b is not None: - code.extend(blocks_to_code(lc, b)) - elif blk.docks[i][0] not in ['flow', 'unavailable']: - code.append('%nothing%') - return code - -def intern(lc, str): - if str in lc.oblist: return lc.oblist[str] - sym = symbol(str) - lc.oblist[str] = sym - return sym - -def parseline(str): - split = re.split(r"\s|([\[\]()])", str) - return [x for x in split if x and x != ""] - -def readline(lc, line): - res = [] - while line: - token = line.pop(0) - if isNumberType(token): res.append(token) - elif token.isdigit(): res.append(float(token)) - elif token[0]=='-' and token[1:].isdigit(): - res.append(-float(token[1:])) - elif token[0] == '"': res.append(token[1:]) - elif token[0:2] == "#s": res.append(token[2:]) - elif token == '[': res.append(readline(lc,line)) - elif token == ']': return res - else: res.append(intern(lc, token)) - return res - -def setup_cmd(lc, str): - lc.tw.active_turtle.hide() - lc.procstop=False - list = readline(lc, str) - lc.step = start_eval(lc, list) - -def start_eval(lc, list): - icall(lc, evline, list); yield True - if lc.tw.running_sugar(): - lc.tw.activity.stop_button.set_icon("stopitoff") - yield False - -def evline(lc, list): - oldiline = lc.iline - lc.iline = list[:] - lc.arglist = None - while lc.iline: - if lc.tw.step_time > 0: - lc.tw.active_turtle.show() - endtime = millis()+an_int(lc,lc.tw.step_time)*100 - while millis()4: + code.append(dock[4]) + if blk.primitive is not None: + code.append(blk.primitive) + else: + if blk.name=='number': + try: + code.append(float(blk.values[0])) + except ValueError: + code.append(float(ord(blk.values[0][0]))) + elif blk.name=='string' or blk.name=='title': + if type(blk.values[0]) == float or type(blk.values[0]) == int: + if int(blk.values[0]) == blk.values[0]: + blk.values[0] = int(blk.values[0]) + code.append('#s'+str(blk.values[0])) + else: + code.append('#s'+blk.values[0]) + elif blk.name=='journal': + if blk.values[0] is not None: + code.append('#smedia_'+str(blk.values[0])) + else: + code.append('#smedia_None') + elif blk.name=='description': + if blk.values[0] is not None: + code.append('#sdescr_'+str(blk.values[0])) + else: + code.append('#sdescr_None') + elif blk.name=='audio': + if blk.values[0] is not None: + code.append('#saudio_'+str(blk.values[0])) + else: + code.append('#saudio_None') + else: + return ['%nothing%'] + for i in range(1,len(blk.connections)): + b = blk.connections[i] + dock = blk.docks[i] + if len(dock)>4: + for c in dock[4]: + code.append(c) + if b is not None: + code.extend(self.blocks_to_code(b)) + elif blk.docks[i][0] not in ['flow', 'unavailable']: + code.append('%nothing%') + return code + + def intern(self, str): + if str in self.oblist: return self.oblist[str] + sym = symbol(str) + self.oblist[str] = sym + return sym + + def readline(self, line): + res = [] + while line: + token = line.pop(0) + if isNumberType(token): res.append(token) + elif token.isdigit(): res.append(float(token)) + elif token[0]=='-' and token[1:].isdigit(): + res.append(-float(token[1:])) + elif token[0] == '"': res.append(token[1:]) + elif token[0:2] == "#s": res.append(token[2:]) + elif token == '[': res.append(self.readline(line)) + elif token == ']': return res + else: res.append(self.intern(token)) + return res + + def setup_cmd(self, str): + self.tw.active_turtle.hide() + self.procstop=False + list = self.readline(str) + self.step = self.start_eval(list) + + def start_eval(self, list): + self.icall(self.evline, list) + yield True + if self.tw.running_sugar(): + self.tw.activity.stop_button.set_icon("stopitoff") + yield False + + def evline(self, list): + oldiline = self.iline + self.iline = list[:] + self.arglist = None + while self.iline: + if self.tw.step_time > 0: + self.tw.active_turtle.show() + endtime = millis()+self.an_int(self.tw.step_time)*100 + while millis()