summaryrefslogtreecommitdiff
path: root/Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/htmldocument.py
diff options
context:
space:
mode:
authorAkira Kakuto <kakuto@fuk.kindai.ac.jp>2016-02-22 06:41:00 +0000
committerAkira Kakuto <kakuto@fuk.kindai.ac.jp>2016-02-22 06:41:00 +0000
commit553ae4df24322a4fb019c63b81e98093f2b1a6a2 (patch)
tree4d12a0e51045a061e650c7b5484822703c8d2904 /Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/htmldocument.py
parent7e3d9b4d0fea3356761f420fccbce2bb4aa30442 (diff)
libs/zziplib: New convention
git-svn-id: svn://tug.org/texlive/trunk@39816 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/htmldocument.py')
-rw-r--r--Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/htmldocument.py117
1 files changed, 117 insertions, 0 deletions
diff --git a/Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/htmldocument.py b/Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/htmldocument.py
new file mode 100644
index 00000000000..47d58dc6ad2
--- /dev/null
+++ b/Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/htmldocument.py
@@ -0,0 +1,117 @@
+#! /usr/bin/env python
+# -*- coding: UTF-8 -*-
+from match import Match
+
+class HtmlDocument:
+ """ binds some html content page with additional markup - in this
+ base version it is just the header information while other variants
+ might add navigation items around the content block elements """
+ def __init__(self, o, filename = None):
+ self.o = o
+ self.filename = filename
+ self.title = ""
+ self.meta = []
+ self.style = []
+ self.text = []
+ self.navi = None
+ def meta(self, style):
+ """ add some header meta entry """
+ self.meta += [ meta ]
+ return self
+ def style(self, style):
+ """ add a style block """
+ self.style += [ style ]
+ return self
+ def add(self, text):
+ """ add some content """
+ self.text += [ text ]
+ return self
+ def get_title(self):
+ if self.title: return self.title
+ try: return self.text[0].get_title()
+ except Exception, e: pass
+ return self.title
+ def _html_meta(self, meta):
+ """ accepts adapter objects with .html_meta() """
+ try: return meta.html_meta()
+ except Exception, e: pass
+ return str(meta)
+ def _html_style(self, style):
+ """ accepts adapter objects with .html_style() and .xml_style() """
+ ee = None
+ try: return style.html_style()
+ except Exception, e: ee = e; pass
+ try: return style.xml_style()
+ except Exception, e: print "HtmlDocument/style", ee, e; pass
+ try: return str(style)
+ except Exception, e: print "HtmlDocument/style", e; return ""
+ def _html_text(self, html):
+ """ accepts adapter objects with .html_text() and .xml_text() """
+ ee = None
+ try: return html.html_text()
+ except Exception, e: ee = e; pass
+ try: return html.xml_text()
+ except Exception, e: print "HtmlDocument/text", ee, e; pass
+ try: return str(html)
+ except Exception, e: print "HtmlDocument/text", e; return "&nbsp;"
+ def navigation(self):
+ if self.navi:
+ return self.navi
+ if self.o.body:
+ try:
+ fd = open(self.o.body, "r")
+ self.navi = fd.read()
+ fd.close()
+ return self.navi
+ except Exception, e:
+ pass
+ return None
+ def html_header(self):
+ navi = self.navigation()
+ if not navi:
+ T = "<html><head>"
+ title = self.get_title()
+ if title:
+ T += "<title>"+title+"</title>"
+ T += "\n"
+ for style in self.style:
+ T += self._html_style(style)
+ T += "\n"
+ return T+"</head><body>"
+ else:
+ title = self.get_title()
+ return navi & (
+ Match(r"<!--title-->") >> " - "+title) & (
+ Match(r"<!--VERSION-->") >> self.o.version) & (
+ Match(r"(?m).*</body></html>") >> "")
+ def html_footer(self):
+ navi = self.navigation()
+ if not navi:
+ return "</body></html>"
+ else:
+ return navi & (
+ Match(r"(?m)(.*</body></html>)") >> "%&%&%&%\\1") & (
+ Match(r"(?s).*%&%&%&%") >> "")
+ def _filename(self, filename):
+ if filename is not None:
+ self.filename = filename
+ filename = self.filename
+ if not filename & Match(r"\.\w+$"):
+ ext = self.o.html
+ if not ext: ext = "html"
+ filename += "."+ext
+ return filename
+ def save(self, filename = None):
+ filename = self._filename(filename)
+ print "writing '"+filename+"'"
+ try:
+ fd = open(filename, "w")
+ print >>fd, self.html_header()
+ for text in self.text:
+ print >>fd, self._html_text(text)
+ print >>fd, self.html_footer()
+ fd.close()
+ return True
+ except IOError, e:
+ print "could not open '"+filename+"'file", e
+ return False