Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  alllang.xsl   Sprache: unbekannt

 
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!--
 * This file is part of the LibreOffice 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/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 -->

<xsl:transform  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:oor="http://openoffice.org/2001/registry"
        xmlns:install="http://openoffice.org/2004/installation"
            exclude-result-prefixes="install">

<!-- Get the correct format -->
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>

<!--************************** PARAMETER ******************************** -->
<xsl:param name="locale"/>
<xsl:param name="module"/>
<xsl:param name="xcs"/>
<xsl:param name="schemaRoot">.</xsl:param>
<xsl:param name="fallback-locale">en-US</xsl:param>

<xsl:param name="LIBO_SHARE_FOLDER"/>
<xsl:param name="LIBO_SHARE_HELP_FOLDER"/>

<xsl:variable name="schemaRootURL">
    <xsl:value-of select="$schemaRoot"/>
</xsl:variable>
<xsl:variable name="schemaURL">
    <xsl:value-of select="$xcs"/>
</xsl:variable>

<!--************************** TEMPLATES ******************************** -->
<!-- ensure that at least root is available -->
    <xsl:template match="/oor:component-data">
        <xsl:copy>
            <xsl:choose>
                <xsl:when test="string-length($locale)">
                    <xsl:apply-templates select = "@*" mode="locale"/>
                    <xsl:apply-templates select = "node|prop" mode="locale"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:apply-templates select = "@*"/>
                    <xsl:for-each select="node|prop">
                        <xsl:variable name="component-schema" select="document($schemaURL)/oor:component-schema"/>
                        <xsl:apply-templates select=".">
                            <xsl:with-param name="component-schema" select="$component-schema"/>
                            <xsl:with-param name="context" select="$component-schema/component/*[@oor:name = current()/@oor:name]"/>
                            <xsl:with-param name="find-module" select="$module"/>
                        </xsl:apply-templates>
                    </xsl:for-each>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:copy>
    </xsl:template>

<!-- locale dependent data -->
    <xsl:template match="node|prop" mode = "locale">
        <xsl:choose>
            <xsl:when test="$locale=$fallback-locale">
                <xsl:if test="descendant::value[@xml:lang=$locale]/../value[not (@xml:lang)]">
                    <xsl:copy>
                        <xsl:apply-templates select = "@*" mode="locale"/>
                        <xsl:apply-templates select = "node|prop|value" mode = "locale"/>
                    </xsl:copy>
                </xsl:if>
            </xsl:when>
            <xsl:otherwise>
                <xsl:if test="descendant::value[@xml:lang = $locale]">
                    <xsl:copy>
                        <xsl:apply-templates select = "@*" mode="locale"/>
                        <xsl:apply-templates select = "node|prop|value" mode = "locale"/>
                    </xsl:copy>
                </xsl:if>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template match="value" mode="locale">
        <xsl:if test="@xml:lang=$locale and not(@install:module)">
            <xsl:copy>
                <xsl:apply-templates select = "@*" mode="locale"/>
                <xsl:apply-templates select="node()"/>
            </xsl:copy>
        </xsl:if>
    </xsl:template>

    <xsl:template match = "@*" mode="locale">
        <xsl:copy/>
    </xsl:template>

    <!-- suppress all merge instructions -->
    <xsl:template match = "@oor:op" mode="locale"/>

    <!-- suppress all module markers -->
    <xsl:template match = "@install:module" mode="locale"/>

<!-- locale independent data -->

    <!-- handle template references      -->
    <xsl:template name="copy-resolve-template">
        <xsl:param name = "node-type"/>
        <xsl:param name = "schema-type"/>
        <xsl:param name = "component-schema"/>

        <xsl:choose>
            <xsl:when test="$schema-type='node-ref'">
                <xsl:apply-templates select=".">
                    <xsl:with-param name="context" select="$component-schema/templates/*[@oor:name = $node-type]"/>
                    <xsl:with-param name="component-schema" select="$component-schema"/>
                </xsl:apply-templates>
            </xsl:when>
            <xsl:when test="$schema-type='set'">
                <xsl:copy>
                    <xsl:apply-templates select = "@*" />
                    <xsl:for-each select="node|prop">
                        <xsl:apply-templates select=".">
                            <xsl:with-param name="context" select="$component-schema/templates/*[@oor:name = $node-type]"/>
                            <xsl:with-param name="component-schema" select="$component-schema"/>
                        </xsl:apply-templates>
                    </xsl:for-each>
                </xsl:copy>
            </xsl:when>
            <xsl:otherwise>
                <xsl:message terminate="yes">ERROR: The schema element for a <xsl:value-of select="$schema-type"/>
                                                should not have a node-type.
                </xsl:message>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template name="copy-node">
        <xsl:param name = "context"/>
        <xsl:param name = "component-schema"/>

        <xsl:choose>
            <!-- look for matching templates in other components -->
            <xsl:when test="$context/@oor:node-type and $context/@oor:component">
                <xsl:variable name="fileURL">
                    <xsl:call-template name="composeFileURL">
                        <xsl:with-param name="component-schema" select="$component-schema"/>
                        <xsl:with-param name="componentName"><xsl:value-of select="$context/@oor:component"/></xsl:with-param>
                    </xsl:call-template>
                </xsl:variable>
                <xsl:call-template name="copy-resolve-template">
                    <xsl:with-param name="node-type" select="$context/@oor:node-type"/>
                    <xsl:with-param name="schema-type" select="local-name($context)"/>
                    <xsl:with-param name="component-schema" select="document($fileURL)/oor:component-schema"/>
                </xsl:call-template>
            </xsl:when>
            <!-- look for matching templates within the same component -->
            <xsl:when test="$context/@oor:node-type">
                <xsl:call-template name="copy-resolve-template">
                    <xsl:with-param name="node-type" select="$context/@oor:node-type"/>
                    <xsl:with-param name="schema-type" select="local-name($context)"/>
                    <xsl:with-param name="component-schema" select="$component-schema"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:copy>
                    <xsl:apply-templates select = "@*" />
                    <xsl:for-each select="node|prop">
                        <xsl:apply-templates select=".">
                            <xsl:with-param name="component-schema" select="$component-schema"/>
                            <xsl:with-param name="context" select="$context/*[@oor:name = current()/@oor:name]"/>
                        </xsl:apply-templates>
                    </xsl:for-each>
                </xsl:copy>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template match="node">
        <xsl:param name = "context"/>
        <xsl:param name = "component-schema"/>

        <xsl:variable name="applicable-values" select="descendant::value[not (@xml:lang) or (@xml:lang=$fallback-locale) or (@install:module=$module)]"/>
        <xsl:variable name="substantive-nodes" select="descendant-or-self::*[(@oor:finalized='true') or (@oor:mandatory='true') or (@oor:op!='modify')]"/>

        <xsl:choose>
            <!-- go ahead, if we are in the active module -->
            <xsl:when test="ancestor-or-self::*/@install:module=$module">
                <xsl:if test="$applicable-values | $substantive-nodes">
                    <xsl:call-template name="copy-node">
                        <xsl:with-param name="component-schema" select="$component-schema"/>
                        <xsl:with-param name="context" select="$context"/>
                    </xsl:call-template>
                </xsl:if>
            </xsl:when>
            <!-- strip data from wrong module -->
            <xsl:when test="ancestor-or-self::*/@install:module"/>
            <!-- looking for module -->
            <xsl:when test="$module">
                <xsl:if test="($applicable-values | $substantive-nodes)/ancestor-or-self::*/@install:module=$module">
                    <xsl:call-template name="copy-node">
                        <xsl:with-param name="component-schema" select="$component-schema"/>
                        <xsl:with-param name="context" select="$context"/>
                    </xsl:call-template>
                </xsl:if>
            </xsl:when>
            <!-- copying non-module data -->
            <xsl:otherwise>
                <xsl:if test="($applicable-values | $substantive-nodes)[not(ancestor-or-self::*/@install:module)]">
                    <xsl:call-template name="copy-node">
                        <xsl:with-param name="component-schema" select="$component-schema"/>
                        <xsl:with-param name="context" select="$context"/>
                    </xsl:call-template>
                </xsl:if>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template match="prop">
        <xsl:param name = "context"/>
        <xsl:choose>
            <xsl:when test="$module and not((ancestor-or-self::* | child::value)/@install:module=$module)"/>
            <xsl:when test="not($module) and ancestor-or-self::*/@install:module"/>
            <xsl:when test="not ($context) or @oor:finalized='true' or @oor:op!='modify'">
                <xsl:copy>
                    <xsl:apply-templates select = "@*"/>
                    <xsl:apply-templates select = "value"/>
                </xsl:copy>
            </xsl:when>
            <xsl:when test="value[not (@xml:lang) or @install:module]">
                <xsl:if test="value[not(@install:module) or @install:module=$module]">
                    <!-- copy locale independent values only, if the values differ -->
                    <xsl:variable name="isRedundant">
                        <xsl:call-template name="isRedundant">
                            <xsl:with-param name="schemaval"  select="$context/value"/>
                            <xsl:with-param name="dataval" select="value[(not(@xml:lang) or @install:module) and (not(@install:module) or @install:module=$module)]"/>
                        </xsl:call-template>
                    </xsl:variable>
                    <xsl:if test="$isRedundant ='false'">
                        <xsl:copy>
                            <xsl:apply-templates select = "@*"/>
                            <xsl:apply-templates select = "value"/>
                        </xsl:copy>
                        </xsl:if>
                </xsl:if>
            </xsl:when>
            <xsl:otherwise>
                <xsl:copy>
                    <xsl:apply-templates select = "@*"/>
                    <xsl:apply-templates select = "value" mode="fallback-locale"/>
                </xsl:copy>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template match="value">
        <xsl:choose>
            <xsl:when test="@xml:lang and not(@install:module)"/>
            <xsl:when test="$module and not(ancestor-or-self::*/@install:module=$module)"/>
            <xsl:when test="not($module) and ancestor-or-self::*/@install:module"/>
            <xsl:otherwise>
                <xsl:copy>
                    <xsl:apply-templates select = "@*|node()"/>
                </xsl:copy>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template match="value" mode="fallback-locale">
        <xsl:if test="@xml:lang=$fallback-locale and not(@install:module)">
            <xsl:copy>
                <xsl:apply-templates select = "@*|node()"/>
            </xsl:copy>
        </xsl:if>
    </xsl:template>

        <xsl:template match ="it|unicode">
          <xsl:copy>
            <xsl:apply-templates select = "@*|node()"/>
          </xsl:copy>
        </xsl:template>

    <xsl:template match = "@*">
        <xsl:copy/>
    </xsl:template>

    <!-- suppress all merge instructions, that are out-of-module -->
    <xsl:template match = "@oor:op">
        <xsl:if test="not($module) or ancestor::*/@install:module">
            <xsl:copy/>
        </xsl:if>
    </xsl:template>

    <!-- suppress all module markers -->
    <xsl:template match = "@install:module"/>

<!-- compares two values -->
    <xsl:template name="isRedundant">
        <xsl:param name = "schemaval"/>
        <xsl:param name = "dataval"/>
        <xsl:choose>
            <xsl:when test="not ($dataval)">
                <xsl:value-of select="true()"/>
            </xsl:when>
            <xsl:when test="$dataval/@oor:external">
                <xsl:value-of select="false()"/>
            </xsl:when>
            <xsl:when test="not ($schemaval)">
                <xsl:choose>
                    <xsl:when test="$dataval/@xsi:nil='true'">
                        <xsl:value-of select="true()"/>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="false()"/>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:when>
            <xsl:when test="$schemaval != $dataval">
                <xsl:value-of select="false()"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="true()"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template name="composeFileURL">
        <xsl:param name="componentName"/>
        <xsl:variable name="fileURL">
            <xsl:value-of select="$schemaRootURL"/>/<xsl:value-of select="translate($componentName,'.','/')"/><xsl:text>.xcs</xsl:text>
        </xsl:variable>
        <xsl:value-of select="$fileURL"/>
    </xsl:template>

        <xsl:template match="@oor:name">
          <xsl:attribute name="oor:name">
            <xsl:call-template name="replacetwo">
              <xsl:with-param name="input" select="current()"/>
              <xsl:with-param name="pattern1" select="'@LIBO_SHARE_FOLDER@'"/>
              <xsl:with-param name="replace1" select="$LIBO_SHARE_FOLDER"/>
              <xsl:with-param name="pattern2" select="'@LIBO_SHARE_HELP_FOLDER@'"/>
              <xsl:with-param name="replace2" select="$LIBO_SHARE_HELP_FOLDER"/>
            </xsl:call-template>
          </xsl:attribute>
        </xsl:template>

        <xsl:template match="text()">
          <xsl:call-template name="replacetwo">
            <xsl:with-param name="input" select="current()"/>
            <xsl:with-param name="pattern1" select="'@LIBO_SHARE_FOLDER@'"/>
            <xsl:with-param name="replace1" select="$LIBO_SHARE_FOLDER"/>
            <xsl:with-param name="pattern2" select="'@LIBO_SHARE_HELP_FOLDER@'"/>
            <xsl:with-param name="replace2" select="$LIBO_SHARE_HELP_FOLDER"/>
          </xsl:call-template>
        </xsl:template>

        <xsl:template name="replace">
          <xsl:param name="input"/>
          <xsl:param name="pattern"/>
          <xsl:param name="replace"/>
          <xsl:choose>
            <xsl:when test="contains($input, $pattern)">
              <xsl:value-of select="substring-before($input, $pattern)"/>
              <xsl:value-of select="$replace"/>
              <xsl:call-template name="replace">
                <xsl:with-param
                    name="input" select="substring-after($input, $pattern)"/>
                <xsl:with-param name="pattern" select="$pattern"/>
                <xsl:with-param name="replace" select="$replace"/>
              </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="$input"/>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:template>

        <xsl:template name="replacetwo">
          <xsl:param name="input"/>
          <xsl:param name="pattern1"/>
          <xsl:param name="replace1"/>
          <xsl:param name="pattern2"/>
          <xsl:param name="replace2"/>
          <xsl:choose>
            <xsl:when test="contains($input, $pattern1)">
          <xsl:call-template name="replace">
        <xsl:with-param
            name="input" select="substring-before($input, $pattern1)"/>
        <xsl:with-param name="pattern" select="$pattern2"/>
        <xsl:with-param name="replace" select="$replace2"/>
          </xsl:call-template>
              <xsl:value-of select="$replace1"/>
              <xsl:call-template name="replacetwo">
                <xsl:with-param
                    name="input" select="substring-after($input, $pattern1)"/>
                <xsl:with-param name="pattern1" select="$pattern1"/>
                <xsl:with-param name="replace1" select="$replace1"/>
                <xsl:with-param name="pattern2" select="$pattern2"/>
                <xsl:with-param name="replace2" select="$replace2"/>
              </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
          <xsl:call-template name="replace">
        <xsl:with-param
            name="input" select="$input"/>
        <xsl:with-param name="pattern" select="$pattern2"/>
        <xsl:with-param name="replace" select="$replace2"/>
          </xsl:call-template>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:template>

</xsl:transform>

[ Dauer der Verarbeitung: 0.27 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge