wxWidgets/misc/scripts/update_doc_baseclasses.py
Vadim Zeitlin 3f66f6a5b3 Remove all lines containing cvs/svn "$Id$" keyword.
This keyword is not expanded by Git which means it's not replaced with the
correct revision value in the releases made using git-based scripts and it's
confusing to have lines with unexpanded "$Id$" in the released files. As
expanding them with Git is not that simple (it could be done with git archive
and export-subst attribute) and there are not many benefits in having them in
the first place, just remove all these lines.

If nothing else, this will make an eventual transition to Git simpler.

Closes #14487.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-26 16:02:46 +00:00

130 lines
4.5 KiB
Python

##############################################################################
# Name: misc/scripts/update_doc_baseclasses.py
# Purpose: Warns about missing classes in the "Derived from"
# sections in the doc files
# Created: 2007-07-28
# Copyright: (c) 2007 Francesco Montorsi
# Licence: wxWindows licence
##############################################################################
from update_doc_utils import scanTexFiles
# classes whose docs cannot be fixed automatically
# because of:
# 1) multiple inheritance
# 2) other strange things specific of these classes
EXCEPTIONS=['wxNotebook','wxChoicebook','wxListbook','wxToolbook','wxTreebook','wxURLDataObject','wxHScrolledWindow','wxVScrolledWindow','wxVarHVScrollHelper','wxHVScrolledWindow','wxFileStream']
def myCallback(classname, texFileName, content, i):
# now search the base classes for this class
baseclasses = []
for j in range(i,len(content)):
line = content[j]
if line.startswith("\wxheading{Derived from}"):
# take all lines contained between this \wxheading and the next one
# as base classes
for k in range(j+1,len(content)):
line = content[k]
if "\wxheading" in line:
break
elif "\helpref" in line:
baseclasses.append(line)
break # we've already processed the 'derived from' section for this class
if baseclasses == []:
print " no base classes declared for class %s" % classname
return True # keep going on with next \class tags
# polish baseclasses list
for i in range(len(baseclasses)):
s = baseclasses[i]
baseclasses[i] = s[s.find("{")+1:s.find("}")]
# store the baseclasses
tree[classname] = baseclasses
treetex[classname] = texFileName
treepos[classname] = j+1
print " class '%s' has %d base class(es): %s" % (classname, len(baseclasses), ','.join(baseclasses))
return True
tree = dict()
treetex = dict()
treepos = dict()
count = scanTexFiles(myCallback)
print "\nProcessed %d files." % count
print "\nNow starting to compare the base class lists.\n"
def getFullListOfBaseClasses(classname):
if classname not in tree or classname=='':
return []
# only use the first base class of info taken from .tex files
# i.e. we assume that at least the first class declared as base class is always correct
baseclass = tree[classname][0]
return [baseclass] + getFullListOfBaseClasses(baseclass)
# now compare the theorical list of base classes with the list of base
# classes taken from the .tex files
fixed=0
tofix=set()
for classname in tree:
theorical=getFullListOfBaseClasses(classname)
real=tree[classname]
# compare them
if real!=theorical:
print "* for class '%s' documented in '%s'" % (classname,treetex[classname])
print " theorical list: %s" % theorical
print " declared list: %s" % real
if classname in EXCEPTIONS:
tofix.add(treetex[classname])
print " cannot fix automatically (blacklisted class!)\n"
continue
# fix it!
file = open(treetex[classname], "r")
content = file.readlines()
#print "old content is:"
#print ''.join(content)
# remove old \helpref lines
startidx = treepos[classname]
count = 0
while count < len(tree[classname]):
# we want to remove n \helpref lines, where 'n' is the
# number of base classes declared
if content[startidx].startswith('\helpref'):
del content[startidx]
count = count+1
else:
startidx = startidx+1 # probably an empty line
# insert new ones
if len(theorical)>1:
for j in range(len(theorical)-1):
c = theorical[j]
content.insert(startidx+j, "\helpref{%s}{%s}\\\\\n" % (c, c.lower()))
else:
j=-1
c = theorical[j+1]
content.insert(startidx+j+1, "\helpref{%s}{%s}\n" % (c, c.lower()))
#print "new content is:"
#print ''.join(content)
# save the file
file = open(treetex[classname], "w")
file.write(''.join(content))
file.flush()
print " fixed the .tex file\n"
fixed=fixed+1
print "Total number of errors reported: %d" % fixed
print "There are %d files to fix manually:\n%s" % (len(tofix), '\n'.join(tofix))