| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| * This file is part of the Collabora Office project. |
| * |
| * This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| * |
| --> |
| |
| <!-- Generate a .hxx file with type-safe C++ abstractions (based on |
| comphelper/configuration.hxx) for all the <prop> and <set> elements in an |
| .xcs file. |
| |
| Takes up to three parameters ns1, ns2, ns3 that represent the .xcs file's |
| nesting within the org/openoffice hierarchy (e.g., for |
| officecfg/registry/schema/org/openoffice/Office/Common.xcs, ns1 would be |
| "Office", ns2 would be "Common", and ns3 would remain unset. |
| |
| TODO: Does not yet handle <node-ref> indirections (as, e.g., used in |
| officecfg/registry/schema/org/openoffice/Office/Common.xcs as |
| "ApplicationControlLayout"). Also, the available abstractions can still be |
| improved (e.g., for extensible groups or for set element types). |
| --> |
| |
| <xsl:stylesheet |
| version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
| xmlns:oor="http://openoffice.org/2001/registry"> |
| <xsl:param name="ns1"/> |
| <xsl:param name="ns2"/> |
| <xsl:param name="ns3"/> |
| <xsl:output method="text"/> |
| |
| <xsl:template match="/oor:component-schema"> |
| <xsl:apply-templates select="component"> |
| <xsl:with-param name="path"> |
| <xsl:text>/</xsl:text> |
| <xsl:value-of select="@oor:package"/> |
| <xsl:text>.</xsl:text> |
| <xsl:value-of select="@oor:name"/> |
| </xsl:with-param> |
| </xsl:apply-templates> |
| </xsl:template> |
| |
| <xsl:template match="component"> |
| <xsl:param name="path"/> |
| <xsl:text>#ifndef INCLUDED_OFFICECFG_</xsl:text> |
| <xsl:value-of |
| select="translate($ns1, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/> |
| <xsl:if test="$ns2"> |
| <xsl:text>_</xsl:text> |
| <xsl:value-of |
| select="translate($ns2, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/> |
| <xsl:if test="$ns3"> |
| <xsl:text>_</xsl:text> |
| <xsl:value-of |
| select="translate($ns3, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/> |
| </xsl:if> |
| </xsl:if> |
| <xsl:text>_HXX
</xsl:text> |
| <xsl:text>#define INCLUDED_OFFICECFG_</xsl:text> |
| <xsl:value-of |
| select="translate($ns1, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/> |
| <xsl:if test="$ns2"> |
| <xsl:text>_</xsl:text> |
| <xsl:value-of |
| select="translate($ns2, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/> |
| <xsl:if test="$ns3"> |
| <xsl:text>_</xsl:text> |
| <xsl:value-of |
| select="translate($ns3, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/> |
| </xsl:if> |
| </xsl:if> |
| <xsl:text>_HXX
</xsl:text> |
| <xsl:text>
</xsl:text> |
| <xsl:text>#include "sal/config.h"
</xsl:text> |
| <xsl:text>
</xsl:text> |
| <xsl:if test=".//prop or .//set"> |
| <xsl:if |
| test=".//prop[count(@oor:nillable) = 0 or @oor:nillable = 'true']"> |
| <xsl:text>#include <optional>
</xsl:text> |
| </xsl:if> |
| <xsl:if test=".//prop/@oor:type = 'oor:any'"> |
| <xsl:text>#include "com/sun/star/uno/Any.hxx"
</xsl:text> |
| </xsl:if> |
| <xsl:if test=".//prop/@oor:type = 'xs:hexBinary' or .//prop/@oor:type = 'oor:boolean-list' or .//prop/@oor:type = 'oor:short-list' or .//prop/@oor:type = 'oor:int-list' or .//prop/@oor:type = 'oor:long-list' or .//prop/@oor:type = 'oor:double-list' or .//prop/@oor:type = 'oor:string-list'"> |
| <xsl:text>#include "com/sun/star/uno/Sequence.hxx"
</xsl:text> |
| </xsl:if> |
| <xsl:text>#include "rtl/ustring.h"
</xsl:text> |
| <xsl:text>#include "rtl/ustring.hxx"
</xsl:text> |
| <xsl:if test=".//prop/@oor:type = 'xs:short' or .//prop/@oor:type = 'xs:int' or .//prop/@oor:type = 'xs:long' or .//prop/@oor:type = 'xs:hexBinary'"> |
| <xsl:text>#include "sal/types.h"
</xsl:text> |
| </xsl:if> |
| <xsl:text>#include "comphelper/configuration.hxx"
</xsl:text> |
| <xsl:text>
</xsl:text> |
| <xsl:text>namespace officecfg { namespace </xsl:text> |
| <xsl:value-of select="$ns1"/> |
| <xsl:if test="$ns2"> |
| <xsl:text> { namespace </xsl:text> |
| <xsl:value-of select="$ns2"/> |
| <xsl:if test="$ns3"> |
| <xsl:text> { namespace </xsl:text> |
| <xsl:value-of select="$ns3"/> |
| </xsl:if> |
| </xsl:if> |
| <xsl:text> {
</xsl:text> |
| <xsl:text>
</xsl:text> |
| <xsl:apply-templates select="group|set|prop"> |
| <xsl:with-param name="path" select="$path"/> |
| </xsl:apply-templates> |
| <xsl:if test="$ns2"> |
| <xsl:text>} </xsl:text> |
| <xsl:if test="$ns3"> |
| <xsl:text>} </xsl:text> |
| </xsl:if> |
| </xsl:if> |
| <xsl:text>} }
</xsl:text> |
| <xsl:text>
</xsl:text> |
| </xsl:if> |
| <xsl:text>#endif
</xsl:text> |
| </xsl:template> |
| |
| <xsl:template match="group"> |
| <xsl:param name="path"/> |
| <xsl:if test="not(info/deprecated) and (.//prop or .//set)"> |
| <xsl:variable name="name" select="translate(@oor:name, '-.', '__')"/> |
| <xsl:text>struct </xsl:text> |
| <xsl:value-of select="$name"/> |
| <xsl:text>: public comphelper::ConfigurationGroup< </xsl:text> |
| <xsl:value-of select="$name"/> |
| <xsl:text>> {
</xsl:text> |
| <xsl:text> static OUString path() { static constexpr OUString PATH(<!-- |
| -->u"</xsl:text> |
| <xsl:value-of select="$path"/> |
| <xsl:text>/</xsl:text> |
| <xsl:value-of select="@oor:name"/> |
| <xsl:text>"_ustr); return PATH; }
</xsl:text> |
| <xsl:text>
</xsl:text> |
| <xsl:apply-templates select="group|set|prop"> |
| <xsl:with-param name="path"> |
| <xsl:value-of select="$path"/> |
| <xsl:text>/</xsl:text> |
| <xsl:value-of select="@oor:name"/> |
| </xsl:with-param> |
| </xsl:apply-templates> |
| <xsl:text>private:
</xsl:text> |
| <xsl:text> </xsl:text> |
| <xsl:value-of select="$name"/> |
| <xsl:text>(); // not defined
</xsl:text> |
| <xsl:text> ~</xsl:text> |
| <xsl:value-of select="$name"/> |
| <xsl:text>(); // not defined
</xsl:text> |
| <xsl:text>};
</xsl:text> |
| <xsl:text>
</xsl:text> |
| </xsl:if> |
| </xsl:template> |
| |
| <xsl:template match="set"> |
| <xsl:param name="path"/> |
| <xsl:if test="not(info/deprecated)"> |
| <xsl:variable name="name" select="translate(@oor:name, '-.', '__')"/> |
| <xsl:text>struct </xsl:text> |
| <xsl:value-of select="$name"/> |
| <xsl:text>: public comphelper::ConfigurationSet< </xsl:text> |
| <xsl:value-of select="$name"/> |
| <xsl:text>> {
</xsl:text> |
| <xsl:text> static OUString path() { static constexpr OUString PATH(<!-- |
| -->u"</xsl:text> |
| <xsl:value-of select="$path"/> |
| <xsl:text>/</xsl:text> |
| <xsl:value-of select="@oor:name"/> |
| <xsl:text>"_ustr); return PATH; }
</xsl:text> |
| <xsl:text>private:
</xsl:text> |
| <xsl:text> </xsl:text> |
| <xsl:value-of select="$name"/> |
| <xsl:text>(); // not defined
</xsl:text> |
| <xsl:text> ~</xsl:text> |
| <xsl:value-of select="$name"/> |
| <xsl:text>(); // not defined
</xsl:text> |
| <xsl:text>};
</xsl:text> |
| <xsl:text>
</xsl:text> |
| </xsl:if> |
| </xsl:template> |
| |
| <xsl:template match="prop"> |
| <xsl:param name="path"/> |
| <xsl:if test="not(info/deprecated)"> |
| <xsl:variable name="name" select="translate(@oor:name, '-.', '__')"/> |
| <xsl:text>struct </xsl:text> |
| <xsl:value-of select="$name"/> |
| <xsl:text>: public comphelper::</xsl:text> |
| <xsl:choose> |
| <xsl:when test="@oor:localized = 'true'"> |
| <xsl:text>ConfigurationLocalizedProperty</xsl:text> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:text>ConfigurationProperty</xsl:text> |
| </xsl:otherwise> |
| </xsl:choose> |
| <xsl:text><</xsl:text> |
| <xsl:value-of select="$name"/> |
| <xsl:text>, </xsl:text> |
| <xsl:if test="not(@oor:nillable = 'false')"> |
| <xsl:text>std::optional<</xsl:text> |
| </xsl:if> |
| <xsl:choose> |
| <xsl:when test="@oor:type='oor:any'"> |
| <xsl:text>com::sun::star::uno::Any</xsl:text> |
| </xsl:when> |
| <xsl:when test="@oor:type='xs:boolean'"> |
| <xsl:text>bool</xsl:text> |
| </xsl:when> |
| <xsl:when test="@oor:type='xs:short'"> |
| <xsl:text>sal_Int16</xsl:text> |
| </xsl:when> |
| <xsl:when test="@oor:type='xs:int'"> |
| <xsl:text>sal_Int32</xsl:text> |
| </xsl:when> |
| <xsl:when test="@oor:type='xs:long'"> |
| <xsl:text>sal_Int64</xsl:text> |
| </xsl:when> |
| <xsl:when test="@oor:type='xs:double'"> |
| <xsl:text>double</xsl:text> |
| </xsl:when> |
| <xsl:when test="@oor:type='xs:string'"> |
| <xsl:text>OUString</xsl:text> |
| </xsl:when> |
| <xsl:when test="@oor:type='xs:hexBinary'"> |
| <xsl:text>com::sun::star::uno::Sequence<sal_Int8> </xsl:text> |
| </xsl:when> |
| <xsl:when test="@oor:type='oor:boolean-list'"> |
| <xsl:text>com::sun::star::uno::Sequence<bool> </xsl:text> |
| </xsl:when> |
| <xsl:when test="@oor:type='oor:short-list'"> |
| <xsl:text>com::sun::star::uno::Sequence<sal_Int16> </xsl:text> |
| </xsl:when> |
| <xsl:when test="@oor:type='oor:int-list'"> |
| <xsl:text>com::sun::star::uno::Sequence<sal_Int32> </xsl:text> |
| </xsl:when> |
| <xsl:when test="@oor:type='oor:long-list'"> |
| <xsl:text>com::sun::star::uno::Sequence<sal_Int64> </xsl:text> |
| </xsl:when> |
| <xsl:when test="@oor:type='oor:double-list'"> |
| <xsl:text>com::sun::star::uno::Sequence<double> </xsl:text> |
| </xsl:when> |
| <xsl:when test="@oor:type='oor:string-list'"> |
| <xsl:text>com::sun::star::uno::Sequence<OUString> </xsl:text> |
| </xsl:when> |
| <xsl:when test="@oor:type='oor:hexBinary-list'"> |
| <xsl:text>com::sun::star::uno::Sequence<<!-- |
| -->com::sun::star::uno::Sequence<sal_Int8> > </xsl:text> |
| </xsl:when> |
| </xsl:choose> |
| <xsl:if test="not(@oor:nillable = 'false')"> |
| <xsl:text>> </xsl:text> |
| </xsl:if> |
| <xsl:text>> {
</xsl:text> |
| <xsl:text> static OUString path() { static constexpr OUString PATH(<!-- |
| -->u"</xsl:text> |
| <xsl:value-of select="$path"/> |
| <xsl:text>/</xsl:text> |
| <xsl:value-of select="@oor:name"/> |
| <xsl:text>"_ustr); return PATH; }
</xsl:text> |
| <xsl:text>private:
</xsl:text> |
| <xsl:text> </xsl:text> |
| <xsl:value-of select="$name"/> |
| <xsl:text>(); // not defined
</xsl:text> |
| <xsl:text> ~</xsl:text> |
| <xsl:value-of select="$name"/> |
| <xsl:text>(); // not defined
</xsl:text> |
| <xsl:text>};
</xsl:text> |
| <xsl:text>
</xsl:text> |
| </xsl:if> |
| </xsl:template> |
| </xsl:stylesheet> |