Laurent@1349: <?xml version="1.0"?> Edouard@1951: <xsl:stylesheet xmlns:exsl="http://exslt.org/common" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:ppx="http://www.plcopen.org/xml/tc6_0201" xmlns:ns="beremiz" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" extension-element-prefixes="ns" version="1.0" exclude-result-prefixes="ns"> Laurent@1349: <xsl:output method="xml"/> Laurent@1349: <xsl:param name="tree"/> edouard@1936: <xsl:template match="text()"/> Edouard@1951: <xsl:variable name="project" select="ns:GetProject()"/> Edouard@1951: <xsl:variable name="stdlib" select="ns:GetStdLibs()"/> Edouard@1951: <xsl:variable name="extensions" select="ns:GetExtensions()"/> Edouard@1951: <xsl:variable name="all_types" select="($project | $stdlib | $extensions)/ppx:types"/> Laurent@1361: <xsl:template match="ppx:configuration"> edouard@1936: <xsl:apply-templates select="ppx:globalVars"/> Laurent@1361: </xsl:template> Laurent@1361: <xsl:template match="ppx:resource"> edouard@1936: <xsl:apply-templates select="ppx:globalVars"/> Laurent@1361: </xsl:template> Laurent@1361: <xsl:template match="ppx:pou"> edouard@1936: <xsl:apply-templates select="ppx:interface/*"/> Laurent@1361: </xsl:template> Laurent@1349: <xsl:template match="ppx:returnType"> Laurent@1349: <xsl:value-of select="ns:AddTree()"/> edouard@1936: <xsl:apply-templates mode="var_type" select="."/> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template name="variables_infos"> Laurent@1349: <xsl:param name="var_class"/> Laurent@1349: <xsl:variable name="var_option"> Laurent@1349: <xsl:choose> Laurent@1349: <xsl:when test="@constant='true' or @constant='1'"> Laurent@1349: <xsl:text>Constant</xsl:text> Laurent@1349: </xsl:when> Laurent@1349: <xsl:when test="@retain='true' or @retain='1'"> Laurent@1349: <xsl:text>Retain</xsl:text> Laurent@1349: </xsl:when> Laurent@1349: <xsl:when test="@nonretain='true' or @nonretain='1'"> Laurent@1349: <xsl:text>Non-Retain</xsl:text> Laurent@1349: </xsl:when> Laurent@1349: </xsl:choose> Laurent@1349: </xsl:variable> Laurent@1349: <xsl:for-each select="ppx:variable"> Laurent@1349: <xsl:variable name="initial_value"> edouard@1936: <xsl:apply-templates select="ppx:initialValue"/> Laurent@1349: </xsl:variable> Laurent@1349: <xsl:variable name="edit"> Laurent@1349: <xsl:choose> Laurent@1349: <xsl:when test="$var_class='Global' or $var_class='External'"> Laurent@1349: <xsl:text>true</xsl:text> Laurent@1349: </xsl:when> Laurent@1349: <xsl:otherwise> edouard@1936: <xsl:apply-templates mode="var_edit" select="ppx:type"/> Laurent@1349: </xsl:otherwise> Laurent@1349: </xsl:choose> Laurent@1349: </xsl:variable> Laurent@1349: <xsl:value-of select="ns:AddTree()"/> edouard@1936: <xsl:apply-templates mode="var_type" select="ppx:type"/> Laurent@1349: <xsl:value-of select="ns:AddVariable(@name, $var_class, $var_option, @address, $initial_value, $edit, ppx:documentation/xhtml:p/text())"/> Laurent@1349: </xsl:for-each> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template match="ppx:localVars"> Laurent@1349: <xsl:call-template name="variables_infos"> Laurent@1349: <xsl:with-param name="var_class"> Laurent@1349: <xsl:text>Local</xsl:text> Laurent@1349: </xsl:with-param> Laurent@1349: </xsl:call-template> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template match="ppx:globalVars"> Laurent@1349: <xsl:call-template name="variables_infos"> Laurent@1349: <xsl:with-param name="var_class"> Laurent@1349: <xsl:text>Global</xsl:text> Laurent@1349: </xsl:with-param> Laurent@1349: </xsl:call-template> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template match="ppx:externalVars"> Laurent@1349: <xsl:call-template name="variables_infos"> Laurent@1349: <xsl:with-param name="var_class"> Laurent@1349: <xsl:text>External</xsl:text> Laurent@1349: </xsl:with-param> Laurent@1349: </xsl:call-template> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template match="ppx:tempVars"> Laurent@1349: <xsl:call-template name="variables_infos"> Laurent@1349: <xsl:with-param name="var_class"> Laurent@1349: <xsl:text>Temp</xsl:text> Laurent@1349: </xsl:with-param> Laurent@1349: </xsl:call-template> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template match="ppx:inputVars"> Laurent@1349: <xsl:call-template name="variables_infos"> Laurent@1349: <xsl:with-param name="var_class"> Laurent@1349: <xsl:text>Input</xsl:text> Laurent@1349: </xsl:with-param> Laurent@1349: </xsl:call-template> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template match="ppx:outputVars"> Laurent@1349: <xsl:call-template name="variables_infos"> Laurent@1349: <xsl:with-param name="var_class"> Laurent@1349: <xsl:text>Output</xsl:text> Laurent@1349: </xsl:with-param> Laurent@1349: </xsl:call-template> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template match="ppx:inOutVars"> Laurent@1349: <xsl:call-template name="variables_infos"> Laurent@1349: <xsl:with-param name="var_class"> Laurent@1349: <xsl:text>InOut</xsl:text> Laurent@1349: </xsl:with-param> Laurent@1349: </xsl:call-template> Laurent@1349: </xsl:template> Laurent@1361: <xsl:template mode="var_type" match="ppx:pou"> edouard@1936: <xsl:apply-templates mode="var_type" select="ppx:interface/*[self::ppx:inputVars or self::ppx:inOutVars or self::ppx:outputVars]/ppx:variable"/> Laurent@1361: </xsl:template> Laurent@1361: <xsl:template mode="var_type" match="ppx:variable"> Laurent@1349: <xsl:variable name="name"> Laurent@1349: <xsl:value-of select="@name"/> Laurent@1349: </xsl:variable> Laurent@1368: <xsl:value-of select="ns:AddTree()"/> edouard@1936: <xsl:apply-templates mode="var_type" select="ppx:type"/> Laurent@1349: <xsl:value-of select="ns:AddVarToTree($name)"/> Laurent@1349: </xsl:template> Laurent@1361: <xsl:template mode="var_type" match="ppx:dataType"> edouard@1936: <xsl:apply-templates mode="var_type" select="ppx:baseType"/> Laurent@1361: </xsl:template> Laurent@1361: <xsl:template mode="var_type" match="*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:struct"> edouard@1936: <xsl:apply-templates mode="var_type" select="ppx:variable"/> Laurent@1361: </xsl:template> Laurent@1361: <xsl:template mode="var_type" match="*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:derived"> Laurent@1349: <xsl:variable name="type_name"> Laurent@1349: <xsl:value-of select="@name"/> Laurent@1349: </xsl:variable> Laurent@1349: <xsl:choose> Laurent@1349: <xsl:when test="$tree='True'"> Edouard@1951: <xsl:apply-templates mode="var_type" select="$all_types/ppx:pous/ppx:pou[@name=$type_name] | $all_types/ppx:dataTypes/ppx:dataType[@name=$type_name]"/> Laurent@1349: </xsl:when> Laurent@1349: </xsl:choose> Laurent@1349: <xsl:value-of select="ns:SetType($type_name)"/> Laurent@1349: </xsl:template> Laurent@1361: <xsl:template mode="var_type" match="*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:array"> edouard@1936: <xsl:apply-templates mode="var_type" select="ppx:baseType"/> Laurent@1349: <xsl:for-each select="ppx:dimension"> Laurent@1368: <xsl:variable name="lower"> Laurent@1368: <xsl:value-of select="@lower"/> Laurent@1368: </xsl:variable> Laurent@1368: <xsl:variable name="upper"> Laurent@1368: <xsl:value-of select="@upper"/> Laurent@1368: </xsl:variable> Laurent@1368: <xsl:value-of select="ns:AddDimension($lower, $upper)"/> Laurent@1349: </xsl:for-each> Laurent@1349: </xsl:template> Laurent@1361: <xsl:template mode="var_type" match="*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:string"> Laurent@1349: <xsl:variable name="name"> Laurent@1349: <xsl:text>STRING</xsl:text> Laurent@1349: </xsl:variable> Laurent@1349: <xsl:value-of select="ns:SetType($name)"/> Laurent@1349: </xsl:template> Laurent@1361: <xsl:template mode="var_type" match="*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:wstring"> Laurent@1349: <xsl:variable name="name"> Laurent@1349: <xsl:text>WSTRING</xsl:text> Laurent@1349: </xsl:variable> Laurent@1349: <xsl:value-of select="ns:SetType($name)"/> Laurent@1349: </xsl:template> Laurent@1361: <xsl:template mode="var_type" match="*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/*"> Laurent@1349: <xsl:variable name="name"> Laurent@1349: <xsl:value-of select="local-name()"/> Laurent@1349: </xsl:variable> Laurent@1349: <xsl:value-of select="ns:SetType($name)"/> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template mode="var_edit" match="*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:derived"> Laurent@1368: <xsl:variable name="type_name"> Laurent@1368: <xsl:value-of select="@name"/> Laurent@1368: </xsl:variable> Edouard@1951: <xsl:variable name="pou_infos" select="$all_types/ppx:pous/ppx:pou[@name=$type_name]"/> Laurent@1349: <xsl:choose> Laurent@1349: <xsl:when test="$pou_infos != ''"> Laurent@1349: <xsl:text>false</xsl:text> Laurent@1349: </xsl:when> Laurent@1349: <xsl:otherwise> Laurent@1349: <xsl:text>true</xsl:text> Laurent@1349: </xsl:otherwise> Laurent@1349: </xsl:choose> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template mode="var_edit" match="*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/*"> Laurent@1349: <xsl:text>true</xsl:text> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template match="ppx:value"> Laurent@1349: <xsl:choose> Laurent@1349: <xsl:when test="@repetitionValue"> Laurent@1349: <xsl:value-of select="@repetitionValue"/> Laurent@1349: <xsl:text>(</xsl:text> edouard@1936: <xsl:apply-templates/> Laurent@1349: <xsl:text>)</xsl:text> Laurent@1349: </xsl:when> Laurent@1349: <xsl:when test="@member"> Laurent@1349: <xsl:value-of select="@member"/> Laurent@1349: <xsl:text> := </xsl:text> edouard@1936: <xsl:apply-templates/> Laurent@1349: </xsl:when> Laurent@1349: <xsl:otherwise> edouard@1936: <xsl:apply-templates/> Laurent@1349: </xsl:otherwise> Laurent@1349: </xsl:choose> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template match="ppx:simpleValue"> Laurent@1349: <xsl:value-of select="@value"/> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template name="complex_type_value"> Laurent@1349: <xsl:param name="start_bracket"/> Laurent@1349: <xsl:param name="end_bracket"/> Laurent@1359: <xsl:value-of select="$start_bracket"/> Laurent@1349: <xsl:for-each select="ppx:value"> edouard@1936: <xsl:apply-templates select="."/> Laurent@1349: <xsl:choose> Laurent@1349: <xsl:when test="position()!=last()"> Laurent@1349: <xsl:text>, </xsl:text> Laurent@1349: </xsl:when> Laurent@1349: </xsl:choose> Laurent@1349: </xsl:for-each> Laurent@1359: <xsl:value-of select="$end_bracket"/> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template match="ppx:arrayValue"> Laurent@1349: <xsl:call-template name="complex_type_value"> Laurent@1349: <xsl:with-param name="start_bracket"> Laurent@1349: <xsl:text>[</xsl:text> Laurent@1349: </xsl:with-param> Laurent@1349: <xsl:with-param name="end_bracket"> Laurent@1349: <xsl:text>]</xsl:text> Laurent@1349: </xsl:with-param> Laurent@1349: </xsl:call-template> Laurent@1349: </xsl:template> Laurent@1349: <xsl:template match="ppx:structValue"> Laurent@1349: <xsl:call-template name="complex_type_value"> Laurent@1349: <xsl:with-param name="start_bracket"> Laurent@1349: <xsl:text>(</xsl:text> Laurent@1349: </xsl:with-param> Laurent@1349: <xsl:with-param name="end_bracket"> Laurent@1349: <xsl:text>)</xsl:text> Laurent@1349: </xsl:with-param> Laurent@1349: </xsl:call-template> Laurent@1349: </xsl:template> Laurent@1349: </xsl:stylesheet>