wxWidgets/wxPython/SWIG/swig.xmlout.patch
2004-01-22 22:55:38 +00:00

166 lines
5.3 KiB
Diff

Index: Source/Swig/swig.h
===================================================================
RCS file: /cvsroot/SWIG/Source/Swig/swig.h,v
retrieving revision 1.80
diff -u -4 -r1.80 swig.h
--- Source/Swig/swig.h 22 Jan 2004 22:42:18 -0000 1.80
+++ Source/Swig/swig.h 22 Jan 2004 22:51:44 -0000
@@ -364,8 +364,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.33
diff -u -4 -r1.33 main.cxx
--- Source/Modules/main.cxx 22 Jan 2004 22:42:15 -0000 1.33
+++ Source/Modules/main.cxx 22 Jan 2004 22:51:45 -0000
@@ -91,15 +91,17 @@
-w+321,401,-402 \n\
\n\
where code 321(+) is added, and 401(no sign) and 402(-) \n\
are suppressed. See documentation for code meanings.\n\
+ -xmlout <file> - 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)
//
@@ -215,8 +217,9 @@
char *includefiles[256];
int includecount = 0;
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;
@@ -483,8 +486,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) {
@@ -734,8 +749,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.10
diff -u -4 -r1.10 xml.cxx
--- Source/Modules/xml.cxx 22 Jan 2004 22:42:18 -0000 1.10
+++ Source/Modules/xml.cxx 22 Jan 2004 22:51:45 -0000
@@ -197,18 +197,19 @@
Replaceall( o, "&", "&amp;" );
Replaceall( o, "<", "&lt;" );
Replaceall( o, "\"", "&quot;" );
Replaceall( o, "\\", "\\\\" );
- Printf(out,"<attribute name=\"%s\" value=\"%s\" id=\"%ld\" addr=\"%x\" />\n", ck, o, ++id, o );
+ Replaceall( o, "\n", "&#10;" );
+ Printf(out,"<attribute name=\"%s\" value=\"%s\" id=\"%ld\" addr=\"%x\" />\n", ck, o, ++id, o );
Delete(o);
Delete(ck);
}
else
{
o = Getattr(obj,k);
String *ck = NewString(k);
Replaceall( ck, ":", "_" );
- Printf(out,"<attribute name=\"%s\" value=\"%x\" id=\"%ld\" addr=\"%x\" />\n", ck, o, ++id, o );
+ Printf(out,"<attribute name=\"%s\" value=\"%x\" id=\"%ld\" addr=\"%x\" />\n", ck, o, ++id, o );
Delete(ck);
}
}
ki = Next(ki);
@@ -318,11 +319,10 @@
{
print_indent(0);
Printf( out, "<%ssitem id=\"%ld\" addr=\"%x\" >\n", markup, ++id, n.item );
Xml_print_attributes( n.item );
- Printf( out, "</%ssitem >\n", markup );
print_indent(0);
- Printf( out, " />\n" );
+ Printf( out, "</%ssitem >\n", markup );
n = Next(n);
}
indent_level -= 4;
print_indent(0);
@@ -336,5 +336,36 @@
return new XML();
}
extern "C" Language * swig_xml( void ) {
return new_swig_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, "<?xml version=\"1.0\" ?> \n" );
+ xml.Xml_print_tree(obj);
}