From 818e3268ad0ea663b35d86b5d8aa8c70420a8b4e Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Thu, 15 Oct 2009 07:47:42 +0000 Subject: pushing bug fixes --- diff --git a/taexporthtml.py b/taexporthtml.py index f2fce3b..eb63bfd 100644 --- a/taexporthtml.py +++ b/taexporthtml.py @@ -30,20 +30,21 @@ from gettext import gettext as _ def save_html(self, tw, embed_flag=True): + self.embed_images = embed_flag try: - datapath = os.path.join(activity.get_activity_root(), "instance") + self.datapath = os.path.join(activity.get_activity_root(), "instance") except: # early versions of Sugar (656) didn't support get_activity_root() - datapath = os.path.join( \ + self.datapath = os.path.join( \ os.environ['HOME'], \ ".sugar/default/org.laptop.TurtleArtActivity/instance") # dictionary defines the html wrappers around template elements # start of block, end of block - html_glue = { + self.html_glue = { 'doctype': ("\n", ""), - 'html': ("\n", "\n"), + 'html': ("\n", "\n"), 'head': ("\n\n", \ "\n"), 'meta': ("\n", ""), 'img': ("\"Image\"\n"), 'img2': ("\"Image\"\n"), - 'ul': ("\n"), - 'li': ("
  • ", "
  • \n") } + 'ul': ("\n", "
    \n"), + 'li': ("", "\n") } - if embed_flag == True: + if self.embed_images == True: # store images in-line as base64 - html_glue['img'] = ("\"Image\"\n") - html_glue['img2'] = ("\"Image\"\n") + self.html_glue['img'] = ("\"Image\"\n") + self.html_glue['img2'] = ("\"Image\"\n") bs = tawindow.blocks(tw) code = "" - imagecount = 0 - slidecount = 0 + self.imagecount = 0 # incremented for each image + slidecount = 0 # incremented for each template (slide) for b in bs: this_stack = "" data = walk_stack(self, tw, b) show = 0 - onepic = 0 - twopic = 0 - fourpic = 0 - sevenbullets = 0 - title = 0 - picture = 0 + tp1, tp2, tp3, tp8, tp6, tp7 = 0,0,0,0,0,0 for d in data: - if type(d) is float: - continue - else: - # transalate some Turtle Art blocks into HTML - # show and template blocks - # ignores most turtle graphics - if d == "show": - show = 1 - elif d == "container": - show = 2 - elif show > 0: - if show == 1: - try: # is it media or a string? - tmp = d[0:8] - except: - tmp = "" - if tmp == '#smedia_': # show media - show = 2 - else: # show a string - this_stack += d[2:] - show = 0 - if show == 2: - # show an image - if d[8:] != None: - try: - dsobject = datastore.get(d[8:]) - pixbuf = \ - get_pixbuf_from_journal(dsobject,400,300) - except: - pixbuf = None - if pixbuf != None: - filename = os.path.join(datapath, 'image' + \ - str(imagecount) + ".png") - pixbuf.save(filename, "png") - # if the embed flag is True - # embed base64 into the html - if embed_flag == True: - base64 = \ - os.path.join(datapath, 'base64tmp') - cmd = "base64 <" + filename + " >" + base64 - subprocess.check_call(cmd, shell=True) - f = open( base64, 'r') - imgdata = f.read() - f.close() - tmp = html_glue['img2'][0] - if embed_flag == True: - tmp = tmp + imgdata - else: - tmp = tmp + str(imagecount) - imagecount += 1 - tmp = tmp + html_glue['img2'][1] - this_stack += tmp + if type(d) is float or type(d) is int: + d = str(d) # convert floats and ints to strings + # transalate some Turtle Art blocks into HTML + # show and template blocks + # ignores most turtle graphics + if d == "show": # show bricks take one argument + show = 1 + elif d == "container": # containers hold a media block + show = 2 + elif show > 0: # process the argument to show or container + if show == 1: # could be media or a string + if d[0:8] == '#smedia_': # show media + this_stack += add_image(self,d) + elif d[0:8] == '#sdescr_': # show description + this_stack += add_description(self,d) + elif d[0:2] == '#s': # show a string + this_stack += d[2:] show = 0 - elif d == "tp1" or d == 'tp8': - onepic = 1 - elif d == "tp2" or d == 'tp6': - twopic = 1 - elif d == "tp7": - fourpic = 1 - elif d == "tp3": - sevenbullets = 8 - elif sevenbullets > 0: - if sevenbullets == 8: - tmp = html_glue['slide'][0] + str(slidecount) +\ - html_glue['slide'][1] + \ - html_glue['div'][0] + html_glue['h1'][0] + \ - d[2:] + html_glue['h1'][1] + html_glue['ul'][0] - elif d[2:] != "": - tmp = html_glue['li'][0] + d[2:] + html_glue['li'][1] - this_stack += tmp - tmp = "" - sevenbullets -= 1 - if sevenbullets == 0: - this_stack += html_glue['ul'][1] - elif onepic == 1 or twopic == 1 or fourpic == 1: - tmp = html_glue['slide'][0] + str(slidecount) + \ - html_glue['slide'][1] + \ - html_glue['div'][0] + html_glue['h1'][0] + d[2:] + \ - html_glue['h1'][1] + html_glue['table'][0] - this_stack += tmp - if onepic > 0: onepic += 1 - elif twopic > 0: twopic += 1 - elif fourpic > 0: fourpic += 1 + else: + this_stack += d + show = 0 + # process slide templates + elif d == "tp1": + tp1 = 1 + elif d == "tp2": + tp2 = 1 + elif d == "tp3": + tp3 = 8 + elif d == 'tp8': + tp8 = 1 + elif d == "tp6": + tp6 = 1 + elif d == "tp7": + tp7 = 1 + elif tp3 > 0: # bullets + if tp3 == 8: # title comes first + tmp = self.html_glue['slide'][0] + \ + str(slidecount) + \ + self.html_glue['slide'][1] + \ + self.html_glue['div'][0] + \ + self.html_glue['h1'][0] + \ + d[2:] + \ + self.html_glue['h1'][1] + \ + self.html_glue['ul'][0] slidecount += 1 - elif onepic > 1 or twopic > 1 or fourpic > 1: - # Need filename to copy it into instance directory - # if it is not an image, save the preview - # save the description too. - if d[8:] != None: - try: - dsobject = datastore.get(d[8:]) - pixbuf = get_pixbuf_from_journal(dsobject,400,300) - except: - pixbuf = None - if pixbuf != None: - filename = os.path.join(datapath, 'image' + \ - str(imagecount) + ".png") - pixbuf.save(filename, "png") - # if the embed flag is True - # embed base64 into the html - if embed_flag == True: - base64 = os.path.join(datapath, 'base64tmp') - cmd = "base64 <" + filename + " >" + base64 - subprocess.check_call(cmd, shell=True) - f = open( base64, 'r') - imgdata = f.read() - f.close() - if onepic == 2 or twopic == 2 or twopic == 4 or\ - fourpic == 2 or fourpic == 4: - tmp = html_glue['tr'][0] - else: - tmp = "" - if pixbuf != None: - tmp = tmp + html_glue['td'][0] + \ - html_glue['img'][0] - if embed_flag == True: - tmp = tmp + imgdata - else: - tmp = tmp + str(imagecount) - tmp = tmp + html_glue['img'][1] + \ - html_glue['td'][1] - if fourpic == 0: - try: - description = dsobject.metadata['description'] - except: - description = "" - tmp = tmp + html_glue['td'][0] + description + \ - html_glue['td'][1] - if onepic == 2 or twopic == 3 or fourpic == 3 or \ - fourpic == 5: - tmp = tmp + html_glue['tr'][1] - imagecount += 1 - this_stack += tmp - if onepic > 1: - this_stack += html_glue['table'][1] + \ - html_glue['div'][1] - onepic = 0 - elif twopic > 1: - if twopic == 3: - this_stack += html_glue['table'][1] + \ - html_glue['div'][1] - twopic = 0 - else: twopic += 1 - elif fourpic > 1: - if fourpic == 5: - this_stack += html_glue['table'][1] + \ - html_glue['div'][1] - fourpic = 0 - else: fourpic += 1 - this_stack += " " + elif d[2:] != "": # process bullets + tmp = self.html_glue['li'][0] + d[2:] + \ + self.html_glue['li'][1] + this_stack += tmp + tmp = "" + bullets -= 1 + if bullets == 0: + this_stack += (self.html_glue['ul'][1] + \ + self.html_glue['div'][1]) + elif tp1 == 1 or tp2 == 1 or tp8 == 1 or\ + tp6 == 1 or tp7 == 1: + # first time through, process title + this_stack += (self.html_glue['slide'][0] + \ + str(slidecount) + \ + self.html_glue['slide'][1] + \ + self.html_glue['div'][0] + \ + self.html_glue['h1'][0] + d[2:] + \ + self.html_glue['h1'][1] + \ + self.html_glue['table'][0]) + if tp1 > 0: tp1 += 1 + elif tp2 > 0: tp2 += 1 + elif tp8 > 0: tp8 += 1 + elif tp6 > 0: tp6 += 1 + elif tp7 > 0: tp7 += 1 + slidecount += 1 + elif tp1 > 1 or tp6 > 1: + tmp = self.html_glue['tr'][0] + \ + self.html_glue['td'][0] + if d[0:8] == '#smedia_': + tmp += (add_image(self,d) + \ + self.html_glue['td'][1] + \ + self.html_glue['td'][0] + \ + add_description(self,d) + \ + self.html_glue['td'][1] + \ + self.html_glue['tr'][1]) + elif d[0:8] == '#sdescr_': + tmp += (add_description(self,d) + \ + self.html_glue['td'][1] + \ + self.html_glue['tr'][1]) + if tp1 > 1 or tp6 > 2: + this_stack += (tmp + self.html_glue['table'][1] + \ + self.html_glue['div'][1]) + tp1 = 0 + tp6 = 0 + else: + this_stack += tmp + tp6 += 1 + elif tp8 > 1: + tmp = self.html_glue['tr'][0] + \ + self.html_glue['td'][0] + if d[0:8] == '#smedia_': + tmp += (add_image(self,d) + \ + self.html_glue['td'][1] + \ + self.html_glue['tr'][1]) + elif d[0:8] == '#sdescr_': + tmp += (add_description(self,d) + \ + self.html_glue['td'][1] + \ + self.html_glue['tr'][1]) + this_stack += (tmp + self.html_glue['table'][1] + \ + self.html_glue['div'][1]) + tp8 = 0 + elif tp2 > 1 or tp7 > 1: + if tp2 == 2 or tp7 == 2: + tmp = self.html_glue['tr'][0] + \ + self.html_glue['td'][0] + else: + tmp += self.html_glue['td'][0] + if tp2 == 2: + saved_description = add_description(self,d) + if tp2 == 2 or tp7 == 2: + if d[0:8] == '#smedia_': + tmp += (add_image(self,d) + \ + self.html_glue['td'][1]) + elif d[0:8] == '#sdescr_': + tmp += (add_description(self,d) + \ + self.html_glue['td'][1]) + if tp2 > 1: tp2 += 1 + elif tp7 > 1: tp7 += 1 + elif tp2 == 3: + if d[0:8] == '#smedia_': + tmp += add_image(self,d) + elif d[0:8] == '#sdescr_': + tmp += add_description(self,d) + tmp += (self.html_glue['td'][1] + \ + self.html_glue['tr'][1] + \ + self.html_glue['tr'][0] + \ + self.html_glue['td'][0]) + tmp += saved_description + saved_desciption = "" + tmp += (self.html_glue['td'][1] + \ + self.html_glue['td'][0]) + tmp += (add_description(self,d) + \ + self.html_glue['td'][1] + \ + self.html_glue['tr'][1]) + this_stack += (tmp + self.html_glue['table'][1] + \ + self.html_glue['div'][1]) + tp2 = 0 + elif tp7 == 3: + if d[0:8] == '#smedia_': + tmp += add_image(self,d) + elif d[0:8] == '#sdescr_': + tmp += add_description(self,d) + tmp += (self.html_glue['td'][1] + \ + self.html_glue['tr'][1] + \ + self.html_glue['tr'][0]) + tp7 += 1 + elif tp7 == 4: + if d[0:8] == '#smedia_': + tmp += add_image(self,d) + elif d[0:8] == '#sdescr_': + tmp += add_description(self,d) + tmp += (self.html_glue['td'][1]) + tp7 += 1 + elif tp7 == 5: + if d[0:8] == '#smedia_': + tmp += add_image(self,d) + elif d[0:8] == '#sdescr_': + tmp += add_description(self,d) + tmp += (self.html_glue['td'][1] + \ + self.html_glue['tr'][1]) + this_stack += (tmp + self.html_glue['table'][1] + \ + self.html_glue['div'][1]) + tp7 = 0 + if len(data) > 0: code += this_stack @@ -245,55 +258,38 @@ src=\"data:image/png;base64,\n", " \"/>\n") """ if slidecount == 0: # save a screen dump instead - filename = os.path.join(datapath, 'image.png') + filename = os.path.join(self.datapath, 'image.png') tawindow.save_pict(tw,filename) - # if the embed flag is True - # embed base64 into the html - if embed_flag == True: - base64 = os.path.join(datapath, 'base64tmp') + # if the embed_images flag is True + # embed_images base64 into the html + if self.embed_images == True: + base64 = os.path.join(self.datapath, 'base64tmp') cmd = "base64 <" + filename + " >" + base64 subprocess.check_call(cmd, shell=True) f = open( base64, 'r') imgdata = f.read() f.close() - code = html_glue['img'][0] + \ - imgdata + \ - html_glue['img'][1] - for b in bs: # "show me the code" - code = code + html_glue['div'][0] - data = walk_stack(self, tw, b) - for d in data: - if type(d) is not float: - if d[0:2] == "#s": - d = d[2:] - elif d[0:3] == "nop": - stack = {"nop" :"",\ - "nop1":"stack1",\ - "nop2":"stack2",\ - "nop3":"stack"} - d = stack[d] - # translate block name if it is in the dictionary - if d in blocks_dict: - d = _(blocks_dict[d]) - else: - d = _(d) - code = code + str(d) + " " - code = code + html_glue['div'][1] - - code = html_glue['doctype'][0] + \ - html_glue['html'][0] + \ - html_glue['head'][0] + \ - html_glue['meta'][0] + \ - html_glue['title'][0] + \ - _("Turtle Art") + \ - html_glue['title'][1] + \ - html_glue['style'][0] + \ - html_glue['style'][1] + \ - html_glue['head'][1] + \ - html_glue['body'][0] + \ + code += (self.html_glue['img'][0] + \ + imgdata + \ + self.html_glue['img'][1]) + code += (self.html_glue['div'][0]) + # get a json dump of the code + code += (tawindow.save_string(tw,False)) + code += (self.html_glue['div'][1]) + code = self.html_glue['doctype'][0] + \ + self.html_glue['html'][0] + \ + self.html_glue['head'][0] + \ + self.html_glue['meta'][0] + \ + self.html_glue['title'][0] + \ + _("Turtle Art") + " " + tw.activity.metadata['title'] + \ + self.html_glue['title'][1] + \ + self.html_glue['style'][0] + \ + self.html_glue['style'][1] + \ + self.html_glue['head'][1] + \ + self.html_glue['body'][0] + \ code + \ - html_glue['body'][1] + \ - html_glue['html'][1] + self.html_glue['body'][1] + \ + self.html_glue['html'][1] return code def walk_stack(self, tw, spr): @@ -305,3 +301,41 @@ def walk_stack(self, tw, spr): # not top of stack, then return empty list return [] +def add_image(self, d): + if d[8:] != "None": + try: + dsobject = datastore.get(d[8:]) + pixbuf = get_pixbuf_from_journal(dsobject,400,300) + filename = os.path.join(self.datapath, 'image' + \ + str(self.imagecount) + ".png") + pixbuf.save(filename, "png") + # if the embed_images flag is True + # embed images base64 into the html + if self.embed_images == True: + base64 = os.path.join(self.datapath, 'base64tmp') + cmd = "base64 <" + filename + " >" + base64 + subprocess.check_call(cmd, shell=True) + f = open( base64, 'r') + imgdata = f.read() + f.close() + tmp = self.html_glue['img2'][0] + if self.embed_images == True: + tmp += imgdata + else: + tmp += str(self.imagecount) + self.imagecount += 1 + tmp += self.html_glue['img2'][1] + return tmp + except: + return "" + return "" + +def add_description(self, d): + # show description + if d[8:] != "None": + try: + dsobject = datastore.get(d[8:]) + return dsobject.metadata['description'] + except: + return "" + return "" -- cgit v0.9.1