File: update_doc_libs.py

package info (click to toggle)
wxwidgets3.0 3.0.5.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 120,464 kB
  • sloc: cpp: 896,633; makefile: 52,303; ansic: 21,971; sh: 5,713; python: 2,940; xml: 1,534; perl: 264; javascript: 33
file content (99 lines) | stat: -rwxr-xr-x 3,667 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
##############################################################################
# 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))