Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/taexporthtml.py
diff options
context:
space:
mode:
Diffstat (limited to 'taexporthtml.py')
-rw-r--r--taexporthtml.py312
1 files changed, 63 insertions, 249 deletions
diff --git a/taexporthtml.py b/taexporthtml.py
index 10fcb1f..6589b03 100644
--- a/taexporthtml.py
+++ b/taexporthtml.py
@@ -18,6 +18,9 @@
#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
try:
from sugar.activity import activity
from sugar.datastore import datastore
@@ -37,11 +40,14 @@ def save_html(self, tw, embed_flag=True):
'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",
+ "charset=UTF-8\"/>\n",
'title': ("<title>", "</title>\n"),
'style': ("<style type=\"text/css\">\n<!--\n", "-->\n</style>\n"),
+ 'style_svg': ("<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"),
@@ -53,6 +59,7 @@ def save_html(self, tw, embed_flag=True):
'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") }
@@ -64,202 +71,42 @@ def save_html(self, tw, embed_flag=True):
"base64,\n", " \"/>\n")
"""
- Transalate 'show' and 'template' blocks into HTML, ignoring most
- turtle graphics. Saving as SVG will capture all of the graphical elements
- of a page.
+ If there are saved_pictures, put them into a .html; otherwise, save a
+ screendump and the turtle project code.
"""
- bs = tw.just_blocks()
code = ""
- self.imagecount = 0
- slidecount = 0
- for b in bs:
- this_stack = ""
- data = walk_stack(self, tw, b)
- show = 0
- tp1, tp2, tp3, tp8, tp6, tp7 = 0,0,0,0,0,0
- for d in data:
- if type(d) == type((1,2)):
- (d,b) = d
- if type(d) is float or type(d) is int:
- d = str(d)
- if d == "show" or d == "showaligned":
- show = 1
- elif show > 0: # Process the argument to show or container,
- if show == 1: # which could be media or a string
- if d[0:8] == '#smedia_':
- this_stack += add_image(self, tw, d)
- elif d[0:8] == '#sdescr_':
- this_stack += add_description(self, tw, d)
- elif d[0:2] == '#s':
- this_stack += d[2:]
- show = 0
- else:
- this_stack += d
- show = 0
-
- """
- The following mess is in order to process 'template' blocks,
- a depreciated block type.
- """
- elif d == "t1x1":
- tp1 = 1
- elif d == "t2x1":
- tp2 = 1
- elif d == "list":
- tp3 = 8
- elif d == 't1x1a':
- tp8 = 1
- elif d == "t1x2":
- tp6 = 1
- elif d == "t2x2":
- tp7 = 1
- elif tp3 > 0: # Bullets
- if tp3 == 8: # The title comes first...
- tmp = self.html_glue['slide'][0] + \
- str(slidecount) + \
- self.html_glue['slide'][1] + \
- self.html_glue['div'][0] + \
- self.html_glue['h1'][0] + \
- d[2:] + \
- self.html_glue['h1'][1] + \
- self.html_glue['ul'][0]
- bullets = 6
- slidecount += 1
- elif d[2:] != "": # then the bullets
- tmp = self.html_glue['li'][0] + d[2:] + \
- self.html_glue['li'][1]
- this_stack += tmp
- tmp = ""
- bullets -= 1
- if bullets == 0:
- this_stack += (self.html_glue['ul'][1] + \
- self.html_glue['div'][1])
- elif tp1 == 1 or tp2 == 1 or tp8 == 1 or\
- tp6 == 1 or tp7 == 1:
- # The first time through, process the title
- this_stack += (self.html_glue['slide'][0] + \
- str(slidecount) + \
- self.html_glue['slide'][1] + \
- self.html_glue['div'][0] + \
- self.html_glue['h1'][0] + d[2:] + \
- self.html_glue['h1'][1] + \
- self.html_glue['table'][0])
- if tp1 > 0: tp1 += 1
- elif tp2 > 0: tp2 += 1
- elif tp8 > 0: tp8 += 1
- elif tp6 > 0: tp6 += 1
- elif tp7 > 0: tp7 += 1
- slidecount += 1
- elif tp1 > 1 or tp6 > 1:
- tmp = self.html_glue['tr'][0] + \
- self.html_glue['td'][0]
- if d[0:8] == '#smedia_':
- tmp += (add_image(self, tw, d) + \
- self.html_glue['td'][1] + \
- self.html_glue['td'][0] + \
- add_description(self, tw, d) + \
- self.html_glue['td'][1] + \
- self.html_glue['tr'][1])
- elif d[0:8] == '#sdescr_':
- tmp += (add_description(self, tw, d) + \
- self.html_glue['td'][1] + \
- self.html_glue['tr'][1])
- if tp1 > 1 or tp6 > 2:
- this_stack += (tmp + self.html_glue['table'][1] + \
- self.html_glue['div'][1])
- tp1 = 0
- tp6 = 0
- else:
- this_stack += tmp
- tp6 += 1
- elif tp8 > 1:
- tmp = self.html_glue['tr'][0] + \
- self.html_glue['td'][0]
- if d[0:8] == '#smedia_':
- tmp += (add_image(self, tw, d) + \
- self.html_glue['td'][1] + \
- self.html_glue['tr'][1])
- elif d[0:8] == '#sdescr_':
- tmp += (add_description(self, tw, d) + \
- self.html_glue['td'][1] + \
- self.html_glue['tr'][1])
- this_stack += (tmp + self.html_glue['table'][1] + \
- self.html_glue['div'][1])
- tp8 = 0
- elif tp2 > 1 or tp7 > 1:
- if tp2 == 2 or tp7 == 2:
- tmp = self.html_glue['tr'][0] + \
- self.html_glue['td'][0]
- else:
- tmp += self.html_glue['td'][0]
- if tp2 == 2:
- saved_description = add_description(self, tw, d)
- if tp2 == 2 or tp7 == 2:
- if d[0:8] == '#smedia_':
- tmp += (add_image(self,d) + \
- self.html_glue['td'][1])
- elif d[0:8] == '#sdescr_':
- tmp += (add_description(self, tw, d) + \
- self.html_glue['td'][1])
- if tp2 > 1: tp2 += 1
- elif tp7 > 1: tp7 += 1
- elif tp2 == 3:
- if d[0:8] == '#smedia_':
- tmp += add_image(self, tw, d)
- elif d[0:8] == '#sdescr_':
- tmp += add_description(self, tw, d)
- tmp += (self.html_glue['td'][1] + \
- self.html_glue['tr'][1] + \
- self.html_glue['tr'][0] + \
- self.html_glue['td'][0])
- tmp += saved_description
- saved_desciption = ""
- tmp += (self.html_glue['td'][1] + \
- self.html_glue['td'][0])
- tmp += (add_description(self,d) + \
- self.html_glue['td'][1] + \
- self.html_glue['tr'][1])
- this_stack += (tmp + self.html_glue['table'][1] + \
- self.html_glue['div'][1])
- tp2 = 0
- elif tp7 == 3:
- if d[0:8] == '#smedia_':
- tmp += add_image(self, tw, d)
- elif d[0:8] == '#sdescr_':
- tmp += add_description(self, tw, d)
- tmp += (self.html_glue['td'][1] + \
- self.html_glue['tr'][1] + \
- self.html_glue['tr'][0])
- tp7 += 1
- elif tp7 == 4:
- if d[0:8] == '#smedia_':
- tmp += add_image(self, tw, d)
- elif d[0:8] == '#sdescr_':
- tmp += add_description(self, tw, d)
- tmp += (self.html_glue['td'][1])
- tp7 += 1
- elif tp7 == 5:
- if d[0:8] == '#smedia_':
- tmp += add_image(self, tw, d)
- elif d[0:8] == '#sdescr_':
- tmp += add_description(self, tw, d)
- tmp += (self.html_glue['td'][1] + \
- self.html_glue['tr'][1])
- this_stack += (tmp + self.html_glue['table'][1] + \
- self.html_glue['div'][1])
- tp7 = 0
- """
- End of depreciated-block section
- """
-
- if len(data) > 0:
- code += this_stack
-
- """
- If no show or template blocks were present then we've got nothing,
- so save a screen dump and project code instead.
- """
- if slidecount == 0:
+ 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:
@@ -270,63 +117,30 @@ def save_html(self, tw, embed_flag=True):
code += self.html_glue['div'][0]
code += 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")
- code = self.html_glue['doctype'] + \
- self.html_glue['html'][0] + \
- self.html_glue['head'][0] + \
- self.html_glue['meta'] + \
- self.html_glue['title'][0] + \
- title + \
- self.html_glue['title'][1] + \
- self.html_glue['style'][0] + \
- self.html_glue['style'][1] + \
- self.html_glue['head'][1] + \
- self.html_glue['body'][0] + \
- code + \
- self.html_glue['body'][1] + \
+
+ header = self.html_glue['doctype'] +\
+ self.html_glue['html'][0]
+
+ if len(tw.saved_pictures) > 0:
+ if tw.saved_pictures[0].endswith(('.svg')):
+ header = self.html_glue['html_svg'][0]
+
+ code = header +\
+ self.html_glue['head'][0] +\
+ self.html_glue['meta'] +\
+ self.html_glue['title'][0] +\
+ title +\
+ self.html_glue['title'][1] +\
+ self.html_glue['style'][0] +\
+ self.html_glue['style'][1] +\
+ self.html_glue['head'][1] +\
+ self.html_glue['body'][0] +\
+ code +\
+ self.html_glue['body'][1] +\
self.html_glue['html'][1]
return code
-
-def walk_stack(self, tw, blk):
- top = tw.find_top_block(blk)
- if blk == top:
- return tw.lc.run_blocks(top, tw.block_list.list, False)
- else:
- return []
-
-def add_image(self, tw, d):
- if d[8:] != "None":
- if self.embed_images == True:
- try:
- dsobject = datastore.get(d[8:])
- pixbuf = get_pixbuf_from_journal(dsobject,400,300)
- imgdata = image_to_base64(pixbuf, tw.activity)
- except:
- imgdata = ""
- elif tw.running_sugar:
- try:
- dsobject = datastore.get(d[8:])
- imgdata = dsobject.file_path
- except:
- imgdata = ""
- else:
- imgdata = d[8:]
-
- tmp = self.html_glue['img2'][0]
- tmp += imgdata
- tmp += self.html_glue['img2'][1]
- self.imagecount += 1
- return tmp
- return ""
-
-def add_description(self, tw, d):
- if d[8:] != "None":
- try:
- dsobject = datastore.get(d[8:])
- return dsobject.metadata['description']
- except:
- return ""
- return ""