diff options
author | James Shaw <jshaw@netsurf-browser.org> | 2007-07-16 20:03:04 +0000 |
---|---|---|
committer | James Shaw <jshaw@netsurf-browser.org> | 2007-07-16 20:03:04 +0000 |
commit | 258201cef238177df18dc096581201c89e4a5dd1 (patch) | |
tree | a5b7d8c761145701803bbfd0faff1d892ec22221 /test | |
parent | 2df119603f5a560ffb6cafe85f6377076276a34a (diff) | |
download | libdom-258201cef238177df18dc096581201c89e4a5dd1.tar.gz libdom-258201cef238177df18dc096581201c89e4a5dd1.tar.bz2 |
Partially implement method invocation. Should be sufficient to generate
documentcreateelement.c
svn path=/trunk/dom/; revision=3421
Diffstat (limited to 'test')
-rw-r--r-- | test/test-to-c.xsl | 65 |
1 files changed, 64 insertions, 1 deletions
diff --git a/test/test-to-c.xsl b/test/test-to-c.xsl index f8d74b0..23cac3e 100644 --- a/test/test-to-c.xsl +++ b/test/test-to-c.xsl @@ -165,7 +165,46 @@ DOM templates --> <xsl:template name="produce-method"> -<!-- TODO: implement me --> + <xsl:variable name="methodName" select="local-name(.)"/> + <!-- if interface is specified --> + <xsl:choose> + <xsl:when test="@interface"> + <xsl:variable name="interface" select="@interface"/> + <xsl:call-template name="produce-specific-method"> + <xsl:with-param name="method" select="$domspec/library/interface[@name = $interface]/method[@name = $methodName]"/> + <!--<xsl:with-param name="vardefs" select="$vardefs"/>--> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="methods" select="$domspec/library/interface/method[@name = $methodName]"/> + <xsl:call-template name="produce-specific-method"> + <xsl:with-param name="method" select="$methods[1]"/> + <!--<xsl:with-param name="vardefs" select="$vardefs"/>--> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<xsl:template name="produce-specific-method"> + <xsl:param name="method"/> + <xsl:variable name="current" select="."/> + <xsl:variable name="obj" select="@obj"/> + <!--<xsl:variable name="var" select="@var"/>--> + + <xsl:text> </xsl:text> + <xsl:call-template name="convert_method_name"> + <xsl:with-param name="method_target"><xsl:value-of select="//*[local-name() = 'var' and @name = $obj]/@type"/></xsl:with-param> + <xsl:with-param name="method_name"><xsl:value-of select="$method/@name"/></xsl:with-param> + </xsl:call-template> + <xsl:text>(</xsl:text><xsl:value-of select="@obj"/> + <xsl:for-each select="$method/parameters/param"> + <xsl:variable name="paramDef" select="."/> + <xsl:text>, </xsl:text><xsl:value-of select="$current/@*[name() = $paramDef/@name]"/> + </xsl:for-each> + <xsl:if test="@var"> + <xsl:text>, &</xsl:text><xsl:value-of select="@var"/> + </xsl:if> + <xsl:text>);</xsl:text> </xsl:template> <xsl:template name="produce-attribute"> @@ -219,6 +258,7 @@ DOM templates </xsl:if> </xsl:template> + <!-- ================================ Assert templates @@ -329,6 +369,29 @@ Assert templates </xsl:template> <!-- +Method name is in the form dom_<type>_<methodName> +For example, dom_document_create_element +--> +<xsl:template name="convert_method_name"> + <xsl:param name="method_target"/> + <xsl:param name="method_name"/> + <xsl:message><xsl:value-of select="$method_name"/></xsl:message> + <xsl:call-template name="convert_var_type"> + <xsl:with-param name="var_type"><xsl:value-of select="$method_target"/></xsl:with-param> + </xsl:call-template> + <xsl:text>_</xsl:text> + <xsl:choose> + <xsl:when test="$method_name = 'createElement'"> + <xsl:text>create_element</xsl:text> + </xsl:when> + <xsl:otherwise> + <!-- assume no conversion is needed --> + <xsl:text><xsl:value-of select="$method_name"/></xsl:text> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<!-- stolen from test-to-java.xsl Prepends every line with asterisks, suitable for use in a block comment --> |