File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / test / namespaces / reconcile / tests-to-c.xsl
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:37:59 2012 UTC (12 years, 5 months ago) by misho
Branches: libxml2, MAIN
CVS tags: v2_9_1p0, v2_9_1, v2_8_0p0, v2_8_0, v2_7_8, HEAD
libxml2

    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) {&#xA;</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>();&#xA;</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="'&#10;'"/>
   37: 	        <xsl:with-param name="to" select="'&quot;&#10;&quot;'"/>
   38: 			<xsl:with-param name="text">
   39: 				<xsl:call-template name="replace-string">
   40: 					<!-- Substitute " for \" -->
   41: 	        		<xsl:with-param name="from" select="'&quot;'"/>
   42: 	        		<xsl:with-param name="to" select="'\&quot;'"/>
   43: 					<xsl:with-param name="text">
   44: 						<xsl:call-template name="replace-string">
   45: 							<!-- Remove tabs. -->
   46: 			        		<xsl:with-param name="from" select="'&#9;'"/>
   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>;&#xA;</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>";&#xA;</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>";&#xA;</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);&#xA;</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>);&#xA;</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>;&#xA;</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>". */&#xA;</xsl:text>
  106: 			<xsl:text>	xp = xmlXPathNewContext(</xsl:text>
  107: 			<xsl:value-of select="xpath/@doc"/>
  108: 			<xsl:text>);&#xA;</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>");&#xA;</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>");&#xA;</xsl:text>
  123: 			<xsl:text>	xmlXPathFreeContext(xp);&#xA;</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>". */&#xA;</xsl:text>
  130: 		<xsl:text>	xmlDOMWrapReconcileNamespaces(NULL, </xsl:text>
  131: 		<xsl:value-of select="@node"/>
  132: 		<xsl:text>, 0);&#xA;</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);&#xA;</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>". */&#xA;</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);&#xA;</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>);&#xA;</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>". */&#xA;</xsl:text>
  177: 		<xsl:text>	result_str = nsSerializeNode(xmlDocGetRootElement(</xsl:text>
  178: 		<xsl:value-of select="@doc"/>
  179: 		<xsl:text>));&#xA;</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);&#xA;</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;&#xA;</xsl:text>
  201: 		<xsl:apply-templates select="*" mode="define"/>
  202: 		<xsl:text>
  203: 	memory = xmlMemUsed();
  204: 	xmlInitParser();&#xA;&#xA;</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>