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