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) {&#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>