#Copyright (c) 2008-9, Walter Bender #Permission is hereby granted, free of charge, to any person obtaining a copy #of this software and associated documentation files (the "Software"), to deal #in the Software without restriction, including without limitation the rights #to use, copy, modify, merge, publish, distribute, sublicense, and/or sell #copies of the Software, and to permit persons to whom the Software is #furnished to do so, subject to the following conditions: #The above copyright notice and this permission notice shall be included in #all copies or substantial portions of the Software. #THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE #AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, #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 import os.path from tautils import data_to_string, save_picture, image_to_base64 from gettext import gettext as _ from cgi import escape def save_html(self, tw, embed_flag=True): """ Either: Save canvas and code or pictures to HTML """ self.embed_images = embed_flag # A dictionary to define the HTML wrappers around template elements self.html_glue = { 'doctype': "\n", 'html': ("\n", "\n"), 'html_svg': ("\n", "\n"), 'head': ("\n\n", "\n"), 'meta': "\n", 'title': ("", "\n"), 'style': ("\n"), 'body': ("\n", "\n\n"), 'div': ("
\n", "
\n"), 'slide': ("\n\n"), 'h1': ("

", "

\n"), 'table': ("\n", "
\n"), 'tr': ("\n", "\n"), 'td': ("\n", "\n\n"), 'img': ("\"Image\"\n"), 'img2': ("\"Image\"\n"), 'img3': ("\"Image\"\n"), 'ul': ("\n", "
\n"), 'li': ("", "\n") } comment = "\n" if self.embed_images == True: self.html_glue['img'] = ("+ \
                                 \n") self.html_glue['img2'] = ("\"Image\"\n") """ If there are saved_pictures, put them into a .html; otherwise, save a screendump and the turtle project code. """ code = "" 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: imgdata = os.path.join(self.tw.load_save_folder, 'image') self.tw.save_as_image(imgdata) code += (self.html_glue['img'][0] + imgdata + \ self.html_glue['img'][1]) code += self.html_glue['div'][0] code += escape(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") header = self.html_glue['doctype'] + \ self.html_glue['html'][0] style = self.html_glue['style'][0] + \ self.html_glue['style'][1] if len(tw.saved_pictures) > 0: if tw.saved_pictures[0].endswith(('.svg')): header = self.html_glue['html_svg'][0] style = comment code = header + \ self.html_glue['head'][0] + \ self.html_glue['meta'] + \ self.html_glue['title'][0] + \ title + \ self.html_glue['title'][1] + \ style + \ self.html_glue['head'][1] + \ self.html_glue['body'][0] + \ code + \ self.html_glue['body'][1] + \ self.html_glue['html'][1] return code