2009-04-26 19:36:36 +00:00
|
|
|
##############################################################################
|
|
|
|
# Name: misc/scripts/update_doc_libs.py
|
|
|
|
# Purpose: Automatically insert \Library{} headers in the doc files
|
|
|
|
# Created: 2007-07-28
|
|
|
|
# Copyright: (c) 2007 Francesco Montorsi
|
|
|
|
# Licence: wxWindows licence
|
|
|
|
##############################################################################
|
|
|
|
|
|
|
|
from update_doc_utils import scanTexFiles
|
|
|
|
|
|
|
|
INCLUDE_PATH="../../include"
|
|
|
|
|
|
|
|
def myCallback(classname, texFileName, content, i):
|
|
|
|
tofix.add(texFileName) # consider this .tex broken
|
|
|
|
|
|
|
|
# now search the include file for this class
|
|
|
|
include = ""
|
|
|
|
for j in range(i,len(content)):
|
|
|
|
line = content[j]
|
|
|
|
if "wx/" in line and ".h" in line:
|
|
|
|
include = line[line.find("wx/"):line.find(".h")+2]
|
|
|
|
break
|
|
|
|
if include == "":
|
|
|
|
print " no include file declared for class %s" % classname
|
|
|
|
return True # go on with next \class
|
|
|
|
|
|
|
|
include = include.replace("\\_", "_")
|
|
|
|
print " the include file for %s is %s" % (classname, include)
|
|
|
|
|
|
|
|
# does this .tex already contains the \wxheading{Library} section nearby the include file?
|
|
|
|
for k in range(j,min(len(content), j+3)):
|
|
|
|
line = content[k]
|
|
|
|
if "\wxheading{Library}" in line:
|
|
|
|
print " this \class section already has its \wxheading{Library} section... skipping"
|
|
|
|
tofix.remove(texFileName) # was a valid .tex (at least for current class)
|
|
|
|
return True # go on with next \class
|
|
|
|
|
|
|
|
# now try to understand which lib contains this class
|
|
|
|
include = INCLUDE_PATH + "/" + include
|
|
|
|
header = open(include, "r")
|
|
|
|
if not header:
|
|
|
|
print " could not open %s" % include
|
|
|
|
return True # go on with next \class
|
|
|
|
|
|
|
|
decl = ""
|
|
|
|
content2 = header.readlines()
|
|
|
|
|
|
|
|
# if they exist append port-specific headers contents
|
|
|
|
for c in ["wx/gtk/", "wx/msw/", "wx/mac/", "wx/generic/"]:
|
|
|
|
try:
|
|
|
|
temp = include.replace("wx/", c)
|
|
|
|
print " trying to open %s..." % temp
|
|
|
|
header = open(temp, "r")
|
|
|
|
headercontents = header.readlines()
|
|
|
|
content2 = content2 + headercontents
|
|
|
|
print " added %d lines from %s" % (len(headercontents), temp)
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
|
|
|
|
# now search for the export-declaration associated with this class
|
|
|
|
for line in content2:
|
|
|
|
if "class " in line and classname in line:
|
|
|
|
if line.find("class") < line.find(classname): # could be a comment
|
|
|
|
if "_" in line:
|
|
|
|
decl = line[line.find("_")+1:]
|
|
|
|
decl = decl[:decl.find(" ")]
|
|
|
|
decl = decl.replace("FWD_", "")
|
|
|
|
decl = decl[0:1].upper() + decl[1:].lower()
|
|
|
|
break
|
|
|
|
elif " WXDLLEXPORT " in line:
|
|
|
|
decl = "Core"
|
|
|
|
break
|
|
|
|
|
|
|
|
if decl == "":
|
|
|
|
print " no declaration associated with %s" % classname
|
|
|
|
return True # go on with next \class
|
|
|
|
|
|
|
|
print " the declaration associated with %s is %s" % (classname, decl)
|
|
|
|
tofix.remove(texFileName) # was a valid .tex (at least for current class)
|
|
|
|
|
|
|
|
# now modify the .tex file
|
|
|
|
content.insert(j+2, "\wxheading{Library}\n\n\helpref{wx%s}{librarieslist}\n\n" % decl)
|
|
|
|
|
|
|
|
# write it
|
|
|
|
file = open(texFileName, "w")
|
|
|
|
file.write(''.join(content))
|
|
|
|
file.flush()
|
|
|
|
|
|
|
|
print " updated %s" % texFileName
|
|
|
|
fixed = fixed+1
|
|
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
fixed = 0
|
|
|
|
tofix = set()
|
|
|
|
count = scanTexFiles(myCallback)
|
|
|
|
|
|
|
|
print "\nProcessed %d files, automatically fixed %d files." % (count, fixed)
|
|
|
|
print "There are %d files to fix manually:\n%s" % (len(tofix), '\n'.join(tofix))
|