Mercurial > pub > bltoolkit
view Tools/CodeGenerator/ValueMapping.xslt @ 9:1e85f66cf767 default tip
update bltoolkit
author | nickolay |
---|---|
date | Thu, 05 Apr 2018 20:53:26 +0300 |
parents | f990fcb411a9 |
children |
line wrap: on
line source
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/> <!-- parameters passed in by the TransformCodeGenerator --> <xsl:param name="generator"></xsl:param> <xsl:param name="version"></xsl:param> <xsl:param name="filename"></xsl:param> <xsl:param name="date-created"></xsl:param> <xsl:param name="created-by"></xsl:param> <xsl:param name="namespace"></xsl:param> <xsl:param name="output"></xsl:param> <!-- support variables --> <xsl:variable name="lf" xml:space="preserve"> </xsl:variable> <xsl:variable name="t1" xml:space="preserve">	</xsl:variable> <xsl:variable name="t2" xml:space="preserve">		</xsl:variable> <xsl:variable name="t3" xml:space="preserve">			</xsl:variable> <xsl:variable name="t4" xml:space="preserve">				</xsl:variable> <xsl:variable name="t5" xml:space="preserve">					</xsl:variable> <xsl:variable name="t6" xml:space="preserve">						</xsl:variable> <xsl:variable name="t7" xml:space="preserve">							</xsl:variable> <xsl:variable name="t8" xml:space="preserve">								</xsl:variable> <xsl:variable name="s1" xml:space="preserve"> </xsl:variable> <xsl:variable name="s2" xml:space="preserve">  </xsl:variable> <xsl:variable name="s3" xml:space="preserve">   </xsl:variable> <xsl:variable name="s4" xml:space="preserve">    </xsl:variable> <xsl:variable name="s5" xml:space="preserve">     </xsl:variable> <xsl:variable name="s6" xml:space="preserve">      </xsl:variable> <xsl:variable name="s7" xml:space="preserve">       </xsl:variable> <xsl:variable name="s8" xml:space="preserve">        </xsl:variable> <!-- customization --> <xsl:variable name="baseclassname" select="'MB'"/> <xsl:variable name="nullableprefix" select="'N'"/> <xsl:variable name="instancename" select="'I'"/> <xsl:variable name="getmethodspec" select="'Get(IMapDataSource s, object o, int i'"/> <xsl:variable name="setmethodspec" select="'Set(IMapDataDestination d, object o, int i'"/> <xsl:variable name="padding" select="string-length('DateTimeOffset?') + 1"/> <!-- the root of all evil --> <xsl:template match="/"> <!--<xsl:call-template name="header-comment"/>--> <xsl:apply-templates select="code"/> </xsl:template> <xsl:template name="header-comment"> <xsl:value-of select="$lf"/> <xsl:text>#region Generated File</xsl:text> <xsl:value-of select="$lf"/> <xsl:text>/*</xsl:text> <xsl:value-of select="$lf"/> <xsl:text> * GENERATED FILE -- DO NOT EDIT</xsl:text> <xsl:value-of select="$lf"/> <xsl:text> *</xsl:text> <xsl:value-of select="$lf"/> <xsl:text> * Generator: </xsl:text> <xsl:value-of select="$generator"/> <xsl:value-of select="$lf"/> <xsl:text> * Version: </xsl:text> <xsl:value-of select="$version"/> <xsl:value-of select="$lf"/> <xsl:text> *</xsl:text> <xsl:value-of select="$lf"/> <xsl:text> *</xsl:text> <xsl:value-of select="$lf"/> <xsl:text> * Generated code from "</xsl:text> <xsl:value-of select="$filename"/> <xsl:text>"</xsl:text> <xsl:value-of select="$lf"/> <xsl:text> *</xsl:text> <xsl:value-of select="$lf"/> <xsl:text> * Created: </xsl:text> <xsl:value-of select="$date-created"/> <xsl:value-of select="$lf"/> <xsl:text> * By: </xsl:text> <xsl:value-of select="$created-by"/> <xsl:value-of select="$lf"/> <xsl:text> *</xsl:text> <xsl:value-of select="$lf"/> <xsl:text> */</xsl:text> <xsl:value-of select="$lf"/> <xsl:text>#endregion</xsl:text> <xsl:value-of select="$lf"/> </xsl:template> <xsl:template match="code"> <xsl:apply-templates select="using"/> <xsl:value-of select="$lf"/> <xsl:text>namespace </xsl:text> <xsl:value-of select="$namespace"/> <xsl:value-of select="$lf"/> <xsl:text>{</xsl:text> <xsl:value-of select="$lf"/> <xsl:call-template name="class"/> <xsl:text>}</xsl:text> <xsl:value-of select="$lf"/> </xsl:template> <xsl:template match="using"> <xsl:text>using </xsl:text> <xsl:value-of select="@namespace"/> <xsl:text>;</xsl:text> <xsl:value-of select="$lf"/> </xsl:template> <!-- the class definition --> <xsl:template name="class"> <xsl:value-of select="$t1"/> <xsl:text>public static partial class ValueMapping</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t1"/> <xsl:text>{</xsl:text> <xsl:value-of select="$lf"/> <xsl:apply-templates select="group|comment|br" mode="to"> <xsl:with-param name="mode" select="'select'"/> </xsl:apply-templates> <xsl:text>}</xsl:text> <xsl:value-of select="$lf"/> </xsl:template> <!-- group --> <xsl:template match="group" mode="to"> <xsl:param name="mode"/> <xsl:if test="@nullable='true'"> <xsl:text>#if FW2</xsl:text> <xsl:value-of select="$lf"/> </xsl:if> <xsl:if test="@name"> <xsl:value-of select="$t2"/> <xsl:text>#region </xsl:text> <xsl:value-of select="@name"/> <xsl:value-of select="$lf"/> <xsl:value-of select="$lf"/> </xsl:if> <xsl:apply-templates select="type|comment|br" mode="to"> <xsl:with-param name="tonullable" select="@nullable='true'"/> <xsl:with-param name="mode" select="$mode"/> </xsl:apply-templates> <xsl:if test="@name"> <xsl:value-of select="$lf"/> <xsl:value-of select="$t2"/> <xsl:text>#endregion </xsl:text> <xsl:value-of select="$lf"/> </xsl:if> <xsl:if test="@nullable='true'"> <xsl:text>#endif</xsl:text> <xsl:value-of select="$lf"/> </xsl:if> </xsl:template> <xsl:template match="group" mode="from"> <xsl:param name="tonick"/> <xsl:param name="totype"/> <xsl:param name="tonullable"/> <xsl:param name="mode"/> <xsl:if test="@nullable='true'"> <xsl:text>#if FW2</xsl:text> <xsl:value-of select="$lf"/> </xsl:if> <xsl:apply-templates select="type|comment|br" mode="from"> <xsl:with-param name="fromnullable" select="@nullable='true'"/> <xsl:with-param name="tonick" select="$tonick"/> <xsl:with-param name="totype" select="$totype"/> <xsl:with-param name="tonullable" select="$tonullable"/> <xsl:with-param name="mode" select="$mode"/> </xsl:apply-templates> <xsl:if test="@nullable='true'"> <xsl:text>#endif</xsl:text> <xsl:value-of select="$lf"/> </xsl:if> </xsl:template> <!-- type --> <xsl:template match="type" mode="to"> <xsl:param name="tonullable"/> <xsl:param name="mode"/> <xsl:variable name="name" select="@name"/> <xsl:variable name="tonullablelocal" select="@nullable='true' or $tonullable"/> <xsl:variable name="tonick"> <xsl:if test="$tonullablelocal"> <xsl:value-of select="$nullableprefix"/> </xsl:if> <xsl:choose> <xsl:when test="@nick"> <xsl:value-of select="@nick"/> </xsl:when> <xsl:when test="/code/nick[@type=$name]"> <xsl:value-of select="/code/nick[@type=$name]/@name"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$name"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:if test="$tonullablelocal"> <xsl:text>#if FW2</xsl:text> <xsl:value-of select="$lf"/> </xsl:if> <xsl:value-of select="$lf"/> <xsl:value-of select="$t2"/> <xsl:text>private static IValueMapper Get</xsl:text> <xsl:value-of select="$tonick"/> <xsl:text>Mapper(Type t)</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t2"/> <xsl:text>{</xsl:text> <xsl:value-of select="$lf"/> <xsl:apply-templates select="/code/group|/code/comment|/code/br" mode="from"> <xsl:with-param name="tonick" select="$tonick"/> <xsl:with-param name="totype" select="@name"/> <xsl:with-param name="tonullable" select="$tonullablelocal"/> <xsl:with-param name="mode" select="$mode"/> </xsl:apply-templates> <xsl:value-of select="$lf"/> <xsl:value-of select="$t3"/> <xsl:text>return null;</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t2"/> <xsl:text>}</xsl:text> <xsl:value-of select="$lf"/> <xsl:if test="$tonullablelocal"> <xsl:text>#endif</xsl:text> <xsl:value-of select="$lf"/> </xsl:if> </xsl:template> <xsl:template match="type" mode="from"> <xsl:param name="fromnullable"/> <xsl:param name="tonick"/> <xsl:param name="totype"/> <xsl:param name="tonullable"/> <xsl:param name="mode"/> <xsl:variable name="name" select="@name"/> <xsl:variable name="fromnullablelocal" select="@nullable='true' or $fromnullable"/> <xsl:call-template name="generate"> <xsl:with-param name="totype" select="$totype"/> <xsl:with-param name="tonullable" select="$tonullable"/> <xsl:with-param name="tonick" select="$tonick"/> <xsl:with-param name="fromnick"> <xsl:if test="$fromnullablelocal"> <xsl:value-of select="$nullableprefix"/> </xsl:if> <xsl:choose> <xsl:when test="@nick"> <xsl:value-of select="@nick"/> </xsl:when> <xsl:when test="/code/nick[@type=$name]"> <xsl:value-of select="/code/nick[@type=$name]/@name"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$name"/> </xsl:otherwise> </xsl:choose> </xsl:with-param> <xsl:with-param name="fromtype" select="@name"/> <xsl:with-param name="fromnullable" select="$fromnullablelocal"/> <xsl:with-param name="mode" select="$mode"/> </xsl:call-template> </xsl:template> <xsl:template name="generate"> <xsl:param name="tonick"/> <xsl:param name="totype"/> <xsl:param name="tonullable"/> <xsl:param name="fromnick"/> <xsl:param name="fromtype"/> <xsl:param name="fromnullable"/> <xsl:param name="mode"/> <xsl:variable name="tofulltype"> <xsl:value-of select="$totype"/> <xsl:if test="$tonullable"> <xsl:text>?</xsl:text> </xsl:if> </xsl:variable> <xsl:variable name="tolongtype"> <xsl:if test="$tonullable"> <xsl:text>Nullable</xsl:text> </xsl:if> <xsl:value-of select="$totype"/> </xsl:variable> <xsl:variable name="totypepad" select="$padding - string-length($tofulltype)"/> <xsl:variable name="fromfulltype"> <xsl:value-of select="$fromtype"/> <xsl:if test="$fromnullable"> <xsl:text>?</xsl:text> </xsl:if> </xsl:variable> <xsl:variable name="fromlongtype"> <xsl:if test="$fromnullable"> <xsl:text>Nullable</xsl:text> </xsl:if> <xsl:value-of select="$fromtype"/> </xsl:variable> <xsl:variable name="fromtypepad" select="$padding - string-length($fromfulltype)"/> <xsl:choose> <xsl:when test="$mode='mapper'"> <xsl:value-of select="$t1"/> <xsl:text>internal sealed class </xsl:text> <xsl:value-of select="$fromnick"/> <xsl:text>To</xsl:text> <xsl:value-of select="$tonick"/> <xsl:text> : IValueMapper</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t1"/> <xsl:text>{</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t2"/> <xsl:text>public void Map(</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t3"/> <xsl:text>IMapDataSource source, object sourceObject, int sourceIndex,</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t3"/> <xsl:text>IMapDataDestination dest, object destObject, int destIndex)</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t2"/> <xsl:text>{</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t3"/> <xsl:text>if (source.IsNull(sourceObject, sourceIndex))</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t4"/> <xsl:text>dest.SetNull(destObject, destIndex);</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t3"/> <xsl:text>else</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t4"/> <xsl:text>dest.Set</xsl:text> <xsl:value-of select="$tolongtype"/> <xsl:text>(destObject, destIndex,</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t5"/> <xsl:if test="not($tonick=$fromnick)"> <xsl:text>Convert.To</xsl:text> <xsl:value-of select="$tolongtype"/> <xsl:text>(</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t6"/> </xsl:if> <xsl:text>source.Get</xsl:text> <xsl:value-of select="$fromlongtype"/> <xsl:text>(sourceObject, sourceIndex))</xsl:text> <xsl:if test="not($tonick=$fromnick)"> <xsl:text>)</xsl:text> </xsl:if> <xsl:text>;</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t2"/> <xsl:text>}</xsl:text> <xsl:value-of select="$lf"/> <xsl:value-of select="$t1"/> <xsl:text>}</xsl:text> <xsl:value-of select="$lf"/> </xsl:when> <xsl:when test="$mode='select'"> <xsl:value-of select="$t3"/> <xsl:text>if (t == typeof(</xsl:text> <xsl:value-of select="$fromfulltype"/> <xsl:text>))</xsl:text> <xsl:call-template name ="writeSpaces"> <xsl:with-param name="count" select="$fromtypepad"/> </xsl:call-template> <xsl:text>return new </xsl:text> <xsl:value-of select="$fromnick"/> <xsl:text>To</xsl:text> <xsl:value-of select="$tonick"/> <xsl:text>();</xsl:text> <xsl:value-of select="$lf"/> </xsl:when> </xsl:choose> </xsl:template> <!-- comments --> <xsl:template name ="comment"> <xsl:if test="text()"> <xsl:value-of select="$lf"/> <xsl:value-of select="$t3"/> <xsl:text>// </xsl:text> <xsl:value-of select="text()"/> <xsl:value-of select="$lf"/> <xsl:value-of select="$t3"/> <xsl:text>//</xsl:text> </xsl:if> <xsl:value-of select="$lf"/> </xsl:template> <xsl:template match="comment"> <xsl:call-template name="comment"/> </xsl:template> <xsl:template match="comment" mode ="to"> <xsl:if test="not(@tonullable) or @tonullable!='true'"> <xsl:call-template name="comment"/> </xsl:if> </xsl:template> <xsl:template match="comment" mode ="from"> <xsl:if test="not(@tonullable) or @tonullable!='true'"> <xsl:call-template name="comment"/> </xsl:if> </xsl:template> <xsl:template match="br"> <xsl:value-of select="$lf"/> </xsl:template> <xsl:template match="br" mode="to"> <xsl:value-of select="$lf"/> </xsl:template> <xsl:template match="br" mode="from"> <xsl:value-of select="$lf"/> </xsl:template> <!-- support function --> <xsl:template name="writeSpaces"> <xsl:param name="count"/> <xsl:choose> <xsl:when test="$count<1"/> <xsl:when test="$count=1"> <xsl:value-of select="$s1"/> </xsl:when> <xsl:when test="$count=2"> <xsl:value-of select="$s2"/> </xsl:when> <xsl:when test="$count=3"> <xsl:value-of select="$s3"/> </xsl:when> <xsl:when test="$count=4"> <xsl:value-of select="$s4"/> </xsl:when> <xsl:when test="$count=5"> <xsl:value-of select="$s5"/> </xsl:when> <xsl:when test="$count=6"> <xsl:value-of select="$s6"/> </xsl:when> <xsl:when test="$count=7"> <xsl:value-of select="$s7"/> </xsl:when> <xsl:when test="$count=8"> <xsl:value-of select="$s8"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$s8"/> <xsl:call-template name ="writeSpaces"> <xsl:with-param name="count" select="$count - 8"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>