summaryrefslogtreecommitdiff
path: root/Build/source/libs/zziplib/zziplib-0.13.58/docs/zzipdoc/htm2dbk.py
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/zziplib/zziplib-0.13.58/docs/zzipdoc/htm2dbk.py')
-rw-r--r--Build/source/libs/zziplib/zziplib-0.13.58/docs/zzipdoc/htm2dbk.py158
1 files changed, 158 insertions, 0 deletions
diff --git a/Build/source/libs/zziplib/zziplib-0.13.58/docs/zzipdoc/htm2dbk.py b/Build/source/libs/zziplib/zziplib-0.13.58/docs/zzipdoc/htm2dbk.py
new file mode 100644
index 00000000000..ec9685bfd3e
--- /dev/null
+++ b/Build/source/libs/zziplib/zziplib-0.13.58/docs/zzipdoc/htm2dbk.py
@@ -0,0 +1,158 @@
+#! /usr/bin/env python
+
+"""
+this file converts simple html text into a docbook xml variant.
+The mapping of markups and links is far from perfect. But all we
+want is the docbook-to-pdf converter and similar technology being
+present in the world of docbook-to-anything converters. """
+
+from datetime import date
+import match
+import sys
+
+m = match.Match
+
+class htm2dbk_conversion_base:
+ regexlist = [
+ m()("</[hH]2>(.*)", "m") >> "</title>\n<subtitle>\\1</subtitle>",
+ m()("<[hH]2>") >> "<sect1 id=\"--filename--\"><title>",
+ m()("<[Pp]([> ])","m") >> "<para\\1",
+ m()("</[Pp]>") >> "</para>",
+ m()("<(pre|PRE)>") >> "<screen>",
+ m()("</(pre|PRE)>") >> "</screen>",
+ m()("<[hH]3>") >> "<sect2><title>",
+ m()("</[hH]3>((?:.(?!<sect2>))*.?)", "s") >> "</title>\\1</sect2>",
+ m()("<!doctype [^<>]*>","s") >> "",
+ m()("<!DOCTYPE [^<>]*>","s") >> "",
+ m()("(<\w+\b[^<>]*\swidth=)(\d+\%)","s") >> "\\1\"\\2\"",
+ m()("(<\w+\b[^<>]*\s\w+=)(\d+)","s") >> "\\1\"\\2\"",
+ m()("&&") >> "\&amp\;\&amp\;",
+ m()("\$\<") >> "\$\&lt\;",
+ m()("&(\w+[\),])") >> "\&amp\;\\1",
+ m()("(</?)span(\s[^<>]*)?>","s") >> "\\1phrase\\2>",
+ m()("(</?)small(\s[^<>]*)?>","s") >> "\\1note\\2>",
+ m()("(</?)(b|em|i)>")>> "\\1emphasis>",
+ m()("(</?)(li)>") >> "\\1listitem>",
+ m()("(</?)(ul)>") >> "\\1itemizedlist>",
+ m()("(</?)(ol)>") >> "\\1orderedlist>",
+ m()("(</?)(dl)>") >> "\\1variablelist>",
+ m()("<dt\b([^<>]*)>","s") >> "<varlistentry\\1><term>",
+ m()("</dt\b([^<>]*)>","s") >> "</term>",
+ m()("<dd\b([^<>]*)>","s") >> "<listitem\\1>",
+ m()("</dd\b([^<>]*)>","s") >> "</listitem></varlistentry>",
+ m()("<table\b([^<>]*)>","s")
+ >> "<informaltable\\1><tgroup cols=\"2\"><tbody>",
+ m()("</table\b([^<>]*)>","s") >> "</tbody></tgroup></informaltable>",
+ m()("(</?)tr(\s[^<>]*)?>","s") >> "\\1row\\2>",
+ m()("(</?)td(\s[^<>]*)?>","s") >> "\\1entry\\2>",
+ m()("<informaltable\b[^<>]*>\s*<tgroup\b[^<>]*>\s*<tbody>"+
+ "\s*<row\b[^<>]*>\s*<entry\b[^<>]*>\s*<informaltable\b","s")
+ >> "<informaltable",
+ m()("</informaltable>\s*</entry>\s*</row>"+
+ "\s*</tbody>\s*</tgroup>\s*</informaltable>", "s")
+ >> "</informaltable>",
+ m()("(<informaltable[^<>]*\swidth=\"100\%\")","s") >> "\\1 pgwide=\"1\"",
+ m()("(<tbody>\s*<row[^<>]*>\s*<entry[^<>]*\s)(width=\"50\%\")","s")
+ >> "<colspec colwidth=\"1*\" /><colspec colwidth=\"1*\" />\n\\1\\2",
+ m()("<nobr>([\'\`]*)<tt>") >> "<cmdsynopsis>\\1",
+ m()("</tt>([\'\`]*)</nobr>") >> "\\1</cmdsynopsis>",
+ m()("<nobr><(?:tt|code)>([\`\"\'])") >> "<cmdsynopsis>\\1",
+ m()("<(?:tt|code)><nobr>([\`\"\'])") >> "<cmdsynopsis>\\1",
+ m()("([\`\"\'])</(?:tt|code)></nobr>") >> "\\1</cmdsynopsis>",
+ m()("([\`\"\'])</nobr></(?:tt|code)>") >> "\\1</cmdsynopsis>",
+ m()("(</?)tt>") >> "\\1constant>",
+ m()("(</?)code>") >> "\\1literal>",
+ m()(">([^<>]+)<br>","s") >> "><highlights>\\1</highlights>",
+ m()("<br>") >> "<br />",
+ # m()("<date>") >> "<sect1info><date>",
+ # m()("</date>") >> "</date></sect1info>",
+ m()("<reference>") >> "<reference id=\"reference\">" >> 1,
+ m()("<a\s+href=\"((?:http|ftp|mailto):[^<>]+)\"\s*>((?:.(?!</a>))*.)</a>"
+ ,"s") >> "<ulink url=\"\\1\">\\2</ulink>",
+ m()("<a\s+href=\"zziplib.html\#([\w_]+)\"\s*>((?:.(?!</a>))*.)</a>","s")
+ >> "<link linkend=\"$1\">$2</link>",
+ m()("<a\s+href=\"(zziplib.html)\"\s*>((?:.(?!</a>))*.)</a>","s")
+ >> "<link linkend=\"reference\">$2</link>",
+ m()("<a\s+href=\"([\w-]+[.]html)\"\s*>((?:.(?!</a>))*.)</a>","s")
+ >> "<link linkend=\"\\1\">\\2</link>",
+ m()("<a\s+href=\"([\w-]+[.](?:h|c|am|txt))\"\s*>((?:.(?!</a>))*.)</a>"
+ ,"s") >> "<ulink url=\"file:\\1\">\\2</ulink>",
+ m()("<a\s+href=\"([A-Z0-9]+[.][A-Z0-9]+)\"\s*>((?:.(?!</a>))*.)</a>","s")
+ >> "<ulink url=\"file:\\1\">\\2</ulink>"
+ # m()("(</?)subtitle>") >> "\\1para>"
+ # $_ .= "</sect1>" if /<sect1[> ]/
+ ]
+ regexlist2 = [
+ m()(r"<br\s*/?>") >> "",
+ m()(r"(</?)em>") >> r"\1emphasis>",
+ m()(r"<code>") >> "<userinput>",
+ m()(r"</code>") >> "</userinput>",
+ m()(r"<link>") >> "<function>",
+ m()(r"</link>") >> "</function>",
+ m()(r"(?s)\s*</screen>") >> "</screen>",
+ # m()(r"<ul>") >> "</para><programlisting>\n",
+ # m()(r"</ul>") >> "</programlisting><para>",
+ m()(r"<ul>") >> "<itemizedlist>",
+ m()(r"</ul>") >> "</itemizedlist>",
+ # m()(r"<li>") >> "",
+ # m()(r"</li>") >> ""
+ m()(r"<li>") >> "<listitem><para>",
+ m()(r"</li>") >> "</para></listitem>\n",
+ ]
+class htm2dbk_conversion(htm2dbk_conversion_base):
+ def __init__(self):
+ self.version = "" # str(date.today)
+ self.filename = "."
+ def convert(self,text): # $text
+ txt = text.replace("<!--VERSION-->", self.version)
+ for conv in self.regexlist:
+ txt &= conv
+ return txt.replace("--filename--", self.filename)
+ def convert2(self,text): # $text
+ txt = text.replace("<!--VERSION-->", self.version)
+ for conv in self.regexlist:
+ txt &= conv
+ return txt
+
+class htm2dbk_document(htm2dbk_conversion):
+ """ create document, add(text) and get the value() """
+ doctype = (
+ '<!DOCTYPE book PUBLIC "-//OASIS//DTD'+
+ ' DocBook XML V4.1.2//EN"'+"\n"+
+ ' "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">'+
+ "\n")
+ book_start = '<book><chapter><title>Documentation</title>'+"\n"
+ book_end_chapters = '</chapter>'+"\n"
+ book_end = '</book>'+"\n"
+ def __init__(self):
+ htm2dbk_conversion.__init__(self)
+ self.text = self.doctype + self.book_start
+ def add(self,text):
+ if self.text & m()("<reference"):
+ self.text += self.book_end_chapters ; self.book_end_chapters = ""
+ self.text += self.convert(text).replace(
+ "<br />","") & (
+ m()("<link>([^<>]*)</link>") >> "<function>\\1</function>") & (
+ m()("(?s)(<refentryinfo>\s*)<sect1info>" +
+ "(<date>[^<>]*</date>)</sect1info>") >> "\\1\\2")
+ def value(self):
+ return self.text + self.book_end_chapters + self.book_end
+
+def htm2dbk_files(args):
+ doc = htm2dbk_document()
+ for filename in args:
+ try:
+ f = open(filename, "r")
+ doc.filename = filename
+ doc.add(f.read())
+ f.close()
+ except IOError, e:
+ print >> sys.stderr, "can not open "+filename
+ return doc.value()
+
+def html2docbook(text):
+ """ the C comment may contain html markup - simulate with docbook tags """
+ return htm2dbk_conversion().convert2(text)
+
+if __name__ == "__main__":
+ print htm2dbk_files(sys.argv[1:])