]> git.saurik.com Git - wxWidgets.git/commitdiff
Build the contents and index files for HtmlHelp
authorRobin Dunn <robin@alldunn.com>
Sat, 9 Sep 2006 19:41:51 +0000 (19:41 +0000)
committerRobin Dunn <robin@alldunn.com>
Sat, 9 Sep 2006 19:41:51 +0000 (19:41 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41112 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/docs/bin/BuildAPIHelpBook.py [new file with mode: 0644]
wxPython/docs/bin/makeapidocs

diff --git a/wxPython/docs/bin/BuildAPIHelpBook.py b/wxPython/docs/bin/BuildAPIHelpBook.py
new file mode 100644 (file)
index 0000000..c8c33c5
--- /dev/null
@@ -0,0 +1,195 @@
+import htmllib, formatter, string, os, pprint, types, sys, glob
+
+api_name = sys.argv[1]  #'wxpyapi'
+api_path = sys.argv[2]  #'./docs/api/'
+
+
+header_hhx = '''<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<HTML>
+<head>
+<meta name="GENERATOR" content="BuildAPIHelpBook">
+</HEAD><BODY>
+<OBJECT type="text/site properties">
+ <param name="ImageType" value="Folder">
+</OBJECT>
+'''
+
+entry_hhx = '''<LI> <OBJECT type="text/sitemap">
+<param name="Local" value="%s">
+<param name="Name" value="%s">
+</OBJECT>
+'''
+
+file_hhp = '''[OPTIONS]
+Compatibility=1.1
+Full-text search=Yes
+Contents file=%(n)s.hhc
+Compiled file=%(n)s.chm
+Default Window=wxHelp
+Default topic=index.html
+Index file=%(n)s.hhk
+Title=wxPython API Documentation
+
+[WINDOWS]
+wxHelp=,"%(n)s.hhc","%(n)s.hhk","index.html",,,,,,0x2420,,0x380e,,,,,0,,,
+
+[FILES]
+'''
+
+def read_segment(fn, start, end):
+    data = open(fn).read()
+    begin = data.find(start)+len(start)
+    return data[begin:data.find(end, begin)]
+    
+
+#-------------------------------------------------------------------------------
+
+def build_project():    
+    hhp = file_hhp % {'n' : api_name}
+
+    def doglob(mask):
+        st = ''
+        for name in glob.glob(os.path.join(api_path, mask)):
+            name = os.path.split(name)[-1]
+            st += name + '\n'
+        return st
+
+    hhp += doglob("*.html")
+    hhp += doglob("*.css")
+    
+    open(os.path.join(api_path, api_name+'.hhp'), 'w').write(hhp)
+
+#-------------------------------------------------------------------------------
+
+def build_contents():
+    def traverse(l, r):
+        for i in l:
+            if type(i) is types.ListType:
+                r.append('<UL>'+os.linesep)
+                traverse(i, r)
+                r.append('</UL>'+os.linesep)
+            elif type(i) is types.TupleType:
+                r.append(entry_hhx%i)
+            else:
+                raise Exception, 'Unhandled type: %s'%type(i)
+
+    data = read_segment(os.path.join(api_path, 'trees.html'),
+          '<!-- =========== START OF CLASS HIERARCHY =========== -->',
+          '<!-- =========== START OF NAVBAR =========== -->')
+    p = APIContentsParser(formatter.NullFormatter(formatter.NullWriter()))
+    p.feed(data)
+
+    class_hierarchy = []
+    traverse(p.current, class_hierarchy)
+
+    data = read_segment(os.path.join(api_path, 'wx-module.html'),
+          '<!-- =========== START OF SUBMODULES =========== -->',
+          '<!-- =========== START OF CLASSES =========== -->')
+    p = APIContentsParser(formatter.NullFormatter(formatter.NullWriter()))
+    p.feed(data)
+    submodules = []
+    traverse(p.current, submodules)
+    
+    hhc = header_hhx+\
+          '<UL>'+os.linesep+entry_hhx%('wx-module.html', 'Submodules')+\
+          ''.join(submodules)+'</UL>'+os.linesep+\
+          '<UL>'+os.linesep+entry_hhx%('trees.html', 'Class Hierarchy')+\
+          ''.join(class_hierarchy)+'</UL>'+os.linesep 
+
+    open(os.path.join(api_path, api_name+'.hhc'), 'w').write(hhc)
+
+
+class APIContentsParser(htmllib.HTMLParser):
+    def __init__(self, formatter, verbose=0):
+        htmllib.HTMLParser.__init__(self, formatter, verbose)
+        
+        self.contents = []
+        self.history = []
+        self.current = self.contents
+
+        self.cur_href = None
+        self.li_a_cnt = 0
+
+    def start_li(self, attrs):
+        self.li_a_cnt = 0
+
+    def start_a(self, attrs):
+        self.li_a_cnt += 1
+        if self.li_a_cnt == 1:
+            if attrs[0][0] == 'href':
+                self.cur_href = attrs[0][1]
+
+    def end_a(self):
+        self.cur_href = None
+    
+    def start_code(self, attrs):
+        self.save_bgn()
+
+    def end_code(self):
+        text = string.strip(self.save_end())
+        if self.cur_href and text:
+            self.current.append( (self.cur_href, text) )
+                
+    def start_ul(self, attrs):
+        self.history.append(self.current)
+        self.current = []
+        
+    def end_ul(self):
+        c = self.history.pop()
+        c.append(self.current)
+        self.current = c
+
+#-------------------------------------------------------------------------------
+
+def build_keywords():
+    data = read_segment(os.path.join(api_path, 'indices.html'),
+          '<!-- =========== START OF IDENTIFIER INDEX =========== -->',
+          '<!-- =========== START OF NAVBAR =========== -->')
+    p = APIIndicesParser(formatter.NullFormatter(formatter.NullWriter()))
+    p.feed(data)
+    
+    hhk = header_hhx+ '<UL>'+os.linesep+\
+          ''.join([entry_hhx%(u, k) for u, k in p.indices])+os.linesep+'</UL>'
+    open(os.path.join(api_path, api_name+'.hhk'), 'w').write(hhk)
+
+
+class APIIndicesParser(htmllib.HTMLParser):
+    def __init__(self, formatter, verbose=0):
+        htmllib.HTMLParser.__init__(self, formatter, verbose)
+        
+        self.indices = []
+        self.cur_href = None
+        self.tr_a_cnt = 0
+    
+    def start_tr(self, attrs):
+        self.tr_a_cnt = 0
+
+    def end_tr(self):
+        self.tr_a_cnt = 0
+        
+    def start_a(self, attrs):
+        self.tr_a_cnt += 1
+        if self.tr_a_cnt == 1:
+            if attrs[0][0] == 'href':
+                self.cur_href = attrs[0][1]
+
+    def end_a(self):
+        self.cur_href = None
+    
+    def start_code(self, attrs):
+        self.save_bgn()
+
+    def end_code(self):
+        text = string.strip(self.save_end())
+        if self.cur_href and text:
+            self.indices.append( (self.cur_href, text) )
+
+#-------------------------------------------------------------------------------
+
+if __name__ == '__main__':
+    print 'Building project...'
+    build_project()    
+    print 'Building contents...'
+    build_contents()
+    print 'Building keywords...'
+    build_keywords()
index 3da60c37cceda326e1600d7c26a63fb5fca6d19d..36b3230ac1b85a4d813e2a3de1e9c4583af36c37 100755 (executable)
@@ -2,6 +2,8 @@
 
 #----------------------------------------------------------------------
 
+set -o xtrace
+
 if [ ! -d wxPython ]; then  # TODO: make this test more robust
     echo "Please run this script from the root wxPython directory."
     exit 1
@@ -40,6 +42,9 @@ export PTYHONPATH=$PWD
 #    --docformat epytext \
 #    --debug \
 #    --inheritance grouped \
+#    --inheritance none \
+
+python docs/bin/BuildAPIHelpBook.py wxpyapi docs/api
 
 
 # TODO: