| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- ##############################################################################
- # 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))
|