From f7f49055fb88e5dfa03c43d91f3c29f7a48aca76 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Mon, 08 Mar 2010 19:48:32 +0000 Subject: cleaned up export HTML logic --- (limited to 'taexporthtml.py') diff --git a/taexporthtml.py b/taexporthtml.py index 10fcb1f..6589b03 100644 --- a/taexporthtml.py +++ b/taexporthtml.py @@ -18,6 +18,9 @@ #OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN #THE SOFTWARE. +import pygtk +pygtk.require('2.0') +import gtk try: from sugar.activity import activity from sugar.datastore import datastore @@ -37,11 +40,14 @@ def save_html(self, tw, embed_flag=True): 'doctype': "\n", 'html': ("\n", "\n"), + 'html_svg': ("\n", + "\n"), 'head': ("\n\n", "\n"), 'meta': "\n", + "charset=UTF-8\"/>\n", 'title': ("", "\n"), 'style': ("\n"), + 'style_svg': ("\n"), 'body': ("\n", "\n\n"), 'div': ("
\n", "
\n"), 'slide': ("\n\n"), @@ -53,6 +59,7 @@ def save_html(self, tw, embed_flag=True): 'img': ("\"Image\"\n"), 'img2': ("\"Image\"\n"), + 'img3': ("\"Image\"\n"), 'ul': ("\n", "
\n"), 'li': ("", "\n") } @@ -64,202 +71,42 @@ def save_html(self, tw, embed_flag=True): "base64,\n", " \"/>\n") """ - Transalate 'show' and 'template' blocks into HTML, ignoring most - turtle graphics. Saving as SVG will capture all of the graphical elements - of a page. + If there are saved_pictures, put them into a .html; otherwise, save a + screendump and the turtle project code. """ - bs = tw.just_blocks() code = "" - self.imagecount = 0 - slidecount = 0 - for b in bs: - this_stack = "" - data = walk_stack(self, tw, b) - show = 0 - tp1, tp2, tp3, tp8, tp6, tp7 = 0,0,0,0,0,0 - for d in data: - if type(d) == type((1,2)): - (d,b) = d - if type(d) is float or type(d) is int: - d = str(d) - if d == "show" or d == "showaligned": - show = 1 - elif show > 0: # Process the argument to show or container, - if show == 1: # which could be media or a string - if d[0:8] == '#smedia_': - this_stack += add_image(self, tw, d) - elif d[0:8] == '#sdescr_': - this_stack += add_description(self, tw, d) - elif d[0:2] == '#s': - this_stack += d[2:] - show = 0 - else: - this_stack += d - show = 0 - - """ - The following mess is in order to process 'template' blocks, - a depreciated block type. - """ - elif d == "t1x1": - tp1 = 1 - elif d == "t2x1": - tp2 = 1 - elif d == "list": - tp3 = 8 - elif d == 't1x1a': - tp8 = 1 - elif d == "t1x2": - tp6 = 1 - elif d == "t2x2": - tp7 = 1 - elif tp3 > 0: # Bullets - if tp3 == 8: # The 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] - bullets = 6 - slidecount += 1 - elif d[2:] != "": # then the 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: - # The first time through, process the 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, tw, d) + \ - self.html_glue['td'][1] + \ - self.html_glue['td'][0] + \ - add_description(self, tw, d) + \ - self.html_glue['td'][1] + \ - self.html_glue['tr'][1]) - elif d[0:8] == '#sdescr_': - tmp += (add_description(self, tw, 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, tw, d) + \ - self.html_glue['td'][1] + \ - self.html_glue['tr'][1]) - elif d[0:8] == '#sdescr_': - tmp += (add_description(self, tw, 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, tw, 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, tw, 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, tw, d) - elif d[0:8] == '#sdescr_': - tmp += add_description(self, tw, 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, tw, d) - elif d[0:8] == '#sdescr_': - tmp += add_description(self, tw, 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, tw, d) - elif d[0:8] == '#sdescr_': - tmp += add_description(self, tw, d) - tmp += (self.html_glue['td'][1]) - tp7 += 1 - elif tp7 == 5: - if d[0:8] == '#smedia_': - tmp += add_image(self, tw, d) - elif d[0:8] == '#sdescr_': - tmp += add_description(self, tw, 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 - """ - End of depreciated-block section - """ - - if len(data) > 0: - code += this_stack - - """ - If no show or template blocks were present then we've got nothing, - so save a screen dump and project code instead. - """ - if slidecount == 0: + if len(tw.saved_pictures) > 0: + for i, p in enumerate(tw.saved_pictures): + code += self.html_glue['slide'][0] + str(i) + code += self.html_glue['slide'][1] +\ + self.html_glue['div'][0] +\ + self.html_glue['h1'][0] + if self.embed_images == True: + f = open(p, "r") + imgdata = f.read() + f.close() + if p.endswith(('.svg')): + tmp = imgdata + else: + pixbuf = gtk.gdk.pixbuf_new_from_file(p) + imgdata = image_to_base64(pixbuf, tw.activity) + tmp = self.html_glue['img2'][0] + tmp += imgdata + tmp += self.html_glue['img2'][1] + else: + if p.endswith(('.svg')): + f = open(p, "r") + imgdata = f.read() + f.close() + tmp = imgdata + else: + tmp = self.html_glue['img3'][0] + tmp += p + tmp += self.html_glue['img3'][1] + code += tmp +\ + self.html_glue['h1'][1] +\ + self.html_glue['div'][1] + else: if self.embed_images == True: imgdata = image_to_base64(save_picture(self.tw.canvas), tw.activity) else: @@ -270,63 +117,30 @@ def save_html(self, tw, embed_flag=True): code += self.html_glue['div'][0] code += data_to_string(tw.assemble_data_to_save(False, True)) code += self.html_glue['div'][1] + if tw.running_sugar: title = _("Turtle Art") + " " + tw.activity.metadata['title'] else: title = _("Turtle Art") - code = self.html_glue['doctype'] + \ - self.html_glue['html'][0] + \ - self.html_glue['head'][0] + \ - self.html_glue['meta'] + \ - self.html_glue['title'][0] + \ - 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 + \ - self.html_glue['body'][1] + \ + + header = self.html_glue['doctype'] +\ + self.html_glue['html'][0] + + if len(tw.saved_pictures) > 0: + if tw.saved_pictures[0].endswith(('.svg')): + header = self.html_glue['html_svg'][0] + + code = header +\ + self.html_glue['head'][0] +\ + self.html_glue['meta'] +\ + self.html_glue['title'][0] +\ + 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 +\ + self.html_glue['body'][1] +\ self.html_glue['html'][1] return code - -def walk_stack(self, tw, blk): - top = tw.find_top_block(blk) - if blk == top: - return tw.lc.run_blocks(top, tw.block_list.list, False) - else: - return [] - -def add_image(self, tw, d): - if d[8:] != "None": - if self.embed_images == True: - try: - dsobject = datastore.get(d[8:]) - pixbuf = get_pixbuf_from_journal(dsobject,400,300) - imgdata = image_to_base64(pixbuf, tw.activity) - except: - imgdata = "" - elif tw.running_sugar: - try: - dsobject = datastore.get(d[8:]) - imgdata = dsobject.file_path - except: - imgdata = "" - else: - imgdata = d[8:] - - tmp = self.html_glue['img2'][0] - tmp += imgdata - tmp += self.html_glue['img2'][1] - self.imagecount += 1 - return tmp - return "" - -def add_description(self, tw, d): - if d[8:] != "None": - try: - dsobject = datastore.get(d[8:]) - return dsobject.metadata['description'] - except: - return "" - return "" -- cgit v0.9.1