From 1e9b37a2fadb82105b51470b53e31936dc39888d Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Thu, 11 Dec 2003 19:07:00 +0000 Subject: [PATCH] Updated the docstring patch to match current SWIG CVS line numbers and such. Added swig.xmlout.patch, which fixes a couple problems in the XML output of SWIG: an extra "/>" was removed and newlines in attribute values were changed to the #10; entity reference so they will be preserved by parsers. Also, added options for dumping or writing to a file the XML of the parse tree *after* other language modules have been run (previously you could only do the XML output *instead of* a regular language module.) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24774 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- wxPython/SWIG/README.txt | 15 +- wxPython/SWIG/swig.python-docstring.patch | 44 +++-- wxPython/SWIG/swig.xmlout.patch | 186 ++++++++++++++++++++++ 3 files changed, 221 insertions(+), 24 deletions(-) create mode 100644 wxPython/SWIG/swig.xmlout.patch diff --git a/wxPython/SWIG/README.txt b/wxPython/SWIG/README.txt index 1c6825f83f..f4b7e2b64c 100644 --- a/wxPython/SWIG/README.txt +++ b/wxPython/SWIG/README.txt @@ -14,11 +14,24 @@ source tree soon. swig.python-docstring.patch Adds "autodoc" and "docstring" features. +swig.xmlout.patch Fixes a couple problems in the XML output + of SWIG: an extra "/>" was removed and + newlines in attribute values were changed + to the #10; entity reference so they will + be preserved by parsers. + + Also, added options for dumping or + writing to a file the XML of the parse + tree *after* other language modules have + been run (previously you could only do + the XML output *instead of* a regular + language module.) ------------------------------------------------------------------------ -These patches have already been checked in to SWIG's CVS +These patches have already been checked in to SWIG's CVS and will be +in the 1.3.20 release. ------------------------------------------------------------------------ swig.SplitLines.patch Adds a new SplitLines function to the DOH diff --git a/wxPython/SWIG/swig.python-docstring.patch b/wxPython/SWIG/swig.python-docstring.patch index 808f6897b0..8b121b1806 100644 --- a/wxPython/SWIG/swig.python-docstring.patch +++ b/wxPython/SWIG/swig.python-docstring.patch @@ -1,16 +1,15 @@ Index: Source/Modules/python.cxx =================================================================== RCS file: /cvsroot/SWIG/Source/Modules/python.cxx,v -retrieving revision 1.28 -diff -u -4 -r1.28 python.cxx ---- Source/Modules/python.cxx 18 Nov 2003 20:19:15 -0000 1.28 -+++ Source/Modules/python.cxx 27 Nov 2003 00:52:28 -0000 -@@ -67,8 +67,19 @@ - -new_repr - Use more informative version of __repr__ in proxy classes\n\ - -noexcept - No automatic exception handling\n\ - -noproxy - Don't generate proxy classes \n\n"; +retrieving revision 1.33 +diff -u -4 -r1.33 python.cxx +--- Source/Modules/python.cxx 9 Dec 2003 02:52:07 -0000 1.33 ++++ Source/Modules/python.cxx 11 Dec 2003 18:11:22 -0000 +@@ -54,8 +54,17 @@ + static int have_constructor; + static int have_repr; + static String *real_classname; -+ +/* flags for the make_autodoc function */ +enum autodoc_t { + AUTODOC_CLASS, @@ -20,12 +19,11 @@ diff -u -4 -r1.28 python.cxx + AUTODOC_FUNC +}; + -+ - class PYTHON : public Language { - public: - - /* ------------------------------------------------------------ -@@ -414,17 +425,23 @@ + static const char *usage = (char *)"\ + Python Options (available with -python)\n\ + -ldflags - Print runtime libraries to link with\n\ + -globals - Set used to access C global variable [default: 'cvar']\n\ +@@ -417,17 +426,23 @@ * functions. * ------------------------------------------------------------ */ @@ -54,7 +52,7 @@ diff -u -4 -r1.28 python.cxx } -@@ -438,8 +455,246 @@ +@@ -441,8 +456,246 @@ } @@ -301,7 +299,7 @@ diff -u -4 -r1.28 python.cxx * Check if there is a %addtofunc directive and it has text * ------------------------------------------------------------ */ -@@ -1660,9 +1915,11 @@ +@@ -1663,9 +1916,11 @@ Printf(f_shadow, modern ? "(object)" : "(_object)"); } } @@ -314,7 +312,7 @@ diff -u -4 -r1.28 python.cxx Printv(f_shadow,tab4,"__swig_setmethods__ = {}\n",NIL); if (Len(base_class)) { Printf(f_shadow,"%sfor _s in [%s]: __swig_setmethods__.update(_s.__swig_setmethods__)\n",tab4,base_class); -@@ -1795,16 +2052,22 @@ +@@ -1798,16 +2053,22 @@ Delete(pyaction); Printv(f_shadow,pycode,"\n",NIL); } else { @@ -344,7 +342,7 @@ diff -u -4 -r1.28 python.cxx } } -@@ -1819,14 +2082,20 @@ +@@ -1822,14 +2083,20 @@ virtual int staticmemberfunctionHandler(Node *n) { String *symname = Getattr(n,"sym:name"); Language::staticmemberfunctionHandler(n); @@ -369,7 +367,7 @@ diff -u -4 -r1.28 python.cxx " = staticmethod(", symname, ")\n", NIL); if (!modern) { -@@ -1911,8 +2180,10 @@ +@@ -1914,8 +2181,10 @@ } Printv(f_shadow, tab4, "def __init__(self, *args", @@ -380,7 +378,7 @@ diff -u -4 -r1.28 python.cxx if (!modern) { Printv(f_shadow, tab8, "_swig_setattr(self, ", rclassname, ", 'this', ", funcCallHelper(Swig_name_construct(symname), allow_kwargs), ")\n", NIL); -@@ -1926,9 +2197,9 @@ +@@ -1929,9 +2198,9 @@ Printv(f_shadow, tab8, "self.thisown = 1\n", NIL); Printv(f_shadow, tab8, "del newobj.thisown\n", NIL); } @@ -391,7 +389,7 @@ diff -u -4 -r1.28 python.cxx } have_constructor = 1; } else { -@@ -1944,8 +2215,10 @@ +@@ -1947,8 +2216,10 @@ } else { Printv(f_shadow_stubs, "\ndef ", symname, "(*args", @@ -402,7 +400,7 @@ diff -u -4 -r1.28 python.cxx funcCallHelper(Swig_name_construct(symname), allow_kwargs), "\n", NIL); Printv(f_shadow_stubs, tab4, "val.thisown = 1\n", NIL); if ( have_addtofunc(n) ) -@@ -1977,13 +2250,15 @@ +@@ -1980,13 +2251,15 @@ Delete(pyaction); Printv(f_shadow,pycode,"\n", NIL); } else { diff --git a/wxPython/SWIG/swig.xmlout.patch b/wxPython/SWIG/swig.xmlout.patch new file mode 100644 index 0000000000..05015d8d95 --- /dev/null +++ b/wxPython/SWIG/swig.xmlout.patch @@ -0,0 +1,186 @@ +Index: Source/Swig/swig.h +=================================================================== +RCS file: /cvsroot/SWIG/Source/Swig/swig.h,v +retrieving revision 1.76 +diff -u -4 -r1.76 swig.h +--- Source/Swig/swig.h 11 Nov 2003 20:16:35 -0000 1.76 ++++ Source/Swig/swig.h 11 Dec 2003 18:12:49 -0000 +@@ -350,8 +350,10 @@ + extern void Swig_print_tags(File *obj, Node *root); + extern void Swig_print_tree(Node *obj); + extern void Swig_print_node(Node *obj); + ++extern void Swig_print_xml(Node *obj, String* filename); ++ + /* -- Wrapper function Object */ + + typedef struct { + Hash *localh; +Index: Source/Modules/main.cxx +=================================================================== +RCS file: /cvsroot/SWIG/Source/Modules/main.cxx,v +retrieving revision 1.23 +diff -u -4 -r1.23 main.cxx +--- Source/Modules/main.cxx 8 Dec 2003 23:42:37 -0000 1.23 ++++ Source/Modules/main.cxx 11 Dec 2003 18:12:50 -0000 +@@ -85,15 +85,17 @@ + -v - Run in verbose mode\n\ + -version - Print SWIG version number\n\ + -Wall - Enable all warning messages\n\ + -w - Suppress warning number \n\ ++ -xmlout - Write an XML version of the parse tree to file after normal processing\n\ + \n"; + + // Local variables + static int freeze = 0; + static String *lang_config = 0; + static char *cpp_extension = (char *) "cxx"; + static String *outdir = 0; ++static String *xmlout = 0; + + // ----------------------------------------------------------------------------- + // check_suffix(char *name) + // +@@ -222,8 +224,9 @@ + int includecount = 0; + extern int check_suffix(char *); + int dump_tags = 0; + int dump_tree = 0; ++ int dump_xml = 0; + int browse = 0; + int dump_typedef = 0; + int dump_classes = 0; + int werror = 0; +@@ -482,8 +485,20 @@ + Swig_mark_arg(i); + } else if (strcmp(argv[i],"-dump_tree") == 0) { + dump_tree = 1; + Swig_mark_arg(i); ++ } else if (strcmp(argv[i],"-dump_xml") == 0) { ++ dump_xml = 1; ++ Swig_mark_arg(i); ++ } else if (strcmp(argv[i],"-xmlout") == 0) { ++ dump_xml = 1; ++ Swig_mark_arg(i); ++ if (argv[i+1]) { ++ xmlout = NewString(argv[i+1]); ++ Swig_mark_arg(i+1); ++ } else { ++ Swig_arg_error(); ++ } + } else if (strcmp(argv[i],"-nocontract") == 0) { + Swig_mark_arg(i); + Swig_contract_mode_set(0); + } else if (strcmp(argv[i],"-browse") == 0) { +@@ -725,8 +740,11 @@ + } + } + if (dump_tree) { + Swig_print_tree(top); ++ } ++ if (dump_xml) { ++ Swig_print_xml(top, xmlout); + } + } + if (tm_debug) Swig_typemap_debug(); + if (memory_debug) DohMemoryDebug(); +Index: Source/Modules/xml.cxx +=================================================================== +RCS file: /cvsroot/SWIG/Source/Modules/xml.cxx,v +retrieving revision 1.8 +diff -u -4 -r1.8 xml.cxx +--- Source/Modules/xml.cxx 31 Oct 2003 17:42:40 -0000 1.8 ++++ Source/Modules/xml.cxx 11 Dec 2003 18:12:50 -0000 +@@ -24,9 +24,8 @@ + //static Node *view_top = 0; + static File *out = 0; + static int xmllite = 0; + +- + class XML + : public Language + { + +@@ -109,9 +108,9 @@ + Printf(stderr,"*** Can't open '%s'\n", outfile); + SWIG_exit(EXIT_FAILURE); + } + } +- Printf( out, " \n" ); ++ Printf( out, " \n" ); + Xml_print_tree(n); + return SWIG_OK; + } + +@@ -197,18 +196,19 @@ + Replaceall( o, "&", "&" ); + Replaceall( o, "<", "<" ); + Replaceall( o, "\"", """ ); + Replaceall( o, "\\", "\\\\" ); +- Printf(out,"\n", ck, o, ++id, o ); ++ Replaceall( o, "\n", " " ); ++ Printf(out,"\n", ck, o, ++id, o ); + Delete(o); + Delete(ck); + } + else + { + o = Getattr(obj,k); + String *ck = NewString(k); + Replaceall( ck, ":", "_" ); +- Printf(out,"\n", ck, o, ++id, o ); ++ Printf(out,"\n", ck, o, ++id, o ); + Delete(ck); + } + } + ki = Next(ki); +@@ -318,11 +318,10 @@ + { + print_indent(0); + Printf( out, "<%ssitem id=\"%ld\" addr=\"%x\" >\n", markup, ++id, n.item ); + Xml_print_attributes( n.item ); +- Printf( out, "\n", markup ); + print_indent(0); +- Printf( out, " />\n" ); ++ Printf( out, "\n", markup ); + n = Next(n); + } + indent_level -= 4; + print_indent(0); +@@ -337,5 +336,36 @@ + Language * swig_xml( void ) + { + return new XML(); + } ++} ++ ++ ++/* ----------------------------------------------------------------------------- ++ * Swig_print_xml ++ * ++ * Dump an XML version of the parse tree. This is different from using the -xml ++ * language module normally as it allows the real language module to process the ++ * tree first, possibly stuffing in new attributes, so the XML that is output ends ++ * up being a post-processing version of the tree. ++ * ----------------------------------------------------------------------------- */ ++ ++void ++Swig_print_xml(DOH *obj, String* filename) ++{ ++ XML xml; ++ xmllite = 1; ++ ++ if (! filename) { ++ out = stdout; ++ } ++ else { ++ out = NewFile(filename, "w"); ++ if (!out) { ++ Printf(stderr,"*** Can't open '%s'\n", filename); ++ SWIG_exit(EXIT_FAILURE); ++ } ++ } ++ ++ Printf( out, " \n" ); ++ xml.Xml_print_tree(obj); + } -- 2.45.2