Blame test/namespaces/reconcile/tests-to-c.xsl

Packit Service a31ea6
Packit Service a31ea6
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Packit Service a31ea6
	<xsl:output method="text"/>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template match="/">
Packit Service a31ea6
		<xsl:text>
Packit Service a31ea6
#include <libxml/parser.h>
Packit Service a31ea6
#include <libxml/tree.h>
Packit Service a31ea6
#include <libxml/xpath.h>
Packit Service a31ea6
#include <libxml/xpathInternals.h>
Packit Service a31ea6
]]>
Packit Service a31ea6
</xsl:text>
Packit Service a31ea6
		<xsl:call-template name="serializer"/>		
Packit Service a31ea6
		<xsl:apply-templates select="tests/test"/>
Packit Service a31ea6
		<xsl:text>
Packit Service a31ea6
Packit Service a31ea6
int main(int argc, char **argv) {
</xsl:text>
Packit Service a31ea6
		<xsl:apply-templates select="tests/test" mode="call"/>
Packit Service a31ea6
		<xsl:text>
Packit Service a31ea6
	/* printf("finished.\n"); */
Packit Service a31ea6
	return (0);
Packit Service a31ea6
}
Packit Service a31ea6
</xsl:text>
Packit Service a31ea6
	</xsl:template>	
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template match="tests/test" mode="call">
Packit Service a31ea6
		<xsl:text>	nsTest_</xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@name"/>
Packit Service a31ea6
		<xsl:text>();
</xsl:text>
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template name="xml-text">
Packit Service a31ea6
		<xsl:param name="text"/>
Packit Service a31ea6
		<xsl:call-template name="replace-string">
Packit Service a31ea6
				        			
Packit Service a31ea6
	        <xsl:with-param name="from" select="'
'"/>
Packit Service a31ea6
	        <xsl:with-param name="to" select="'"
"'"/>
Packit Service a31ea6
			<xsl:with-param name="text">
Packit Service a31ea6
				<xsl:call-template name="replace-string">
Packit Service a31ea6
					
Packit Service a31ea6
	        		<xsl:with-param name="from" select="'"'"/>
Packit Service a31ea6
	        		<xsl:with-param name="to" select="'\"'"/>
Packit Service a31ea6
					<xsl:with-param name="text">
Packit Service a31ea6
						<xsl:call-template name="replace-string">
Packit Service a31ea6
							
Packit Service a31ea6
			        		<xsl:with-param name="from" select="'	'"/>
Packit Service a31ea6
			        		<xsl:with-param name="to" select="''"/>
Packit Service a31ea6
							<xsl:with-param name="text" select="$text"/>
Packit Service a31ea6
	    				</xsl:call-template>
Packit Service a31ea6
					</xsl:with-param>
Packit Service a31ea6
    			</xsl:call-template>
Packit Service a31ea6
			</xsl:with-param>
Packit Service a31ea6
    	</xsl:call-template>
Packit Service a31ea6
		
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template match="doc" mode="define">
Packit Service a31ea6
		<xsl:text>	xmlDocPtr </xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@name"/>
Packit Service a31ea6
		<xsl:text>;
</xsl:text>
Packit Service a31ea6
		<xsl:text>	const char * </xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@name"/>
Packit Service a31ea6
		<xsl:text>_str = "</xsl:text>
Packit Service a31ea6
		<xsl:call-template name="xml-text">
Packit Service a31ea6
	        <xsl:with-param name="text" select="."/>
Packit Service a31ea6
    	</xsl:call-template>		
Packit Service a31ea6
		<xsl:text>";
</xsl:text>
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template match="expected" mode="define">
Packit Service a31ea6
		<xsl:text>	const char * </xsl:text>	
Packit Service a31ea6
		<xsl:text>exp_str = "</xsl:text>
Packit Service a31ea6
		<xsl:call-template name="xml-text">
Packit Service a31ea6
	        <xsl:with-param name="text" select="."/>
Packit Service a31ea6
    	</xsl:call-template>		
Packit Service a31ea6
		<xsl:text>";
</xsl:text>
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template match="doc">
Packit Service a31ea6
		<xsl:text>	</xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@name"/>
Packit Service a31ea6
		<xsl:text> = xmlReadDoc(BAD_CAST </xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@name"/>
Packit Service a31ea6
		<xsl:text>_str, NULL, NULL, 0);
</xsl:text>
Packit Service a31ea6
			
Packit Service a31ea6
		<xsl:apply-templates select="following-sibling::*[1]"/>
Packit Service a31ea6
Packit Service a31ea6
		<xsl:text>	xmlFreeDoc(</xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@name"/>
Packit Service a31ea6
		<xsl:text>);
</xsl:text>
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template match="xpath">
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template match="var" mode="define">
Packit Service a31ea6
		<xsl:text>	xmlNodePtr </xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@name"/>
Packit Service a31ea6
		<xsl:text>;
</xsl:text>
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template match="var">
Packit Service a31ea6
		<xsl:if test="xpath">
Packit Service a31ea6
			
Packit Service a31ea6
			<xsl:text>	/* Selecting node "</xsl:text><xsl:value-of select="@name"/><xsl:text>". */
</xsl:text>
Packit Service a31ea6
			<xsl:text>	xp = xmlXPathNewContext(</xsl:text>
Packit Service a31ea6
			<xsl:value-of select="xpath/@doc"/>
Packit Service a31ea6
			<xsl:text>);
</xsl:text>
Packit Service a31ea6
			
Packit Service a31ea6
			<xsl:for-each select="xpath/reg-ns">
Packit Service a31ea6
				<xsl:text>	xmlXPathRegisterNs(xp, BAD_CAST "</xsl:text>
Packit Service a31ea6
				<xsl:value-of select="@prefix"/>
Packit Service a31ea6
				<xsl:text>", BAD_CAST "</xsl:text>
Packit Service a31ea6
				<xsl:value-of select="@ns"/>
Packit Service a31ea6
				<xsl:text>");
</xsl:text>
Packit Service a31ea6
			</xsl:for-each>
Packit Service a31ea6
			
Packit Service a31ea6
			<xsl:text>	</xsl:text>
Packit Service a31ea6
			<xsl:value-of select="@name"/>
Packit Service a31ea6
			<xsl:text> = nsSelectNode(xp, "</xsl:text>
Packit Service a31ea6
			<xsl:value-of select="xpath/@select-node"/>
Packit Service a31ea6
			<xsl:text>");
</xsl:text>
Packit Service a31ea6
			<xsl:text>	xmlXPathFreeContext(xp);
</xsl:text>
Packit Service a31ea6
		</xsl:if>
Packit Service a31ea6
		<xsl:apply-templates select="following-sibling::*[1]"/>
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template match="reconcile-ns">
Packit Service a31ea6
		<xsl:text>	/* Reconcile node "</xsl:text><xsl:value-of select="@ref"/><xsl:text>". */
</xsl:text>
Packit Service a31ea6
		<xsl:text>	xmlDOMWrapReconcileNamespaces(NULL, </xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@node"/>
Packit Service a31ea6
		<xsl:text>, 0);
</xsl:text>
Packit Service a31ea6
		<xsl:apply-templates select="following-sibling::*[1]"/>
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template match="remove">
Packit Service a31ea6
		<xsl:text>	xmlDOMWrapRemoveNode(NULL, </xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@node"/>
Packit Service a31ea6
		<xsl:text>->doc, </xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@node"/>
Packit Service a31ea6
		<xsl:text>, 0);
</xsl:text>
Packit Service a31ea6
		<xsl:apply-templates select="following-sibling::*[1]"/>
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template match="adopt">
Packit Service a31ea6
		<xsl:text>	/* Adopt "</xsl:text><xsl:value-of select="@node"/><xsl:text>". */
</xsl:text>
Packit Service a31ea6
		<xsl:text>	xmlDOMWrapAdoptNode(NULL, </xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@node"/>
Packit Service a31ea6
		<xsl:text>->doc, </xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@node"/>
Packit Service a31ea6
		<xsl:text>, </xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@dest-doc"/>
Packit Service a31ea6
		<xsl:text>, </xsl:text>
Packit Service a31ea6
		<xsl:choose>
Packit Service a31ea6
			<xsl:when test="@dest-parent">
Packit Service a31ea6
				<xsl:value-of select="@dest-parent"/>
Packit Service a31ea6
			</xsl:when>
Packit Service a31ea6
			<xsl:otherwise>
Packit Service a31ea6
				<xsl:text>NULL</xsl:text>
Packit Service a31ea6
			</xsl:otherwise>
Packit Service a31ea6
		</xsl:choose>		
Packit Service a31ea6
		<xsl:text>, 0);
</xsl:text>
Packit Service a31ea6
		<xsl:apply-templates select="following-sibling::*[1]"/>
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template match="append-child">
Packit Service a31ea6
		<xsl:text>	xmlAddChild(</xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@parent"/>
Packit Service a31ea6
		<xsl:text>, </xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@child"/>
Packit Service a31ea6
		<xsl:text>);
</xsl:text>
Packit Service a31ea6
		<xsl:apply-templates select="following-sibling::*[1]"/>
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template match="expected">		
Packit Service a31ea6
		<xsl:text>	/* Serialize "</xsl:text><xsl:value-of select="@doc"/><xsl:text>". */
</xsl:text>
Packit Service a31ea6
		<xsl:text>	result_str = nsSerializeNode(xmlDocGetRootElement(</xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@doc"/>
Packit Service a31ea6
		<xsl:text>));
</xsl:text>
Packit Service a31ea6
		<xsl:text>	/* Compare result. */
Packit Service a31ea6
	if (! xmlStrEqual(BAD_CAST result_str, BAD_CAST exp_str)) {
Packit Service a31ea6
		printf("FAILED\n");
Packit Service a31ea6
		printf("%s\n", (const char *) result_str);
Packit Service a31ea6
		printf("- - -\n");
Packit Service a31ea6
		printf("Expected:\n%s\n", exp_str);
Packit Service a31ea6
		printf("= = =\n");
Packit Service a31ea6
	}
Packit Service a31ea6
	xmlFree(result_str);
</xsl:text>
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	
Packit Service a31ea6
	    * TEST *
Packit Service a31ea6
	    ********-->
Packit Service a31ea6
	<xsl:template match="test">		
Packit Service a31ea6
		<xsl:text>void nsTest_</xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@name"/>
Packit Service a31ea6
		<xsl:text>(void) {
Packit Service a31ea6
	xmlChar * result_str;
Packit Service a31ea6
	xmlXPathContextPtr xp;
Packit Service a31ea6
	int memory;
</xsl:text>
Packit Service a31ea6
		<xsl:apply-templates select="*" mode="define"/>
Packit Service a31ea6
		<xsl:text>
Packit Service a31ea6
	memory = xmlMemUsed();
Packit Service a31ea6
	xmlInitParser();

</xsl:text>
Packit Service a31ea6
		<xsl:apply-templates select="child::*[1]"/>
Packit Service a31ea6
		<xsl:text>
Packit Service a31ea6
	xmlCleanupParser();
Packit Service a31ea6
	memory = xmlMemUsed() - memory;
Packit Service a31ea6
Packit Service a31ea6
	if (memory != 0) {		
Packit Service a31ea6
		printf("## '%s' MEMORY leak: %d\n", "</xsl:text>
Packit Service a31ea6
		<xsl:value-of select="@name"/>
Packit Service a31ea6
		<xsl:text>", memory);
Packit Service a31ea6
    }		
Packit Service a31ea6
}
Packit Service a31ea6
</xsl:text>	
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template name="serializer">
Packit Service a31ea6
		<xsl:text>
Packit Service a31ea6
		
Packit Service a31ea6
xmlChar * nsSerializeNode(xmlNodePtr node) {
Packit Service a31ea6
	xmlChar * ret;
Packit Service a31ea6
Packit Service a31ea6
	xmlOutputBufferPtr buf;
Packit Service a31ea6
	buf = xmlAllocOutputBuffer(NULL);
Packit Service a31ea6
	xmlNodeDumpOutput(buf, node->doc, node, 0, 0, NULL);
Packit Service a31ea6
	xmlOutputBufferFlush(buf);
Packit Service a31ea6
	ret = (xmlChar *) buf->buffer->content;
Packit Service a31ea6
	buf->buffer->content = NULL;
Packit Service a31ea6
	(void) xmlOutputBufferClose(buf);
Packit Service a31ea6
	return (ret);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
xmlNodePtr nsSelectNode(xmlXPathContextPtr xp, const char * xpath) {
Packit Service a31ea6
	xmlXPathObjectPtr xpres;
Packit Service a31ea6
	xmlNodePtr ret;	
Packit Service a31ea6
		
Packit Service a31ea6
	xpres = xmlXPathEval(BAD_CAST xpath, xp);
Packit Service a31ea6
	ret = xpres->nodesetval->nodeTab[0];
Packit Service a31ea6
	xmlXPathFreeObject(xpres);
Packit Service a31ea6
	return (ret);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
</xsl:text>
Packit Service a31ea6
	</xsl:template>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:template name="replace-string">
Packit Service a31ea6
    <xsl:param name="text"/>
Packit Service a31ea6
    <xsl:param name="from"/>
Packit Service a31ea6
    <xsl:param name="to"/>
Packit Service a31ea6
Packit Service a31ea6
    <xsl:choose>
Packit Service a31ea6
      <xsl:when test="contains($text, $from)">
Packit Service a31ea6
Packit Service a31ea6
	<xsl:variable name="before" select="substring-before($text, $from)"/>
Packit Service a31ea6
	<xsl:variable name="after" select="substring-after($text, $from)"/>
Packit Service a31ea6
	<xsl:variable name="prefix" select="concat($before, $to)"/>
Packit Service a31ea6
Packit Service a31ea6
	<xsl:value-of select="$before"/>
Packit Service a31ea6
	<xsl:value-of select="$to"/>
Packit Service a31ea6
        <xsl:call-template name="replace-string">
Packit Service a31ea6
	  <xsl:with-param name="text" select="$after"/>
Packit Service a31ea6
	  <xsl:with-param name="from" select="$from"/>
Packit Service a31ea6
	  <xsl:with-param name="to" select="$to"/>
Packit Service a31ea6
	</xsl:call-template>
Packit Service a31ea6
      </xsl:when> 
Packit Service a31ea6
      <xsl:otherwise>
Packit Service a31ea6
        <xsl:value-of select="$text"/>  
Packit Service a31ea6
      </xsl:otherwise>
Packit Service a31ea6
    </xsl:choose>            
Packit Service a31ea6
 </xsl:template>
Packit Service a31ea6
		
Packit Service a31ea6
	
Packit Service a31ea6
</xsl:stylesheet>