beta-0.89.2
[luatex.git] / source / libs / zziplib / zziplib-0.13.62 / docs / zzipdoc / htmldocument.py
blob47d58dc6ad2157e78f67f9352264385d2b12790d
1 #! /usr/bin/env python
2 # -*- coding: UTF-8 -*-
3 from match import Match
5 class HtmlDocument:
6 """ binds some html content page with additional markup - in this
7 base version it is just the header information while other variants
8 might add navigation items around the content block elements """
9 def __init__(self, o, filename = None):
10 self.o = o
11 self.filename = filename
12 self.title = ""
13 self.meta = []
14 self.style = []
15 self.text = []
16 self.navi = None
17 def meta(self, style):
18 """ add some header meta entry """
19 self.meta += [ meta ]
20 return self
21 def style(self, style):
22 """ add a style block """
23 self.style += [ style ]
24 return self
25 def add(self, text):
26 """ add some content """
27 self.text += [ text ]
28 return self
29 def get_title(self):
30 if self.title: return self.title
31 try: return self.text[0].get_title()
32 except Exception, e: pass
33 return self.title
34 def _html_meta(self, meta):
35 """ accepts adapter objects with .html_meta() """
36 try: return meta.html_meta()
37 except Exception, e: pass
38 return str(meta)
39 def _html_style(self, style):
40 """ accepts adapter objects with .html_style() and .xml_style() """
41 ee = None
42 try: return style.html_style()
43 except Exception, e: ee = e; pass
44 try: return style.xml_style()
45 except Exception, e: print "HtmlDocument/style", ee, e; pass
46 try: return str(style)
47 except Exception, e: print "HtmlDocument/style", e; return ""
48 def _html_text(self, html):
49 """ accepts adapter objects with .html_text() and .xml_text() """
50 ee = None
51 try: return html.html_text()
52 except Exception, e: ee = e; pass
53 try: return html.xml_text()
54 except Exception, e: print "HtmlDocument/text", ee, e; pass
55 try: return str(html)
56 except Exception, e: print "HtmlDocument/text", e; return " "
57 def navigation(self):
58 if self.navi:
59 return self.navi
60 if self.o.body:
61 try:
62 fd = open(self.o.body, "r")
63 self.navi = fd.read()
64 fd.close()
65 return self.navi
66 except Exception, e:
67 pass
68 return None
69 def html_header(self):
70 navi = self.navigation()
71 if not navi:
72 T = "<html><head>"
73 title = self.get_title()
74 if title:
75 T += "<title>"+title+"</title>"
76 T += "\n"
77 for style in self.style:
78 T += self._html_style(style)
79 T += "\n"
80 return T+"</head><body>"
81 else:
82 title = self.get_title()
83 return navi & (
84 Match(r"<!--title-->") >> " - "+title) & (
85 Match(r"<!--VERSION-->") >> self.o.version) & (
86 Match(r"(?m).*</body></html>") >> "")
87 def html_footer(self):
88 navi = self.navigation()
89 if not navi:
90 return "</body></html>"
91 else:
92 return navi & (
93 Match(r"(?m)(.*</body></html>)") >> "%&%&%&%\\1") & (
94 Match(r"(?s).*%&%&%&%") >> "")
95 def _filename(self, filename):
96 if filename is not None:
97 self.filename = filename
98 filename = self.filename
99 if not filename & Match(r"\.\w+$"):
100 ext = self.o.html
101 if not ext: ext = "html"
102 filename += "."+ext
103 return filename
104 def save(self, filename = None):
105 filename = self._filename(filename)
106 print "writing '"+filename+"'"
107 try:
108 fd = open(filename, "w")
109 print >>fd, self.html_header()
110 for text in self.text:
111 print >>fd, self._html_text(text)
112 print >>fd, self.html_footer()
113 fd.close()
114 return True
115 except IOError, e:
116 print "could not open '"+filename+"'file", e
117 return False