Annotation of embedaddon/libxml2/test/namespaces/reconcile/tests-to-c.xsl, revision 1.1.1.1
1.1 misho 1: <?xml version="1.0"?>
2: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
3: <xsl:output method="text"/>
4:
5: <xsl:template match="/">
6: <xsl:text><![CDATA[
7: #include <libxml/parser.h>
8: #include <libxml/tree.h>
9: #include <libxml/xpath.h>
10: #include <libxml/xpathInternals.h>
11: ]]>
12: </xsl:text>
13: <xsl:call-template name="serializer"/>
14: <xsl:apply-templates select="tests/test"/>
15: <xsl:text>
16:
17: int main(int argc, char **argv) {
</xsl:text>
18: <xsl:apply-templates select="tests/test" mode="call"/>
19: <xsl:text>
20: /* printf("finished.\n"); */
21: return (0);
22: }
23: </xsl:text>
24: </xsl:template>
25:
26: <xsl:template match="tests/test" mode="call">
27: <xsl:text> nsTest_</xsl:text>
28: <xsl:value-of select="@name"/>
29: <xsl:text>();
</xsl:text>
30: </xsl:template>
31:
32: <xsl:template name="xml-text">
33: <xsl:param name="text"/>
34: <xsl:call-template name="replace-string">
35: <!-- Substitute #10 for " -->
36: <xsl:with-param name="from" select="' '"/>
37: <xsl:with-param name="to" select="'" "'"/>
38: <xsl:with-param name="text">
39: <xsl:call-template name="replace-string">
40: <!-- Substitute " for \" -->
41: <xsl:with-param name="from" select="'"'"/>
42: <xsl:with-param name="to" select="'\"'"/>
43: <xsl:with-param name="text">
44: <xsl:call-template name="replace-string">
45: <!-- Remove tabs. -->
46: <xsl:with-param name="from" select="'	'"/>
47: <xsl:with-param name="to" select="''"/>
48: <xsl:with-param name="text" select="$text"/>
49: </xsl:call-template>
50: </xsl:with-param>
51: </xsl:call-template>
52: </xsl:with-param>
53: </xsl:call-template>
54:
55: </xsl:template>
56:
57: <xsl:template match="doc" mode="define">
58: <xsl:text> xmlDocPtr </xsl:text>
59: <xsl:value-of select="@name"/>
60: <xsl:text>;
</xsl:text>
61: <xsl:text> const char * </xsl:text>
62: <xsl:value-of select="@name"/>
63: <xsl:text>_str = "</xsl:text>
64: <xsl:call-template name="xml-text">
65: <xsl:with-param name="text" select="."/>
66: </xsl:call-template>
67: <xsl:text>";
</xsl:text>
68: </xsl:template>
69:
70: <xsl:template match="expected" mode="define">
71: <xsl:text> const char * </xsl:text>
72: <xsl:text>exp_str = "</xsl:text>
73: <xsl:call-template name="xml-text">
74: <xsl:with-param name="text" select="."/>
75: </xsl:call-template>
76: <xsl:text>";
</xsl:text>
77: </xsl:template>
78:
79: <xsl:template match="doc">
80: <xsl:text> </xsl:text>
81: <xsl:value-of select="@name"/>
82: <xsl:text> = xmlReadDoc(BAD_CAST </xsl:text>
83: <xsl:value-of select="@name"/>
84: <xsl:text>_str, NULL, NULL, 0);
</xsl:text>
85:
86: <xsl:apply-templates select="following-sibling::*[1]"/>
87:
88: <xsl:text> xmlFreeDoc(</xsl:text>
89: <xsl:value-of select="@name"/>
90: <xsl:text>);
</xsl:text>
91: </xsl:template>
92:
93: <xsl:template match="xpath">
94: </xsl:template>
95:
96: <xsl:template match="var" mode="define">
97: <xsl:text> xmlNodePtr </xsl:text>
98: <xsl:value-of select="@name"/>
99: <xsl:text>;
</xsl:text>
100: </xsl:template>
101:
102: <xsl:template match="var">
103: <xsl:if test="xpath">
104: <!-- Create XPath context. -->
105: <xsl:text> /* Selecting node "</xsl:text><xsl:value-of select="@name"/><xsl:text>". */
</xsl:text>
106: <xsl:text> xp = xmlXPathNewContext(</xsl:text>
107: <xsl:value-of select="xpath/@doc"/>
108: <xsl:text>);
</xsl:text>
109: <!-- Register namespaces. -->
110: <xsl:for-each select="xpath/reg-ns">
111: <xsl:text> xmlXPathRegisterNs(xp, BAD_CAST "</xsl:text>
112: <xsl:value-of select="@prefix"/>
113: <xsl:text>", BAD_CAST "</xsl:text>
114: <xsl:value-of select="@ns"/>
115: <xsl:text>");
</xsl:text>
116: </xsl:for-each>
117: <!-- Evaluate. -->
118: <xsl:text> </xsl:text>
119: <xsl:value-of select="@name"/>
120: <xsl:text> = nsSelectNode(xp, "</xsl:text>
121: <xsl:value-of select="xpath/@select-node"/>
122: <xsl:text>");
</xsl:text>
123: <xsl:text> xmlXPathFreeContext(xp);
</xsl:text>
124: </xsl:if>
125: <xsl:apply-templates select="following-sibling::*[1]"/>
126: </xsl:template>
127:
128: <xsl:template match="reconcile-ns">
129: <xsl:text> /* Reconcile node "</xsl:text><xsl:value-of select="@ref"/><xsl:text>". */
</xsl:text>
130: <xsl:text> xmlDOMWrapReconcileNamespaces(NULL, </xsl:text>
131: <xsl:value-of select="@node"/>
132: <xsl:text>, 0);
</xsl:text>
133: <xsl:apply-templates select="following-sibling::*[1]"/>
134: </xsl:template>
135:
136: <xsl:template match="remove">
137: <xsl:text> xmlDOMWrapRemoveNode(NULL, </xsl:text>
138: <xsl:value-of select="@node"/>
139: <xsl:text>->doc, </xsl:text>
140: <xsl:value-of select="@node"/>
141: <xsl:text>, 0);
</xsl:text>
142: <xsl:apply-templates select="following-sibling::*[1]"/>
143: </xsl:template>
144:
145: <xsl:template match="adopt">
146: <xsl:text> /* Adopt "</xsl:text><xsl:value-of select="@node"/><xsl:text>". */
</xsl:text>
147: <xsl:text> xmlDOMWrapAdoptNode(NULL, </xsl:text>
148: <xsl:value-of select="@node"/>
149: <xsl:text>->doc, </xsl:text>
150: <xsl:value-of select="@node"/>
151: <xsl:text>, </xsl:text>
152: <xsl:value-of select="@dest-doc"/>
153: <xsl:text>, </xsl:text>
154: <xsl:choose>
155: <xsl:when test="@dest-parent">
156: <xsl:value-of select="@dest-parent"/>
157: </xsl:when>
158: <xsl:otherwise>
159: <xsl:text>NULL</xsl:text>
160: </xsl:otherwise>
161: </xsl:choose>
162: <xsl:text>, 0);
</xsl:text>
163: <xsl:apply-templates select="following-sibling::*[1]"/>
164: </xsl:template>
165:
166: <xsl:template match="append-child">
167: <xsl:text> xmlAddChild(</xsl:text>
168: <xsl:value-of select="@parent"/>
169: <xsl:text>, </xsl:text>
170: <xsl:value-of select="@child"/>
171: <xsl:text>);
</xsl:text>
172: <xsl:apply-templates select="following-sibling::*[1]"/>
173: </xsl:template>
174:
175: <xsl:template match="expected">
176: <xsl:text> /* Serialize "</xsl:text><xsl:value-of select="@doc"/><xsl:text>". */
</xsl:text>
177: <xsl:text> result_str = nsSerializeNode(xmlDocGetRootElement(</xsl:text>
178: <xsl:value-of select="@doc"/>
179: <xsl:text>));
</xsl:text>
180: <xsl:text> /* Compare result. */
181: if (! xmlStrEqual(BAD_CAST result_str, BAD_CAST exp_str)) {
182: printf("FAILED\n");
183: printf("%s\n", (const char *) result_str);
184: printf("- - -\n");
185: printf("Expected:\n%s\n", exp_str);
186: printf("= = =\n");
187: }
188: xmlFree(result_str);
</xsl:text>
189: </xsl:template>
190:
191: <!--********
192: * TEST *
193: ********-->
194: <xsl:template match="test">
195: <xsl:text>void nsTest_</xsl:text>
196: <xsl:value-of select="@name"/>
197: <xsl:text>(void) {
198: xmlChar * result_str;
199: xmlXPathContextPtr xp;
200: int memory;
</xsl:text>
201: <xsl:apply-templates select="*" mode="define"/>
202: <xsl:text>
203: memory = xmlMemUsed();
204: xmlInitParser();

</xsl:text>
205: <xsl:apply-templates select="child::*[1]"/>
206: <xsl:text>
207: xmlCleanupParser();
208: memory = xmlMemUsed() - memory;
209:
210: if (memory != 0) {
211: printf("## '%s' MEMORY leak: %d\n", "</xsl:text>
212: <xsl:value-of select="@name"/>
213: <xsl:text>", memory);
214: }
215: }
216: </xsl:text>
217: </xsl:template>
218:
219: <xsl:template name="serializer">
220: <xsl:text>
221:
222: xmlChar * nsSerializeNode(xmlNodePtr node) {
223: xmlChar * ret;
224:
225: xmlOutputBufferPtr buf;
226: buf = xmlAllocOutputBuffer(NULL);
227: xmlNodeDumpOutput(buf, node->doc, node, 0, 0, NULL);
228: xmlOutputBufferFlush(buf);
229: ret = (xmlChar *) buf->buffer->content;
230: buf->buffer->content = NULL;
231: (void) xmlOutputBufferClose(buf);
232: return (ret);
233: }
234:
235: xmlNodePtr nsSelectNode(xmlXPathContextPtr xp, const char * xpath) {
236: xmlXPathObjectPtr xpres;
237: xmlNodePtr ret;
238:
239: xpres = xmlXPathEval(BAD_CAST xpath, xp);
240: ret = xpres->nodesetval->nodeTab[0];
241: xmlXPathFreeObject(xpres);
242: return (ret);
243: }
244:
245: </xsl:text>
246: </xsl:template>
247:
248: <xsl:template name="replace-string">
249: <xsl:param name="text"/>
250: <xsl:param name="from"/>
251: <xsl:param name="to"/>
252:
253: <xsl:choose>
254: <xsl:when test="contains($text, $from)">
255:
256: <xsl:variable name="before" select="substring-before($text, $from)"/>
257: <xsl:variable name="after" select="substring-after($text, $from)"/>
258: <xsl:variable name="prefix" select="concat($before, $to)"/>
259:
260: <xsl:value-of select="$before"/>
261: <xsl:value-of select="$to"/>
262: <xsl:call-template name="replace-string">
263: <xsl:with-param name="text" select="$after"/>
264: <xsl:with-param name="from" select="$from"/>
265: <xsl:with-param name="to" select="$to"/>
266: </xsl:call-template>
267: </xsl:when>
268: <xsl:otherwise>
269: <xsl:value-of select="$text"/>
270: </xsl:otherwise>
271: </xsl:choose>
272: </xsl:template>
273:
274:
275: </xsl:stylesheet>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>