Build the contents and index files for HtmlHelp
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41112 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
195
wxPython/docs/bin/BuildAPIHelpBook.py
Normal file
195
wxPython/docs/bin/BuildAPIHelpBook.py
Normal file
@@ -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()
|
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
|
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
if [ ! -d wxPython ]; then # TODO: make this test more robust
|
if [ ! -d wxPython ]; then # TODO: make this test more robust
|
||||||
echo "Please run this script from the root wxPython directory."
|
echo "Please run this script from the root wxPython directory."
|
||||||
exit 1
|
exit 1
|
||||||
@@ -40,6 +42,9 @@ export PTYHONPATH=$PWD
|
|||||||
# --docformat epytext \
|
# --docformat epytext \
|
||||||
# --debug \
|
# --debug \
|
||||||
# --inheritance grouped \
|
# --inheritance grouped \
|
||||||
|
# --inheritance none \
|
||||||
|
|
||||||
|
python docs/bin/BuildAPIHelpBook.py wxpyapi docs/api
|
||||||
|
|
||||||
|
|
||||||
# TODO:
|
# TODO:
|
||||||
|
Reference in New Issue
Block a user