diff options
author | Walter Bender <walter@sugarlabs.org> | 2010-08-12 17:57:55 (GMT) |
---|---|---|
committer | Walter Bender <walter@sugarlabs.org> | 2010-08-12 17:57:55 (GMT) |
commit | c2937d9fdd30b1b896caf66851d6677924d07488 (patch) | |
tree | c242386fa59755d4adea7fb414b72466181a2a2e /TurtleArt/taexporthtml.py | |
parent | 98caa09b7eadbd14776b73f01095bc59cb39cc18 (diff) |
reorg of module heirarchy
Diffstat (limited to 'TurtleArt/taexporthtml.py')
-rw-r--r-- | TurtleArt/taexporthtml.py | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/TurtleArt/taexporthtml.py b/TurtleArt/taexporthtml.py new file mode 100644 index 0000000..47577f0 --- /dev/null +++ b/TurtleArt/taexporthtml.py @@ -0,0 +1,147 @@ +#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': "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " + \ + "Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n", + 'html': ("<html>\n", "</html>\n"), + 'html_svg': ("<html xmlns=\"http://www.w3.org/1999/xhtml\">\n", + "</html>\n"), + 'head': ("<head>\n<!-- Created by Turtle Art -->\n", "</head>\n"), + 'meta': "<meta http-equiv=\"content-type\" content=\"text/html; " + \ + "charset=UTF-8\"/>\n", + 'title': ("<title>", "</title>\n"), + 'style': ("<style type=\"text/css\">\n<!--\n", "-->\n</style>\n"), + 'body': ("<body>\n", "\n</body>\n"), + 'div': ("<div>\n", "</div>\n"), + 'slide': ("\n<a name=\"slide", "\"></a>\n"), + 'h1': ("<h1>", "</h1>\n"), + 'table': ("<table cellpadding=\"10\">\n", "</table>\n"), + 'tr': ("<tr>\n", "</tr>\n"), + 'td': ("<td valign=\"top\" width=\"400\" height=\"300\">\n", + "\n</td>\n"), + 'img': ("<img width=\"400\" height=\"300\" alt=\"Image\" " + \ + "src=\"file://", ".png\" />\n"), + 'img2': ("<img alt=\"Image\" src=\"image", ".png\" />\n"), + 'img3': ("<img alt=\"Image\" src=\"file://", "\" />\n"), + 'ul': ("<table>\n", "</table>\n"), + 'li': ("<tr><td>", "</td></tr>\n") } + + comment = "<!--\n\ +<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\" [\n\ + <!ENTITY ns_svg \"http://www.w3.org/2000/svg\">\n\ + <!ENTITY ns_xlink \"http://www.w3.org/1999/xlink\">\n\ +]>\n\ +-->\n" + if self.embed_images == True: + self.html_glue['img'] = ("<img width=\"400\" height=\"300\" alt="+ \ + "\"Image\" src=\"data:image/png;base64,\n", + " \"/>\n") + self.html_glue['img2'] = ("<img alt=\"Image\" src=\"data:image/png;"+ \ + "base64,\n", " \"/>\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 |