#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 cgi import escape from gettext import gettext as _ from tautils import data_to_string, save_picture, image_to_base64, get_path # A dictionary to define the HTML wrappers around template elements 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\n'), 'img': ('Image\n'), 'img2': ('Image\n'), 'img3': ('Image\n'), 'ul': ('
\n', '
\n'), 'li': ('', '\n')} COMMENT = '\n' def save_html(self, tw, embed_flag=True): """ Either save the canvas and code or pictures to HTML """ if embed_flag: HTML_GLUE['img'] = (' + \
                                 \n') HTML_GLUE['img2'] = ('Image\n') """ If there are saved_pictures, put them into a .html; otherwise, save a screendump and the turtle project code. """ htmlcode = '' if len(tw.saved_pictures) > 0: for i, p in enumerate(tw.saved_pictures): htmlcode += HTML_GLUE['slide'][0] + str(i) htmlcode += HTML_GLUE['slide'][1] + \ HTML_GLUE['div'][0] + \ HTML_GLUE['h1'][0] if embed_flag: 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, get_path(tw.activity, 'instance')) tmp = HTML_GLUE['img2'][0] tmp += imgdata tmp += HTML_GLUE['img2'][1] else: if p.endswith(('.svg')): f = open(p, 'r') imgdata = f.read() f.close() tmp = imgdata else: tmp = HTML_GLUE['img3'][0] tmp += p tmp += HTML_GLUE['img3'][1] htmlcode += tmp + \ HTML_GLUE['h1'][1] + \ HTML_GLUE['div'][1] else: if embed_flag: imgdata = image_to_base64(save_picture(self.tw.canvas), get_path(tw.activity, 'instance')) else: imgdata = os.path.join(self.tw.load_save_folder, 'image') self.tw.save_as_image(imgdata) htmlcode += (HTML_GLUE['img'][0] + imgdata + \ HTML_GLUE['img'][1]) htmlcode += HTML_GLUE['div'][0] htmlcode += escape(data_to_string( tw.assemble_data_to_save(False, True))) htmlcode += HTML_GLUE['div'][1] if tw.running_sugar: title = _('Turtle Art') + ' ' + tw.activity.metadata['title'] else: title = _('Turtle Art') header = HTML_GLUE['doctype'] + \ HTML_GLUE['html'][0] style = HTML_GLUE['style'][0] + \ HTML_GLUE['style'][1] if len(tw.saved_pictures) > 0: if tw.saved_pictures[0].endswith(('.svg')): header = HTML_GLUE['html_svg'][0] style = COMMENT return header + \ HTML_GLUE['head'][0] + \ HTML_GLUE['meta'] + \ HTML_GLUE['title'][0] + \ title + \ HTML_GLUE['title'][1] + \ style + \ HTML_GLUE['head'][1] + \ HTML_GLUE['body'][0] + \ htmlcode + \ HTML_GLUE['body'][1] + \ HTML_GLUE['html'][1]