#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"),
'tr': ("\n", "
\n"),
'td': ("\n",
"\n | \n"),
'img': ("\n"),
'img2': ("\n"),
'img3': ("\n"),
'ul': ("\n"),
'li': ("", " |
\n") }
comment = "\n"
if self.embed_images == True:
self.html_glue['img'] = ("\n")
self.html_glue['img2'] = ("\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