]> git.saurik.com Git - wxWidgets.git/blobdiff - misc/scripts/update_doc_libs.py
keep initial size from changing when frame extents become known
[wxWidgets.git] / misc / scripts / update_doc_libs.py
old mode 100644 (file)
new mode 100755 (executable)
index 3a57056..fbedee3
 # Licence:    wxWindows licence\r
 ##############################################################################\r
 \r
-import sys, os, glob, distutils.file_util\r
+from update_doc_utils import scanTexFiles\r
 \r
-tofix = set()\r
-count = 0\r
-for f in glob.glob('*.tex'):\r
-    file = open(f, "r")\r
-    if not file:\r
-        print "could not open %s" % f\r
-        continue\r
-    print "opened file %s" % f\r
-    count = count + 1\r
-    \r
-    # search \class\r
-    content = file.readlines()\r
-    classdecl = 0\r
-    for i in range(len(content)):\r
-        line = content[i]\r
-        if "\class{" in line:\r
-            classdecl = classdecl + 1\r
-            \r
-            classname = line\r
-            classname = classname[classname.find("\class{"):]\r
-            classname = classname[classname.find("{")+1:classname.find("}")]\r
-            print " the class declared is named '%s'" % classname\r
-            \r
-            tofix.add(f)     # consider this .tex broken\r
-            \r
-            # now search the include file for this class\r
-            include = ""\r
-            for j in range(i,len(content)):\r
-                line = content[j]\r
-                if "wx/" in line and ".h" in line:\r
-                    include = line[line.find("wx/"):line.find(".h")+2]\r
+INCLUDE_PATH="../../include"\r
+\r
+def myCallback(classname, texFileName, content, i):\r
+    tofix.add(texFileName)     # consider this .tex broken\r
+\r
+    # now search the include file for this class\r
+    include = ""\r
+    for j in range(i,len(content)):\r
+        line = content[j]\r
+        if "wx/" in line and ".h" in line:\r
+            include = line[line.find("wx/"):line.find(".h")+2]\r
+            break\r
+    if include == "":\r
+        print " no include file declared for class %s" % classname\r
+        return True # go on with next \class\r
+\r
+    include = include.replace("\\_", "_")\r
+    print " the include file for %s is %s" % (classname, include)\r
+\r
+    # does this .tex already contains the \wxheading{Library} section nearby the include file?\r
+    for k in range(j,min(len(content), j+3)):\r
+        line = content[k]\r
+        if "\wxheading{Library}" in line:\r
+            print " this \class section already has its \wxheading{Library} section... skipping"\r
+            tofix.remove(texFileName) # was a valid .tex (at least for current class)\r
+            return True   # go on with next \class\r
+\r
+    # now try to understand which lib contains this class\r
+    include = INCLUDE_PATH + "/" + include\r
+    header = open(include, "r")\r
+    if not header:\r
+        print " could not open %s" % include\r
+        return True # go on with next \class\r
+\r
+    decl = ""\r
+    content2 = header.readlines()\r
+\r
+    # if they exist append port-specific headers contents\r
+    for c in ["wx/gtk/", "wx/msw/", "wx/mac/", "wx/generic/"]:\r
+        try:\r
+            temp = include.replace("wx/", c)\r
+            print " trying to open %s..." % temp\r
+            header = open(temp, "r")\r
+            headercontents = header.readlines()\r
+            content2 = content2 + headercontents\r
+            print " added %d lines from %s" % (len(headercontents), temp)\r
+        except:\r
+            pass\r
+\r
+    # now search for the export-declaration associated with this class\r
+    for line in content2:\r
+        if "class " in line and classname in line:\r
+            if line.find("class") < line.find(classname):  # could be a comment\r
+                if "_" in line:\r
+                    decl = line[line.find("_")+1:]\r
+                    decl = decl[:decl.find(" ")]\r
+                    decl = decl.replace("FWD_", "")\r
+                    decl = decl[0:1].upper() + decl[1:].lower()\r
+                    break\r
+                elif " WXDLLEXPORT " in line:\r
+                    decl = "Core"\r
                     break\r
-            if include == "":\r
-                print " no include file declared for class %s" % classname\r
-                continue\r
-            \r
-            include = include.replace("\\_", "_")\r
-            print " the include file for %s is %s" % (classname, include)\r
-            \r
-            # now try to understand which libs contains this class\r
-            include = "../../../include/" + include\r
-            header = open(include, "r")\r
-            if not file:\r
-                print " could not open %s" % include\r
-                continue\r
-\r
-            decl = ""\r
-            content2 = header.readlines()\r
-            \r
-            # if they exist append port-specific headers contents\r
-            for c in ["wx/gtk/", "wx/msw/", "wx/mac/", "wx/generic/"]:\r
-                try:\r
-                    temp = include.replace("wx/", c)\r
-                    print " trying to open %s..." % temp\r
-                    header = open(temp, "r")\r
-                    headercontents = header.readlines()\r
-                    content2 = content2 + headercontents\r
-                    print " added %d lines from %s" % (len(headercontents), temp)\r
-                except:\r
-                    pass\r
-            \r
-            for line in content2:\r
-                if "class " in line and classname in line:\r
-                    if line.find("class") < line.find(classname):  # could be a comment\r
-                        if "_" in line:\r
-                            decl = line[line.find("_")+1:]\r
-                            decl = decl[:decl.find(" ")]\r
-                            decl = decl.replace("FWD_", "")\r
-                            decl = decl[0:1].upper() + decl[1:].lower()\r
-                            break\r
-                        elif " WXDLLEXPORT " in line:\r
-                            decl = "Core"\r
-                            break\r
-                        \r
-            if decl == "":\r
-                print " no declaration associated with %s" % classname\r
-                continue\r
-            \r
-            print " the declaration associated with %s is %s" % (classname, decl)\r
-            tofix.remove(f) # was a valid .tex (at least for current class)\r
-            \r
-            # now modify the .tex file\r
-            content.insert(j+2, "\wxheading{Library}\n\n\helpref{wx%s}{librarieslist}\n\n" % decl)\r
-            \r
-            # write it\r
-            file = open(f, "w")\r
-            file.write(''.join(content))\r
-            file.flush()\r
-            \r
-            file = open(f, "r")\r
-\r
-            print " updated %s" % f\r
-\r
-            \r
-    print " file %s contains %d class declarations" % (f, classdecl)\r
-\r
-print "\nProcessed %d files." % count\r
-print "There are %d files to fix:\n%s" % (len(tofix), '\n'.join(tofix))\r
+\r
+    if decl == "":\r
+        print " no declaration associated with %s" % classname\r
+        return True # go on with next \class\r
+\r
+    print " the declaration associated with %s is %s" % (classname, decl)\r
+    tofix.remove(texFileName) # was a valid .tex (at least for current class)\r
+\r
+    # now modify the .tex file\r
+    content.insert(j+2, "\wxheading{Library}\n\n\helpref{wx%s}{librarieslist}\n\n" % decl)\r
+\r
+    # write it\r
+    file = open(texFileName, "w")\r
+    file.write(''.join(content))\r
+    file.flush()\r
+\r
+    print " updated %s" % texFileName\r
+    fixed = fixed+1\r
+\r
+    return True\r
+\r
+fixed = 0\r
+tofix = set()\r
+count = scanTexFiles(myCallback)\r
+\r
+print "\nProcessed %d files, automatically fixed %d files." % (count, fixed)\r
+print "There are %d files to fix manually:\n%s" % (len(tofix), '\n'.join(tofix))\r