diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2016-02-22 06:41:00 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2016-02-22 06:41:00 +0000 |
commit | 553ae4df24322a4fb019c63b81e98093f2b1a6a2 (patch) | |
tree | 4d12a0e51045a061e650c7b5484822703c8d2904 /Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/functionlisthtmlpage.py | |
parent | 7e3d9b4d0fea3356761f420fccbce2bb4aa30442 (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/functionlisthtmlpage.py')
-rw-r--r-- | Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/functionlisthtmlpage.py | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/functionlisthtmlpage.py b/Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/functionlisthtmlpage.py new file mode 100644 index 00000000000..4ec9178ca10 --- /dev/null +++ b/Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/functionlisthtmlpage.py @@ -0,0 +1,127 @@ +from options import * +from match import Match + +class FunctionListHtmlPage: + """ The main part here is to create a TOC (table of contents) at the + start of the page - linking down to the descriptions of the functions. + Sure we need to generate anchors on the fly. Additionally, all the + non-html (docbook-like) markup needs to be converted for ouput. - + each element to be added should implement get_name(), get_head() and + get_body() with the latter two having a xml_text() method.""" + _null_table100 = '<table border="0" width="100%"' \ + ' cellpadding="0" cellspacing="0">' + _ul_start = '<table width="100%">' + _ul_end = '</table>' + _li_start = '<tr><td valign="top">' + _li_end = '</td></tr>' + http_opengroup = "http://www.opengroup.org/onlinepubs/000095399/functions/" + http_zlib = "http://www.zlib.net/manual.html" + def __init__(self, o = None): + self.toc = "" + self.text = "" + self.head = "" + self.body = "" + self.anchors = [] + self.o = o + if self.o is None: self.o = Options() + self.not_found_in_anchors = [] + def cut(self): + self.text += ("<dt>"+self._ul_start+self.head+self._ul_end+"</dt>"+ + "<dd>"+self._ul_start+self.body+self._ul_end+"</dd>") + self.head = "" + self.body = "" + def add(self, entry): + name = entry.get_name() + head_text = entry.head_xml_text() + body_text = entry.body_xml_text(name) + if not head_text: + print "no head_text for", name + return + try: + prespec = entry.head_get_prespec() + namespec = entry.head_get_namespec() + callspec = entry.head_get_callspec() + head_text = ("<code><b><function>"+namespec+"</function></b>" + +callspec+" : "+prespec+"</code>") + except Exception, e: + pass + try: + extraline = "" + title = entry.get_title() + filename = entry.get_filename().replace("../","") + if title: + subtitle = ' <em>'+title+'</em>' + extraline = (self._null_table100+'<td> '+subtitle+' </td>'+ + '<td align="right"> '+ + '<em><small>'+filename+'</small></em>'+ + '</td></table>') + body_text = extraline + body_text + except Exception, e: + pass + def link(text): + return (text & Match("<function>(\w*)</function>") + >> "<link>\\1</link>") + def here(text): + has_function = Match("<function>(\w*)</function>") + if text & has_function: + func = has_function[1] + self.anchors += [ func ] + return (text & has_function + >> '<a name="'+"\\1"+'">'+"\\1"+'</a>') + else: + return text + self.toc += self._li_start+self.sane(link(head_text))+self._li_end + self.head += self._li_start+self.sane(here(head_text))+self._li_end + self.body += self._li_start+self.sane(body_text)+self._li_end + def get_title(self): + return self.o.package+" Library Functions" + def xml_text(self): + self.cut() + return ("<h2>"+self.get_title()+"</h2>"+ + self.version_line()+ + self.mainheader_line()+ + self._ul_start+ + self.resolve_links(self.toc)+ + self._ul_end+ + "<h3>Documentation</h3>"+ + "<dl>"+ + self.resolve_links(self.text)+ + "</dl>") + def version_line(self): + if self.o.version: + return "<p>Version "+self.o.version+"</p>" + return "" + def mainheader_line(self): + if self.o.onlymainheader: + include = "#include <"+self.o.onlymainheader+">" + return "<p><big><b><code>"+include+"</code></b></big></p>" + return "" + def resolve_links(self, text): + text &= (Match("(?s)<link>([^<>]*)(\(\d\))</link>") + >> (lambda x: self.resolve_external(x.group(1), x.group(2)))) + text &= (Match("(?s)<link>(\w+)</link>") + >> (lambda x: self.resolve_internal(x.group(1)))) + if len(self.not_found_in_anchors): + print "not found in anchors: ", self.not_found_in_anchors + return (text & Match("(?s)<link>([^<>]*)</link>") + >> "<code>\\1</code>") + def resolve_external(self, func, sect): + x = Match() + if func & x("^zlib(.*)"): + return ('<a href="'+self.http_zlib+x[1]+'">'+ + "<code>"+func+sect+"</code>"+'</a>') + if sect & x("[23]"): + return ('<a href="'+self.http_opengroup+func+'.html">'+ + "<code>"+func+sect+"</code>"+'</a>') + return "<code>"+func+"<em>"+sect+"</em></sect>" + def resolve_internal(self, func): + if func in self.anchors: + return '<code><a href="#'+func+'">'+func+"</a></code>" + if func not in self.not_found_in_anchors: + self.not_found_in_anchors += [ func ] + return "<code><u>"+func+"</u></code>" + def sane(self, text): + return (text + .replace("<function>", "<code>") + .replace("</function>", "</code>")) + |