#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, get_path
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\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,
get_path(tw.activity, 'instance'))
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),
get_path(tw.activity, 'instance'))
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