Annotation of embedaddon/libxml2/test/namespaces/reconcile/tests-to-c.xsl, revision 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>