mirror of https://github.com/swig/swig
(Xml_print_attributes): Do "&" replacement
before any others that might introduce "&" into the stream. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@4230 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
ae4f3e72b3
commit
25c8a3d592
|
@ -1,13 +1,13 @@
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* Xml.cxx
|
* Xml.cxx
|
||||||
*
|
*
|
||||||
* A web-base parse tree Xml using SWILL. This is an optional
|
* A web-base parse tree Xml using SWILL. This is an optional
|
||||||
* feature that's normally disabled.
|
* feature that's normally disabled.
|
||||||
*
|
*
|
||||||
* Author(s) : David Beazley (beazley@cs.uchicago.edu)
|
* Author(s) : David Beazley (beazley@cs.uchicago.edu)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2002. The University of Chicago
|
* Copyright (C) 2002. The University of Chicago
|
||||||
* See the file LICENSE for information on usage and redistribution.
|
* See the file LICENSE for information on usage and redistribution.
|
||||||
* ----------------------------------------------------------------------------- */
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
char cvsroot_xml_cxx[] = "$Header$";
|
char cvsroot_xml_cxx[] = "$Header$";
|
||||||
|
@ -20,9 +20,9 @@ XML Options (available with -xml)\n\
|
||||||
|
|
||||||
//static Node *view_top = 0;
|
//static Node *view_top = 0;
|
||||||
static File *out = 0;
|
static File *out = 0;
|
||||||
|
|
||||||
class XML
|
class XML
|
||||||
: public Language
|
: public Language
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ public:
|
||||||
Swig_mark_arg (iX);
|
Swig_mark_arg (iX);
|
||||||
String * outfile = NewString( argv[iX] );
|
String * outfile = NewString( argv[iX] );
|
||||||
out = NewFile(outfile,"w");
|
out = NewFile(outfile,"w");
|
||||||
if (!out)
|
if (!out)
|
||||||
{
|
{
|
||||||
Printf(stderr,"*** Can't open '%s'\n", outfile);
|
Printf(stderr,"*** Can't open '%s'\n", outfile);
|
||||||
SWIG_exit(EXIT_FAILURE);
|
SWIG_exit(EXIT_FAILURE);
|
||||||
|
@ -75,18 +75,18 @@ public:
|
||||||
fputs( usage, stderr );
|
fputs( usage, stderr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Top of the parse tree */
|
/* Top of the parse tree */
|
||||||
|
|
||||||
virtual int top(Node *n)
|
virtual int top(Node *n)
|
||||||
{
|
{
|
||||||
if( out == 0 )
|
if( out == 0 )
|
||||||
{
|
{
|
||||||
String *outfile = Getattr(n,"outfile");
|
String *outfile = Getattr(n,"outfile");
|
||||||
Replaceall(outfile,"_wrap.cxx", ".xml");
|
Replaceall(outfile,"_wrap.cxx", ".xml");
|
||||||
out = NewFile(outfile,"w");
|
out = NewFile(outfile,"w");
|
||||||
if (!out)
|
if (!out)
|
||||||
{
|
{
|
||||||
Printf(stderr,"*** Can't open '%s'\n", outfile);
|
Printf(stderr,"*** Can't open '%s'\n", outfile);
|
||||||
SWIG_exit(EXIT_FAILURE);
|
SWIG_exit(EXIT_FAILURE);
|
||||||
|
@ -99,22 +99,22 @@ public:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void print_indent(int l)
|
void print_indent(int l)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < indent_level; i++)
|
for (i = 0; i < indent_level; i++)
|
||||||
{
|
{
|
||||||
Printf(out, " ");
|
Printf(out, " ");
|
||||||
}
|
}
|
||||||
if (l)
|
if (l)
|
||||||
{
|
{
|
||||||
Printf(out, " ");
|
Printf(out, " ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Xml_print_tree(DOH *obj)
|
void Xml_print_tree(DOH *obj)
|
||||||
{
|
{
|
||||||
while (obj)
|
while (obj)
|
||||||
{
|
{
|
||||||
Xml_print_node(obj);
|
Xml_print_node(obj);
|
||||||
obj = nextSibling(obj);
|
obj = nextSibling(obj);
|
||||||
|
@ -127,61 +127,62 @@ public:
|
||||||
indent_level += 4;
|
indent_level += 4;
|
||||||
print_indent(0);
|
print_indent(0);
|
||||||
Printf( out, "<attributelist id=\"%ld\" addr=\"%x\" >\n", ++id, obj );
|
Printf( out, "<attributelist id=\"%ld\" addr=\"%x\" >\n", ++id, obj );
|
||||||
indent_level += 4;
|
indent_level += 4;
|
||||||
|
|
||||||
k = Firstkey(obj);
|
k = Firstkey(obj);
|
||||||
while (k)
|
while (k)
|
||||||
{
|
{
|
||||||
if ((Cmp(k,"nodeType") == 0)
|
if ((Cmp(k,"nodeType") == 0)
|
||||||
|| (Cmp(k,"firstChild") == 0)
|
|| (Cmp(k,"firstChild") == 0)
|
||||||
|| (Cmp(k,"lastChild") == 0)
|
|| (Cmp(k,"lastChild") == 0)
|
||||||
|| (Cmp(k,"parentNode") == 0)
|
|| (Cmp(k,"parentNode") == 0)
|
||||||
|| (Cmp(k,"nextSibling") == 0)
|
|| (Cmp(k,"nextSibling") == 0)
|
||||||
|| (Cmp(k,"previousSibling") == 0)
|
|| (Cmp(k,"previousSibling") == 0)
|
||||||
|| (*(Char(k)) == '$'))
|
|| (*(Char(k)) == '$'))
|
||||||
{
|
{
|
||||||
/* Do nothing */
|
/* Do nothing */
|
||||||
}
|
}
|
||||||
else if (Cmp(k,"module") == 0)
|
else if (Cmp(k,"module") == 0)
|
||||||
{
|
{
|
||||||
Xml_print_module( Getattr(obj,k) );
|
Xml_print_module( Getattr(obj,k) );
|
||||||
}
|
}
|
||||||
else if (Cmp(k,"baselist") == 0)
|
else if (Cmp(k,"baselist") == 0)
|
||||||
{
|
{
|
||||||
Xml_print_baselist( Getattr(obj,k) );
|
Xml_print_baselist( Getattr(obj,k) );
|
||||||
}
|
}
|
||||||
else if (Cmp(k,"typescope") == 0)
|
else if (Cmp(k,"typescope") == 0)
|
||||||
{
|
{
|
||||||
Xml_print_typescope( Getattr(obj,k) );
|
Xml_print_typescope( Getattr(obj,k) );
|
||||||
}
|
}
|
||||||
else if (Cmp(k,"typetab") == 0)
|
else if (Cmp(k,"typetab") == 0)
|
||||||
{
|
{
|
||||||
Xml_print_typetab( Getattr(obj,k) );
|
Xml_print_typetab( Getattr(obj,k) );
|
||||||
}
|
}
|
||||||
else if (Cmp(k,"kwargs") == 0)
|
else if (Cmp(k,"kwargs") == 0)
|
||||||
{
|
{
|
||||||
Xml_print_kwargs( Getattr(obj,k) );
|
Xml_print_kwargs( Getattr(obj,k) );
|
||||||
}
|
}
|
||||||
else if (Cmp(k,"parms") == 0 || Cmp(k, "pattern") == 0 )
|
else if (Cmp(k,"parms") == 0 || Cmp(k, "pattern") == 0 )
|
||||||
{
|
{
|
||||||
Xml_print_parmlist( Getattr(obj,k) );
|
Xml_print_parmlist( Getattr(obj,k) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DOH *o;
|
DOH *o;
|
||||||
print_indent(0);
|
print_indent(0);
|
||||||
if (DohIsString(Getattr(obj,k)))
|
if (DohIsString(Getattr(obj,k)))
|
||||||
{
|
{
|
||||||
o = Str(Getattr(obj,k));
|
o = Str(Getattr(obj,k));
|
||||||
Replaceall( k, ":", "_" );
|
Replaceall( k, ":", "_" );
|
||||||
Replaceall( o, "<", "<" );
|
/* Do first to avoid aliasing errors. */
|
||||||
Replaceall( o, "&", "&" );
|
Replaceall( o, "&", "&" );
|
||||||
|
Replaceall( o, "<", "<" );
|
||||||
Replaceall( o, "\"", """ );
|
Replaceall( o, "\"", """ );
|
||||||
Replaceall( o, "\\", "\\\\" );
|
Replaceall( o, "\\", "\\\\" );
|
||||||
Printf(out,"<attribute name=\"%s\" value=\"%s\" id=\"%ld\" addr=\"%x\" />\n", k, o, ++id, o );
|
Printf(out,"<attribute name=\"%s\" value=\"%s\" id=\"%ld\" addr=\"%x\" />\n", k, o, ++id, o );
|
||||||
Delete(o);
|
Delete(o);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
o = Getattr(obj,k);
|
o = Getattr(obj,k);
|
||||||
Replaceall( k, ":", "_" );
|
Replaceall( k, ":", "_" );
|
||||||
|
@ -196,22 +197,22 @@ public:
|
||||||
indent_level -= 4;
|
indent_level -= 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Xml_print_node(Node *obj)
|
void Xml_print_node(Node *obj)
|
||||||
{
|
{
|
||||||
Node *cobj;
|
Node *cobj;
|
||||||
|
|
||||||
print_indent(0);
|
print_indent(0);
|
||||||
Printf(out,"<%s id=\"%ld\" addr=\"%x\" >\n", nodeType(obj), ++id, obj);
|
Printf(out,"<%s id=\"%ld\" addr=\"%x\" >\n", nodeType(obj), ++id, obj);
|
||||||
Xml_print_attributes( obj );
|
Xml_print_attributes( obj );
|
||||||
cobj = firstChild(obj);
|
cobj = firstChild(obj);
|
||||||
if (cobj)
|
if (cobj)
|
||||||
{
|
{
|
||||||
indent_level += 4;
|
indent_level += 4;
|
||||||
Printf(out,"\n");
|
Printf(out,"\n");
|
||||||
Xml_print_tree(cobj);
|
Xml_print_tree(cobj);
|
||||||
indent_level -= 4;
|
indent_level -= 4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print_indent(1);
|
print_indent(1);
|
||||||
Printf(out,"\n");
|
Printf(out,"\n");
|
||||||
|
@ -221,13 +222,13 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Xml_print_parmlist(ParmList *p)
|
void Xml_print_parmlist(ParmList *p)
|
||||||
{
|
{
|
||||||
|
|
||||||
print_indent(0);
|
print_indent(0);
|
||||||
Printf( out, "<parmlist id=\"%ld\" addr=\"%x\" >\n", ++id, p );
|
Printf( out, "<parmlist id=\"%ld\" addr=\"%x\" >\n", ++id, p );
|
||||||
indent_level += 4;
|
indent_level += 4;
|
||||||
while(p)
|
while(p)
|
||||||
{
|
{
|
||||||
print_indent(0);
|
print_indent(0);
|
||||||
Printf( out, "<parm id=\"%ld\">\n", ++id );
|
Printf( out, "<parm id=\"%ld\">\n", ++id );
|
||||||
|
@ -236,62 +237,62 @@ public:
|
||||||
Printf( out, "</parm >\n" );
|
Printf( out, "</parm >\n" );
|
||||||
p = nextSibling(p);
|
p = nextSibling(p);
|
||||||
}
|
}
|
||||||
indent_level -= 4;
|
indent_level -= 4;
|
||||||
print_indent(0);
|
print_indent(0);
|
||||||
Printf( out, "</parmlist >\n" );
|
Printf( out, "</parmlist >\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Xml_print_baselist(List *p)
|
void Xml_print_baselist(List *p)
|
||||||
{
|
{
|
||||||
|
|
||||||
print_indent(0);
|
print_indent(0);
|
||||||
Printf( out, "<baselist id=\"%ld\" addr=\"%x\" >\n", ++id, p );
|
Printf( out, "<baselist id=\"%ld\" addr=\"%x\" >\n", ++id, p );
|
||||||
indent_level += 4;
|
indent_level += 4;
|
||||||
String *s;
|
String *s;
|
||||||
for (s = Firstitem(p); s; s = Nextitem(p))
|
for (s = Firstitem(p); s; s = Nextitem(p))
|
||||||
{
|
{
|
||||||
print_indent(0);
|
print_indent(0);
|
||||||
Printf( out, "<base name=\"%s\" id=\"%ld\" addr=\"%x\" />\n", s, ++id, s );
|
Printf( out, "<base name=\"%s\" id=\"%ld\" addr=\"%x\" />\n", s, ++id, s );
|
||||||
}
|
}
|
||||||
indent_level -= 4;
|
indent_level -= 4;
|
||||||
print_indent(0);
|
print_indent(0);
|
||||||
Printf( out, "</baselist >\n" );
|
Printf( out, "</baselist >\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Xml_print_module(Node *p)
|
void Xml_print_module(Node *p)
|
||||||
{
|
{
|
||||||
|
|
||||||
print_indent(0);
|
print_indent(0);
|
||||||
Printf( out, "<attribute name=\"module\" value=\"%s\" id=\"%ld\" addr=\"%x\" />\n", Getattr( p, "name"), ++id, p );
|
Printf( out, "<attribute name=\"module\" value=\"%s\" id=\"%ld\" addr=\"%x\" />\n", Getattr( p, "name"), ++id, p );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Xml_print_kwargs(Hash *p)
|
void Xml_print_kwargs(Hash *p)
|
||||||
{
|
{
|
||||||
Xml_print_hash( p, "kwargs" );
|
Xml_print_hash( p, "kwargs" );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Xml_print_typescope(Hash *p)
|
void Xml_print_typescope(Hash *p)
|
||||||
{
|
{
|
||||||
|
|
||||||
Xml_print_hash( p, "typescope" );
|
Xml_print_hash( p, "typescope" );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Xml_print_typetab(Hash *p)
|
void Xml_print_typetab(Hash *p)
|
||||||
{
|
{
|
||||||
|
|
||||||
Xml_print_hash( p, "typetab" );
|
Xml_print_hash( p, "typetab" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Xml_print_hash(Hash *p, const char * markup)
|
void Xml_print_hash(Hash *p, const char * markup)
|
||||||
{
|
{
|
||||||
|
|
||||||
print_indent(0);
|
print_indent(0);
|
||||||
Printf( out, "<%s id=\"%ld\" addr=\"%x\" >\n", markup, ++id, p );
|
Printf( out, "<%s id=\"%ld\" addr=\"%x\" >\n", markup, ++id, p );
|
||||||
Xml_print_attributes( p );
|
Xml_print_attributes( p );
|
||||||
indent_level += 4;
|
indent_level += 4;
|
||||||
Node * n = Firstitem( p );
|
Node * n = Firstitem( p );
|
||||||
while(n)
|
while(n)
|
||||||
{
|
{
|
||||||
print_indent(0);
|
print_indent(0);
|
||||||
Printf( out, "<%ssitem id=\"%ld\" addr=\"%x\" >\n", markup, ++id, n );
|
Printf( out, "<%ssitem id=\"%ld\" addr=\"%x\" >\n", markup, ++id, n );
|
||||||
|
@ -301,7 +302,7 @@ public:
|
||||||
Printf( out, " />\n" );
|
Printf( out, " />\n" );
|
||||||
n = Nextkey(p);
|
n = Nextkey(p);
|
||||||
}
|
}
|
||||||
indent_level -= 4;
|
indent_level -= 4;
|
||||||
print_indent(0);
|
print_indent(0);
|
||||||
Printf( out, "</%s >\n", markup );
|
Printf( out, "</%s >\n", markup );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue