[PATCH 05/17] XHTML export: convert DOS newlines to Unix newlines

andrew-libreoffice.org at pileofstuff.org andrew-libreoffice.org at pileofstuff.org
Thu Aug 14 14:53:45 PDT 2014


From: Andrew Sayers <andrew-libreoffice.org at pileofstuff.org>

---
 .../source/xslt/odf2xhtml/export/common/body.xsl   | 798 ++++++++++-----------
 .../export/common/styles/style_mapping_css.xsl     | 666 ++++++++---------
 2 files changed, 732 insertions(+), 732 deletions(-)

diff --git filter/source/xslt/odf2xhtml/export/common/body.xsl filter/source/xslt/odf2xhtml/export/common/body.xsl
index b2cc5d0..facc174 100644
--- filter/source/xslt/odf2xhtml/export/common/body.xsl
+++ filter/source/xslt/odf2xhtml/export/common/body.xsl
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
  * This file is part of the LibreOffice project.
  *
@@ -16,9 +16,9 @@
  *   except in compliance with the License. You may obtain a copy of
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  -->
-<!--
-	For further documentation and updates visit http://xml.openoffice.org/odf2xhtml
--->
+<!--
+	For further documentation and updates visit http://xml.openoffice.org/odf2xhtml
+-->
 <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
@@ -47,402 +47,402 @@
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:java="http://xml.apache.org/xslt/java"
     xmlns:urlencoder="http://www.jclark.com/xt/java/java.net.URLEncoder"
-    exclude-result-prefixes="chart config dc dom dr3d draw fo form math meta number office ooo oooc ooow script style svg table text xforms xlink xsd xsi java urlencoder">
-
-
-	<xsl:include href="table_of_content.xsl"/>
-
-
-	<!-- ****************** -->
-	<!-- *** Whitespace *** -->
-	<!-- ****************** -->
-
-	<xsl:template match="text:s">
-		<xsl:call-template name="write-breakable-whitespace">
-			<xsl:with-param name="whitespaces" select="@text:c"/>
-		</xsl:call-template>
-	</xsl:template>
-
-
-	<!--write the number of 'whitespaces' -->
-	<xsl:template name="write-breakable-whitespace">
-		<xsl:param name="whitespaces"/>
-
-		<!--write two space chars as the normal white space character will be stripped
-			and the other is able to break -->
-		<xsl:text> </xsl:text>
-		<xsl:if test="$whitespaces >= 2">
-			<xsl:call-template name="write-breakable-whitespace-2">
-				<xsl:with-param name="whitespaces" select="$whitespaces - 1"/>
-			</xsl:call-template>
-		</xsl:if>
-	</xsl:template>
-
-
-	<!--write the number of 'whitespaces' -->
-	<xsl:template name="write-breakable-whitespace-2">
-		<xsl:param name="whitespaces"/>
-		<!--write two space chars as the normal white space character will be stripped
-			and the other is able to break -->
-		<xsl:text> </xsl:text>
-		<xsl:if test="$whitespaces >= 2">
-			<xsl:call-template name="write-breakable-whitespace">
-				<xsl:with-param name="whitespaces" select="$whitespaces - 1"/>
-			</xsl:call-template>
-		</xsl:if>
-	</xsl:template>
-
-	<!-- currentSolution: 8 non-breakable-spaces instead of a TAB is an approximation.
-		 Sometimes less spaces than 8 might be needed and the output might be more difficult to read-->
-	<xsl:template match="text:tab">
-		<xsl:param name="globalData"/>
-
-		<xsl:call-template name="write-breakable-whitespace">
-			<xsl:with-param name="whitespaces" select="8"/>
-		</xsl:call-template>
-	</xsl:template>
-
-
-
-	<!-- *************** -->
-	<!-- *** Textbox *** -->
-	<!-- *************** -->
-
-	<!-- ID / NAME of text-box -->
-	<xsl:template match="@draw:name">
-		<xsl:attribute name="id">
-			<xsl:choose>
-				<xsl:when test="number(substring(.,1,1))">
-				<!-- Heuristic: If the first character is a number a 'a_' will be set
-					as prefix, as id have to be of type NMTOKEN -->
-					<xsl:value-of select="concat('a_',translate(., '&#xA;&<>.,;: %()[]/\+', '___________________________'))"/>
-				</xsl:when>
-				<xsl:otherwise>
-					<xsl:value-of select="translate(., '&#xA;&<>.,;: %()[]/\+', '___________________________')"/>
-				</xsl:otherwise>
-			</xsl:choose>
-		</xsl:attribute>
-	</xsl:template>
-
-
-	<xsl:template match="text:line-break">
-		<xsl:param name="listIndent"/>
-
-		<xsl:element namespace="{$namespace}" name="br"/>
-
-		<!-- line breaks in lists need an indent similar to the list label -->
-		<xsl:if test="$listIndent">
-			<xsl:element namespace="{$namespace}" name="span">
-				<xsl:attribute name="style">margin-left:<xsl:value-of select="$listIndent"/>cm</xsl:attribute>
-			</xsl:element>
-		</xsl:if>
-	</xsl:template>
-
-
-	<!-- currently there have to be an explicit call of the style attribute nodes, maybe the attributes nodes have no priority only order relevant-->
-	<xsl:template name="apply-styles-and-content">
-		<xsl:param name="globalData"/>
-		<xsl:param name="footnotePrefix" />
-		<xsl:apply-templates select="@*">
-			<xsl:with-param name="globalData" select="$globalData"/>
-		</xsl:apply-templates>
-		<!-- the footnote symbol is the prefix for a footnote in the footer -->
-		<xsl:copy-of select="$footnotePrefix"/>
-		<xsl:apply-templates select="node()">
-			<xsl:with-param name="globalData" select="$globalData"/>
-		</xsl:apply-templates>
-	</xsl:template>
-
-
-	<!-- ******************* -->
-	<!-- *** References  *** -->
-	<!-- ******************* -->
-
-	<xsl:template match="text:reference-ref | text:sequence-ref | text:bookmark-ref">
-		<xsl:param name="globalData"/>
-		<xsl:if test="*|text()">
-		<xsl:element namespace="{$namespace}" name="a">
-			<xsl:attribute name="href">
-				<xsl:text>#</xsl:text>
-				<xsl:choose>
-					<xsl:when test="number(substring(@text:ref-name,1,1))">
-					<!-- Heuristic: If the first character is a number a 'a_' will be set
-						as prefix, as id have to be of type NMTOKEN -->
-						<xsl:value-of select="concat('a_',translate(@text:ref-name, '&#xA;&<>.,;: %()[]/\+', '___________________________'))"/>
-					</xsl:when>
-					<xsl:otherwise>
-						<xsl:value-of select="translate(@text:ref-name, '&#xA;&<>.,;: %()[]/\+', '___________________________')"/>
-					</xsl:otherwise>
-				</xsl:choose>
-			</xsl:attribute>
-
-			<xsl:apply-templates select="@* | node()">
-				<xsl:with-param name="globalData" select="$globalData"/>
-			</xsl:apply-templates>
-
-		</xsl:element>
-		</xsl:if>
-	</xsl:template>
-
-    <xsl:template match="@text:name">
-		<xsl:attribute name="id">
-			<xsl:choose>
-				<xsl:when test="number(substring(.,1,1))">
-				<!-- Heuristic: If the first character is a number a 'a_' will be set
-					as prefix, as id have to be of type NMTOKEN -->
-					<xsl:value-of select="concat('a_',translate(., '&#xA;&<>.,;: %()[]/\+', '___________________________'))"/>
-				</xsl:when>
-				<xsl:otherwise>
-					<xsl:value-of select="translate(., '&#xA;&<>.,;: %()[]/\+', '___________________________')"/>
-				</xsl:otherwise>
-			</xsl:choose>
-        </xsl:attribute>
-    </xsl:template>
-
-	<xsl:template match="text:sequence">
-		<xsl:param name="globalData"/>
-
-		<xsl:element namespace="{$namespace}" name="a">
-			<xsl:apply-templates select="@*" />
-			<xsl:attribute name="id">
-				<xsl:choose>
-					<xsl:when test="number(substring(@text:ref-name,1,1))">
-					<!-- Heuristic: If the first character is a number a 'a_' will be set
-						as prefix, as id have to be of type NMTOKEN -->
-						<xsl:value-of select="concat('a_',translate(@text:ref-name, '&#xA;&<>.,;: %()[]/\+', '___________________________'))"/>
-					</xsl:when>
-					<xsl:otherwise>
-						<xsl:value-of select="translate(@text:ref-name, '&#xA;&<>.,;: %()[]/\+', '___________________________')"/>
-					</xsl:otherwise>
-				</xsl:choose>
-			</xsl:attribute>
-		</xsl:element>
-
-		<xsl:apply-templates>
-			<xsl:with-param name="globalData" select="$globalData"/>
-		</xsl:apply-templates>
-	</xsl:template>
-
-	<xsl:template match="text:reference-mark">
-		<xsl:param name="globalData"/>
-
-		<xsl:element namespace="{$namespace}" name="a">
-			<xsl:apply-templates select="@*" />
-			<xsl:attribute name="id">
-				<xsl:choose>
-					<xsl:when test="number(substring(@text:name,1,1))">
-					<!-- Heuristic: If the first character is a number a 'a_' will be set
-						as prefix, as id have to be of type NMTOKEN -->
-						<xsl:value-of select="concat('a_',translate(@text:name, '&#xA;&<>.,;: %()[]/\+', '___________________________'))"/>
-					</xsl:when>
-					<xsl:otherwise>
-						<xsl:value-of select="translate(@text:name, '&#xA;&<>.,;: %()[]/\+', '___________________________')"/>
-					</xsl:otherwise>
-				</xsl:choose>
-			</xsl:attribute>
-		</xsl:element>
-
-		<xsl:apply-templates>
-			<xsl:with-param name="globalData" select="$globalData"/>
-		</xsl:apply-templates>
-	</xsl:template>
-
-
-	<xsl:template match="text:reference-mark-start">
-		<xsl:param name="globalData"/>
-
-		<xsl:element namespace="{$namespace}" name="a">
-			<xsl:apply-templates select="@*" />
-		</xsl:element>
-	</xsl:template>
-
-	<xsl:template match="text:bibliography-mark">
-		<xsl:param name="globalData"/>
-
-		<xsl:element namespace="{$namespace}" name="a">
-			<xsl:apply-templates select="@* | node()">
-				<xsl:with-param name="globalData" select="$globalData"/>
-			</xsl:apply-templates>
-		</xsl:element>
-	</xsl:template>
-
-	<!-- @text:title exist only in text:bibliography-mark -->
-	<xsl:template match="@text:title">
-		<xsl:attribute name="title">
-			<xsl:value-of select="."/>
-		</xsl:attribute>
-	</xsl:template>
-
-	<!-- @text:url exist only in text:bibliography-mark -->
-	<xsl:template match="@text:url">
-		<xsl:attribute name="href">
-			<xsl:value-of select="."/>
-		</xsl:attribute>
-	</xsl:template>
-
-	<xsl:template match="text:user-defined">
-		<xsl:apply-templates/>
-	</xsl:template>
-
-
-    <xsl:template match="office:annotation">
-        <xsl:element name="span">
-            <xsl:attribute name="title">annotation</xsl:attribute>
-            <xsl:attribute name="class">annotation_style_by_filter</xsl:attribute>
-            <xsl:apply-templates select="@*" />
-            <br/>
-            <xsl:text>[ANNOTATION:</xsl:text>
-            <br/>
-            <xsl:apply-templates select="*" mode="annotation"/>
-            <xsl:text>]</xsl:text>
-        </xsl:element>
-    </xsl:template>
-
-    <xsl:template match="text:p" mode="annotation">
-        <br/>
-        <xsl:element name="span">
-            <xsl:text>NOTE: '</xsl:text>
-            <xsl:apply-templates />
-            <xsl:text>'</xsl:text>
-        </xsl:element>
-    </xsl:template>
-
-    <xsl:template match="dc:creator" mode="annotation">
-        <br/>
-        <xsl:element name="span">
-            <xsl:attribute name="title">dc:creator</xsl:attribute>
-            <xsl:text>BY '</xsl:text>
-            <xsl:apply-templates />
-            <xsl:text>'</xsl:text>
-        </xsl:element>
-    </xsl:template>
-
-    <xsl:template match="dc:date" mode="annotation">
-        <br/>
-        <xsl:element name="span">
-            <xsl:attribute name="title">dc:date</xsl:attribute>
-            <xsl:text>ON '</xsl:text>
-            <xsl:apply-templates />
-            <xsl:text>'</xsl:text>
-        </xsl:element>
-    </xsl:template>
-
-    <xsl:template match="meta:date-string" mode="annotation">
-        <br/>
-        <xsl:element name="span">
-            <xsl:attribute name="title">meta-date-string</xsl:attribute>
-            <xsl:text>META DATE '</xsl:text>
-            <xsl:apply-templates />
-            <xsl:text>'</xsl:text>
-        </xsl:element>
-    </xsl:template>
-
-
-	<!-- *************** -->
-	<!-- *** HELPER  *** -->
-	<!-- *************** -->
-
-
-	<xsl:template name="create-href">
-		<xsl:param name="href"/>
-
-		<xsl:choose>
-			<!-- internal OOo URL used in content tables -->
-			<xsl:when test="contains($href, '%7Coutline') or contains($href, '|outline')">
-				<!-- the simple workaround for content tables in a single document is to create create an anchor from every heading element
-					 work-around downside: Multiple identical headings won't refer always to the first.
-				-->
-				<xsl:text>#</xsl:text>
-				<xsl:variable name="title">
-					<xsl:apply-templates mode="concatenate"/>
-				</xsl:variable>
-
-				<xsl:value-of select="concat('a_', translate(normalize-space($title), '.,;: %()[]/\+', '_____________'))"/>
-			</xsl:when>
-			<xsl:when test="self::draw:image[office:binary-data]">
-				<xsl:text>data:image/*;base64,</xsl:text><xsl:value-of select="office:binary-data"/>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:choose>
-					 <!-- in case of packed open office document -->
-					<xsl:when test="starts-with($sourceBaseURL, 'jar:') or $isPackageFormat">
-						<xsl:choose>
-							 <!-- for images relative to open office document -->
-							<xsl:when test="starts-with($href, '../')">
-								<!-- creating an absolute http URL to the packed image file (removing the '.')-->
-								<xsl:value-of select="concat(substring-after(substring-before($sourceBaseURL, '!'), 'jar:'), '/', $href, $optionalURLSuffix)"/>
-							</xsl:when>
-							 <!-- for absolute URLs & absolute paths -->
-							<xsl:when test="contains($href, ':') or starts-with($href, '/')">
-								<xsl:value-of select="concat($href, $optionalURLSuffix)"/>
-							</xsl:when>
-							<!-- for images jared in open office document -->
-							<xsl:otherwise>
-								<xsl:value-of select="concat($sourceBaseURL, $href, $optionalURLSuffix)"/>
-							</xsl:otherwise>
-						</xsl:choose>
-					</xsl:when>
-					<xsl:otherwise>
-						<xsl:choose>
-							 <!-- for absolute URLs & Paths -->
-							<xsl:when test="contains($href, ':') or starts-with($href, '/')">
-								<xsl:value-of select="concat($href, $optionalURLSuffix)"/>
-							</xsl:when>
-							 <!-- for relative URLs -->
+    exclude-result-prefixes="chart config dc dom dr3d draw fo form math meta number office ooo oooc ooow script style svg table text xforms xlink xsd xsi java urlencoder">
+
+
+	<xsl:include href="table_of_content.xsl"/>
+
+
+	<!-- ****************** -->
+	<!-- *** Whitespace *** -->
+	<!-- ****************** -->
+
+	<xsl:template match="text:s">
+		<xsl:call-template name="write-breakable-whitespace">
+			<xsl:with-param name="whitespaces" select="@text:c"/>
+		</xsl:call-template>
+	</xsl:template>
+
+
+	<!--write the number of 'whitespaces' -->
+	<xsl:template name="write-breakable-whitespace">
+		<xsl:param name="whitespaces"/>
+
+		<!--write two space chars as the normal white space character will be stripped
+			and the other is able to break -->
+		<xsl:text> </xsl:text>
+		<xsl:if test="$whitespaces >= 2">
+			<xsl:call-template name="write-breakable-whitespace-2">
+				<xsl:with-param name="whitespaces" select="$whitespaces - 1"/>
+			</xsl:call-template>
+		</xsl:if>
+	</xsl:template>
+
+
+	<!--write the number of 'whitespaces' -->
+	<xsl:template name="write-breakable-whitespace-2">
+		<xsl:param name="whitespaces"/>
+		<!--write two space chars as the normal white space character will be stripped
+			and the other is able to break -->
+		<xsl:text> </xsl:text>
+		<xsl:if test="$whitespaces >= 2">
+			<xsl:call-template name="write-breakable-whitespace">
+				<xsl:with-param name="whitespaces" select="$whitespaces - 1"/>
+			</xsl:call-template>
+		</xsl:if>
+	</xsl:template>
+
+	<!-- currentSolution: 8 non-breakable-spaces instead of a TAB is an approximation.
+		 Sometimes less spaces than 8 might be needed and the output might be more difficult to read-->
+	<xsl:template match="text:tab">
+		<xsl:param name="globalData"/>
+
+		<xsl:call-template name="write-breakable-whitespace">
+			<xsl:with-param name="whitespaces" select="8"/>
+		</xsl:call-template>
+	</xsl:template>
+
+
+
+	<!-- *************** -->
+	<!-- *** Textbox *** -->
+	<!-- *************** -->
+
+	<!-- ID / NAME of text-box -->
+	<xsl:template match="@draw:name">
+		<xsl:attribute name="id">
+			<xsl:choose>
+				<xsl:when test="number(substring(.,1,1))">
+				<!-- Heuristic: If the first character is a number a 'a_' will be set
+					as prefix, as id have to be of type NMTOKEN -->
+					<xsl:value-of select="concat('a_',translate(., '&#xA;&<>.,;: %()[]/\+', '___________________________'))"/>
+				</xsl:when>
+				<xsl:otherwise>
+					<xsl:value-of select="translate(., '&#xA;&<>.,;: %()[]/\+', '___________________________')"/>
+				</xsl:otherwise>
+			</xsl:choose>
+		</xsl:attribute>
+	</xsl:template>
+
+
+	<xsl:template match="text:line-break">
+		<xsl:param name="listIndent"/>
+
+		<xsl:element namespace="{$namespace}" name="br"/>
+
+		<!-- line breaks in lists need an indent similar to the list label -->
+		<xsl:if test="$listIndent">
+			<xsl:element namespace="{$namespace}" name="span">
+				<xsl:attribute name="style">margin-left:<xsl:value-of select="$listIndent"/>cm</xsl:attribute>
+			</xsl:element>
+		</xsl:if>
+	</xsl:template>
+
+
+	<!-- currently there have to be an explicit call of the style attribute nodes, maybe the attributes nodes have no priority only order relevant-->
+	<xsl:template name="apply-styles-and-content">
+		<xsl:param name="globalData"/>
+		<xsl:param name="footnotePrefix" />
+		<xsl:apply-templates select="@*">
+			<xsl:with-param name="globalData" select="$globalData"/>
+		</xsl:apply-templates>
+		<!-- the footnote symbol is the prefix for a footnote in the footer -->
+		<xsl:copy-of select="$footnotePrefix"/>
+		<xsl:apply-templates select="node()">
+			<xsl:with-param name="globalData" select="$globalData"/>
+		</xsl:apply-templates>
+	</xsl:template>
+
+
+	<!-- ******************* -->
+	<!-- *** References  *** -->
+	<!-- ******************* -->
+
+	<xsl:template match="text:reference-ref | text:sequence-ref | text:bookmark-ref">
+		<xsl:param name="globalData"/>
+		<xsl:if test="*|text()">
+		<xsl:element namespace="{$namespace}" name="a">
+			<xsl:attribute name="href">
+				<xsl:text>#</xsl:text>
+				<xsl:choose>
+					<xsl:when test="number(substring(@text:ref-name,1,1))">
+					<!-- Heuristic: If the first character is a number a 'a_' will be set
+						as prefix, as id have to be of type NMTOKEN -->
+						<xsl:value-of select="concat('a_',translate(@text:ref-name, '&#xA;&<>.,;: %()[]/\+', '___________________________'))"/>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:value-of select="translate(@text:ref-name, '&#xA;&<>.,;: %()[]/\+', '___________________________')"/>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:attribute>
+
+			<xsl:apply-templates select="@* | node()">
+				<xsl:with-param name="globalData" select="$globalData"/>
+			</xsl:apply-templates>
+
+		</xsl:element>
+		</xsl:if>
+	</xsl:template>
+
+    <xsl:template match="@text:name">
+		<xsl:attribute name="id">
+			<xsl:choose>
+				<xsl:when test="number(substring(.,1,1))">
+				<!-- Heuristic: If the first character is a number a 'a_' will be set
+					as prefix, as id have to be of type NMTOKEN -->
+					<xsl:value-of select="concat('a_',translate(., '&#xA;&<>.,;: %()[]/\+', '___________________________'))"/>
+				</xsl:when>
+				<xsl:otherwise>
+					<xsl:value-of select="translate(., '&#xA;&<>.,;: %()[]/\+', '___________________________')"/>
+				</xsl:otherwise>
+			</xsl:choose>
+        </xsl:attribute>
+    </xsl:template>
+
+	<xsl:template match="text:sequence">
+		<xsl:param name="globalData"/>
+
+		<xsl:element namespace="{$namespace}" name="a">
+			<xsl:apply-templates select="@*" />
+			<xsl:attribute name="id">
+				<xsl:choose>
+					<xsl:when test="number(substring(@text:ref-name,1,1))">
+					<!-- Heuristic: If the first character is a number a 'a_' will be set
+						as prefix, as id have to be of type NMTOKEN -->
+						<xsl:value-of select="concat('a_',translate(@text:ref-name, '&#xA;&<>.,;: %()[]/\+', '___________________________'))"/>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:value-of select="translate(@text:ref-name, '&#xA;&<>.,;: %()[]/\+', '___________________________')"/>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:attribute>
+		</xsl:element>
+
+		<xsl:apply-templates>
+			<xsl:with-param name="globalData" select="$globalData"/>
+		</xsl:apply-templates>
+	</xsl:template>
+
+	<xsl:template match="text:reference-mark">
+		<xsl:param name="globalData"/>
+
+		<xsl:element namespace="{$namespace}" name="a">
+			<xsl:apply-templates select="@*" />
+			<xsl:attribute name="id">
+				<xsl:choose>
+					<xsl:when test="number(substring(@text:name,1,1))">
+					<!-- Heuristic: If the first character is a number a 'a_' will be set
+						as prefix, as id have to be of type NMTOKEN -->
+						<xsl:value-of select="concat('a_',translate(@text:name, '&#xA;&<>.,;: %()[]/\+', '___________________________'))"/>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:value-of select="translate(@text:name, '&#xA;&<>.,;: %()[]/\+', '___________________________')"/>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:attribute>
+		</xsl:element>
+
+		<xsl:apply-templates>
+			<xsl:with-param name="globalData" select="$globalData"/>
+		</xsl:apply-templates>
+	</xsl:template>
+
+
+	<xsl:template match="text:reference-mark-start">
+		<xsl:param name="globalData"/>
+
+		<xsl:element namespace="{$namespace}" name="a">
+			<xsl:apply-templates select="@*" />
+		</xsl:element>
+	</xsl:template>
+
+	<xsl:template match="text:bibliography-mark">
+		<xsl:param name="globalData"/>
+
+		<xsl:element namespace="{$namespace}" name="a">
+			<xsl:apply-templates select="@* | node()">
+				<xsl:with-param name="globalData" select="$globalData"/>
+			</xsl:apply-templates>
+		</xsl:element>
+	</xsl:template>
+
+	<!-- @text:title exist only in text:bibliography-mark -->
+	<xsl:template match="@text:title">
+		<xsl:attribute name="title">
+			<xsl:value-of select="."/>
+		</xsl:attribute>
+	</xsl:template>
+
+	<!-- @text:url exist only in text:bibliography-mark -->
+	<xsl:template match="@text:url">
+		<xsl:attribute name="href">
+			<xsl:value-of select="."/>
+		</xsl:attribute>
+	</xsl:template>
+
+	<xsl:template match="text:user-defined">
+		<xsl:apply-templates/>
+	</xsl:template>
+
+
+    <xsl:template match="office:annotation">
+        <xsl:element name="span">
+            <xsl:attribute name="title">annotation</xsl:attribute>
+            <xsl:attribute name="class">annotation_style_by_filter</xsl:attribute>
+            <xsl:apply-templates select="@*" />
+            <br/>
+            <xsl:text>[ANNOTATION:</xsl:text>
+            <br/>
+            <xsl:apply-templates select="*" mode="annotation"/>
+            <xsl:text>]</xsl:text>
+        </xsl:element>
+    </xsl:template>
+
+    <xsl:template match="text:p" mode="annotation">
+        <br/>
+        <xsl:element name="span">
+            <xsl:text>NOTE: '</xsl:text>
+            <xsl:apply-templates />
+            <xsl:text>'</xsl:text>
+        </xsl:element>
+    </xsl:template>
+
+    <xsl:template match="dc:creator" mode="annotation">
+        <br/>
+        <xsl:element name="span">
+            <xsl:attribute name="title">dc:creator</xsl:attribute>
+            <xsl:text>BY '</xsl:text>
+            <xsl:apply-templates />
+            <xsl:text>'</xsl:text>
+        </xsl:element>
+    </xsl:template>
+
+    <xsl:template match="dc:date" mode="annotation">
+        <br/>
+        <xsl:element name="span">
+            <xsl:attribute name="title">dc:date</xsl:attribute>
+            <xsl:text>ON '</xsl:text>
+            <xsl:apply-templates />
+            <xsl:text>'</xsl:text>
+        </xsl:element>
+    </xsl:template>
+
+    <xsl:template match="meta:date-string" mode="annotation">
+        <br/>
+        <xsl:element name="span">
+            <xsl:attribute name="title">meta-date-string</xsl:attribute>
+            <xsl:text>META DATE '</xsl:text>
+            <xsl:apply-templates />
+            <xsl:text>'</xsl:text>
+        </xsl:element>
+    </xsl:template>
+
+
+	<!-- *************** -->
+	<!-- *** HELPER  *** -->
+	<!-- *************** -->
+
+
+	<xsl:template name="create-href">
+		<xsl:param name="href"/>
+
+		<xsl:choose>
+			<!-- internal OOo URL used in content tables -->
+			<xsl:when test="contains($href, '%7Coutline') or contains($href, '|outline')">
+				<!-- the simple workaround for content tables in a single document is to create create an anchor from every heading element
+					 work-around downside: Multiple identical headings won't refer always to the first.
+				-->
+				<xsl:text>#</xsl:text>
+				<xsl:variable name="title">
+					<xsl:apply-templates mode="concatenate"/>
+				</xsl:variable>
+
+				<xsl:value-of select="concat('a_', translate(normalize-space($title), '.,;: %()[]/\+', '_____________'))"/>
+			</xsl:when>
+			<xsl:when test="self::draw:image[office:binary-data]">
+				<xsl:text>data:image/*;base64,</xsl:text><xsl:value-of select="office:binary-data"/>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:choose>
+					 <!-- in case of packed open office document -->
+					<xsl:when test="starts-with($sourceBaseURL, 'jar:') or $isPackageFormat">
+						<xsl:choose>
+							 <!-- for images relative to open office document -->
+							<xsl:when test="starts-with($href, '../')">
+								<!-- creating an absolute http URL to the packed image file (removing the '.')-->
+								<xsl:value-of select="concat(substring-after(substring-before($sourceBaseURL, '!'), 'jar:'), '/', $href, $optionalURLSuffix)"/>
+							</xsl:when>
+							 <!-- for absolute URLs & absolute paths -->
+							<xsl:when test="contains($href, ':') or starts-with($href, '/')">
+								<xsl:value-of select="concat($href, $optionalURLSuffix)"/>
+							</xsl:when>
+							<!-- for images jared in open office document -->
+							<xsl:otherwise>
+								<xsl:value-of select="concat($sourceBaseURL, $href, $optionalURLSuffix)"/>
+							</xsl:otherwise>
+						</xsl:choose>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:choose>
+							 <!-- for absolute URLs & Paths -->
+							<xsl:when test="contains($href, ':') or starts-with($href, '/')">
+								<xsl:value-of select="concat($href, $optionalURLSuffix)"/>
+							</xsl:when>
+							 <!-- for relative URLs -->
 							 <xsl:when test="starts-with($href, '#')">
 							   <!-- intra document ref -->
 							   <xsl:value-of select="$href"/>
 							 </xsl:when>
-							<xsl:otherwise>
-								<xsl:value-of select="concat($sourceBaseURL, $href, $optionalURLSuffix)"/>
-							</xsl:otherwise>
-						</xsl:choose>
-					</xsl:otherwise>
-				</xsl:choose>
-			</xsl:otherwise>
-		</xsl:choose>
-
-	</xsl:template>
-
-	<xsl:template match="text()" mode="concatenate">
-		<xsl:value-of select="."/>
-	</xsl:template>
-	<xsl:template match="*" mode="concatenate">
-		<xsl:apply-templates mode="concatenate"/>
-	</xsl:template>
-
-
-	<!-- ******************** -->
-	<!-- *** Common Rules *** -->
-	<!-- ******************** -->
-
-	<!-- ignore / neglect the following elements -->
-	<xsl:template match="draw:custom-shape | draw:g | office:forms | text:alphabetical-index-mark | text:alphabetical-index-mark-end | text:alphabetical-index-mark-start | text:bibliography-source | text:number | text:reference-mark-end | text:sequence-decls | text:soft-page-break | text:table-of-content-source | text:tracked-changes | text:user-field-decls"/>
-
-	<!-- default template used by purpose-->
-	<xsl:template match="text:bibliography | text:change-end | text:change-start">
-		<xsl:param name="globalData"/>
-
-		<xsl:apply-templates>
-			<xsl:with-param name="globalData" select="$globalData"/>
-		</xsl:apply-templates>
-	</xsl:template>
-
-	<!-- default template for not recognized elements -->
-	<xsl:template match="*">
-		<xsl:param name="globalData"/>
-		<xsl:message>Using default element rule for ODF element '<xsl:value-of select="name()"/>'.</xsl:message>
-
-		<xsl:apply-templates>
-			<xsl:with-param name="globalData" select="$globalData"/>
-		</xsl:apply-templates>
-	</xsl:template>
-
-	<xsl:template match="@*"/>
-
-	<!-- allowing all matched text nodes -->
-	<xsl:template match="text()">
-		<xsl:value-of select="."/>
-	</xsl:template>
-
-</xsl:stylesheet>
+							<xsl:otherwise>
+								<xsl:value-of select="concat($sourceBaseURL, $href, $optionalURLSuffix)"/>
+							</xsl:otherwise>
+						</xsl:choose>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:otherwise>
+		</xsl:choose>
+
+	</xsl:template>
+
+	<xsl:template match="text()" mode="concatenate">
+		<xsl:value-of select="."/>
+	</xsl:template>
+	<xsl:template match="*" mode="concatenate">
+		<xsl:apply-templates mode="concatenate"/>
+	</xsl:template>
+
+
+	<!-- ******************** -->
+	<!-- *** Common Rules *** -->
+	<!-- ******************** -->
+
+	<!-- ignore / neglect the following elements -->
+	<xsl:template match="draw:custom-shape | draw:g | office:forms | text:alphabetical-index-mark | text:alphabetical-index-mark-end | text:alphabetical-index-mark-start | text:bibliography-source | text:number | text:reference-mark-end | text:sequence-decls | text:soft-page-break | text:table-of-content-source | text:tracked-changes | text:user-field-decls"/>
+
+	<!-- default template used by purpose-->
+	<xsl:template match="text:bibliography | text:change-end | text:change-start">
+		<xsl:param name="globalData"/>
+
+		<xsl:apply-templates>
+			<xsl:with-param name="globalData" select="$globalData"/>
+		</xsl:apply-templates>
+	</xsl:template>
+
+	<!-- default template for not recognized elements -->
+	<xsl:template match="*">
+		<xsl:param name="globalData"/>
+		<xsl:message>Using default element rule for ODF element '<xsl:value-of select="name()"/>'.</xsl:message>
+
+		<xsl:apply-templates>
+			<xsl:with-param name="globalData" select="$globalData"/>
+		</xsl:apply-templates>
+	</xsl:template>
+
+	<xsl:template match="@*"/>
+
+	<!-- allowing all matched text nodes -->
+	<xsl:template match="text()">
+		<xsl:value-of select="."/>
+	</xsl:template>
+
+</xsl:stylesheet>
diff --git filter/source/xslt/odf2xhtml/export/common/styles/style_mapping_css.xsl filter/source/xslt/odf2xhtml/export/common/styles/style_mapping_css.xsl
index d4ffff2..b99a781 100644
--- filter/source/xslt/odf2xhtml/export/common/styles/style_mapping_css.xsl
+++ filter/source/xslt/odf2xhtml/export/common/styles/style_mapping_css.xsl
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
  * This file is part of the LibreOffice project.
  *
@@ -16,76 +16,76 @@
  *   except in compliance with the License. You may obtain a copy of
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  -->
-<!--
-	For further documentation and updates visit http://xml.openoffice.org/odf2xhtml
--->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exclude-result-prefixes="chart config dc dom dr3d draw fo form math meta number office ooo oooc ooow script style svg table text xforms xlink xsd xsi">
-
-
-	<!-- *** Properties with a 'fo:' prefix *** -->
-	<xsl:template match="@fo:background-color">
-		<xsl:text>background-color:</xsl:text>
-		<xsl:value-of select="."/>
-		<xsl:text>; </xsl:text>
-	</xsl:template>
-
-	<xsl:template match="@fo:border | @fo:border-top | @fo:border-bottom | @fo:border-left | @fo:border-right">
-		<xsl:variable name="borderType" select="substring-after(name(), ':')"/>
-		<xsl:choose>
-			<xsl:when test=". = 'none'">
-				<xsl:value-of select="$borderType"/>
-				<xsl:text>-style:none; </xsl:text>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:variable name="borderWidth" select="substring-before(., ' ')"/>
-				<xsl:variable name="borderStyle" select="substring-before(substring-after(., ' '), ' ')"/>
-				<xsl:variable name="borderColor" select="substring-after(substring-after(., ' '), ' ')"/>
-
-			   <!-- More information at template 'round-up-border-width' -->
-				<xsl:variable name="borderWidthFixed">
-					<xsl:call-template name="round-up-border-width">
-						<xsl:with-param name="borderWidth" select="$borderWidth"/>
-						<xsl:with-param name="multiplier">
-							<xsl:choose>
-								<xsl:when test="$borderStyle = 'double'">3</xsl:when>
-								<xsl:otherwise>1</xsl:otherwise>
-							</xsl:choose>
-						</xsl:with-param>
-					</xsl:call-template>
-				</xsl:variable>
-
-				<xsl:value-of select="$borderType"/>
-				<xsl:text>-width:</xsl:text>
-				<xsl:choose>
-					<xsl:when test="$borderWidth = '0.05pt'">thin</xsl:when>
-					<xsl:otherwise><xsl:value-of select="$borderWidthFixed"/></xsl:otherwise>
-				</xsl:choose>
-				<xsl:text>; </xsl:text>
-				<xsl:value-of select="$borderType"/>
-				<xsl:text>-style:</xsl:text>
-				<xsl:value-of select="$borderStyle"/>
-				<xsl:text>; </xsl:text>
-				<xsl:value-of select="$borderType"/>
-				<xsl:text>-color:</xsl:text>
-				<xsl:value-of select="$borderColor"/>
-				<xsl:text>; </xsl:text>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
-
-	<!-- NOTE: Still there have to be placed a <br clear='all' /> to disable the flow!!!!-->
-	<xsl:template match="@fo:clear">
-		<xsl:text>clear:both; </xsl:text>
-	</xsl:template>
-
-	<!-- text-shadow is a CSS2 feature and yet not common used in user-agents -->
+<!--
+	For further documentation and updates visit http://xml.openoffice.org/odf2xhtml
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exclude-result-prefixes="chart config dc dom dr3d draw fo form math meta number office ooo oooc ooow script style svg table text xforms xlink xsd xsi">
+
+
+	<!-- *** Properties with a 'fo:' prefix *** -->
+	<xsl:template match="@fo:background-color">
+		<xsl:text>background-color:</xsl:text>
+		<xsl:value-of select="."/>
+		<xsl:text>; </xsl:text>
+	</xsl:template>
+
+	<xsl:template match="@fo:border | @fo:border-top | @fo:border-bottom | @fo:border-left | @fo:border-right">
+		<xsl:variable name="borderType" select="substring-after(name(), ':')"/>
+		<xsl:choose>
+			<xsl:when test=". = 'none'">
+				<xsl:value-of select="$borderType"/>
+				<xsl:text>-style:none; </xsl:text>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:variable name="borderWidth" select="substring-before(., ' ')"/>
+				<xsl:variable name="borderStyle" select="substring-before(substring-after(., ' '), ' ')"/>
+				<xsl:variable name="borderColor" select="substring-after(substring-after(., ' '), ' ')"/>
+
+			   <!-- More information at template 'round-up-border-width' -->
+				<xsl:variable name="borderWidthFixed">
+					<xsl:call-template name="round-up-border-width">
+						<xsl:with-param name="borderWidth" select="$borderWidth"/>
+						<xsl:with-param name="multiplier">
+							<xsl:choose>
+								<xsl:when test="$borderStyle = 'double'">3</xsl:when>
+								<xsl:otherwise>1</xsl:otherwise>
+							</xsl:choose>
+						</xsl:with-param>
+					</xsl:call-template>
+				</xsl:variable>
+
+				<xsl:value-of select="$borderType"/>
+				<xsl:text>-width:</xsl:text>
+				<xsl:choose>
+					<xsl:when test="$borderWidth = '0.05pt'">thin</xsl:when>
+					<xsl:otherwise><xsl:value-of select="$borderWidthFixed"/></xsl:otherwise>
+				</xsl:choose>
+				<xsl:text>; </xsl:text>
+				<xsl:value-of select="$borderType"/>
+				<xsl:text>-style:</xsl:text>
+				<xsl:value-of select="$borderStyle"/>
+				<xsl:text>; </xsl:text>
+				<xsl:value-of select="$borderType"/>
+				<xsl:text>-color:</xsl:text>
+				<xsl:value-of select="$borderColor"/>
+				<xsl:text>; </xsl:text>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+	<!-- NOTE: Still there have to be placed a <br clear='all' /> to disable the flow!!!!-->
+	<xsl:template match="@fo:clear">
+		<xsl:text>clear:both; </xsl:text>
+	</xsl:template>
+
+	<!-- text-shadow is a CSS2 feature and yet not common used in user-agents -->
 	<xsl:template match="@fo:color |@svg:font-family |@fo:font-size |@fo:font-style |@fo:font-weight |@fo:text-indent |@fo:text-shadow |@text:display">
-		<xsl:value-of select="substring-after(name(), ':')"/>
-		<xsl:text>:</xsl:text>
-		<xsl:value-of select="."/>
-		<xsl:text>; </xsl:text>
-	</xsl:template>
-
+		<xsl:value-of select="substring-after(name(), ':')"/>
+		<xsl:text>:</xsl:text>
+		<xsl:value-of select="."/>
+		<xsl:text>; </xsl:text>
+	</xsl:template>
+
 	<!-- workaround AOOO#119401 suspicious property fo:margin="100%" in paragraph style -->
 	<xsl:template match="@fo:margin[string(.) = '100%']"/>
 
@@ -93,266 +93,266 @@
 	<!-- Maps fo:padding as well fo:padding-top, fo:padding-bottom, fo:padding-left, fo:padding-right -->
 	<xsl:template match="@fo:letter-spacing | @fo:line-height | @fo:width |@fo:margin | @fo:margin-top | @fo:margin-bottom | @fo:margin-left | @fo:margin-right | @fo:padding | @fo:padding-top | @fo:padding-bottom | @fo:padding-left | @fo:padding-right">		
 		<xsl:value-of select="local-name(.)"/>
-		<xsl:text>:</xsl:text>
-		<!-- Map once erroneusly used inch shortage 'inch' to CSS shortage 'in' -->
-		<xsl:choose>
-			<xsl:when test="contains(., 'inch')">
-				<xsl:value-of select="substring-before(.,'ch')"/>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:value-of select="."/>
-			</xsl:otherwise>
-		</xsl:choose>
-		<xsl:text>; </xsl:text>
-	</xsl:template>
-
-	<xsl:template match="@fo:text-align">
-		<!-- 'important' is necessary as table cell value alignment is decided by runtime over the valuetype
-			Otherwise a table cell style-class would always be outnumbered by the run-time alignment value -->
-		<xsl:choose>
-			<xsl:when test="contains(., 'start')">
-                <xsl:choose>
-                    <xsl:when test="parent::*/@style:writing-mode and contains(parent::*/@style:writing-mode, 'rl')">
-                        <xsl:text>text-align:right ! important; </xsl:text>
-                    </xsl:when>
-                    <xsl:otherwise>
-                        <xsl:text>text-align:left ! important; </xsl:text>
-                    </xsl:otherwise>
-                </xsl:choose>
-			</xsl:when>
-			<xsl:when test="contains(., 'end')">
-                <xsl:choose>
-                    <xsl:when test="parent::*/@style:writing-mode and contains(parent::*/@style:writing-mode, 'rl')">
-                        <xsl:text>text-align:left ! important;</xsl:text>
-                    </xsl:when>
-                    <xsl:otherwise>
-                        <xsl:text>text-align:right ! important; </xsl:text>
-                    </xsl:otherwise>
-                </xsl:choose>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:text>text-align:</xsl:text>
-				<xsl:value-of select="."/>
-				<xsl:text> ! important; </xsl:text>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
-
-	<xsl:template match="@style:vertical-align">
-		<xsl:choose>
-			<xsl:when test="contains(., 'bottom')">
-				<xsl:text>vertical-align:bottom; </xsl:text>
-			</xsl:when>
-			<xsl:when test="contains(., 'middle')">
-				<xsl:text>vertical-align:middle; </xsl:text>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:text>vertical-align:top; </xsl:text>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
-
-<!-- *** Properties with a 'style:' prefix *** -->
-	<!-- NOTE: Can 'inside' | 'from-inside' better be handled:
-	<!ATTLIST * style:horizontal-pos (from-left|left|center|right|from-inside|inside|outside)#IMPLIED>-->
-	<xsl:template match="@style:horizontal-pos">
-		<xsl:choose>
-			<xsl:when test=".='left'">
-				<xsl:text>text-align:left; </xsl:text>
-			</xsl:when>
-			<xsl:when test=". = 'right'">
-				<xsl:text>text-align:right; </xsl:text>
-			</xsl:when>
-			<xsl:when test=".='center'">
-				<xsl:text>text-align:center; </xsl:text>
-			</xsl:when>
-			<!-- NOTE: currently other values are not used.
-				If the property value is from-left or from-inside,
-				the svg:x attribute associated with the frame element specifies
-				the horizontal position of the frame.
-				Otherwise the svg:x attribute is ignored for text documents.
-			-->
-		</xsl:choose>
-	</xsl:template>
-
-	<xsl:template match="@style:column-width">
-		<xsl:text>width:</xsl:text>
-		<xsl:choose>
-			<!-- changing the distance measure: inch to in -->
-			<xsl:when test="contains(., 'inch')">
-				<xsl:value-of select="substring-before(.,'ch')"/>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:value-of select="."/>
-			</xsl:otherwise>
-		</xsl:choose>
-		<xsl:text>; </xsl:text>
-	</xsl:template>
-
-	<xsl:template match="@style:text-underline-style">
-		<xsl:text>text-decoration:</xsl:text>
-		<xsl:choose>
-			<!-- changing the distance measure: inch to in -->
-			<xsl:when test=".='none'">
-				<xsl:text>none ! important</xsl:text>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:text>underline</xsl:text>
-			</xsl:otherwise>
-		</xsl:choose>
-		<xsl:text>; </xsl:text>
-	</xsl:template>
-
-	<xsl:template match="@style:font-name">
-		<xsl:param name="globalData" />
-
-		<xsl:text>font-family:</xsl:text>
-		<xsl:variable name="content" select="."/>
-		<xsl:variable name="quote">'</xsl:variable>
-		<xsl:variable name="fontName" select="$globalData/office:font-face-decls/style:font-face[@style:name=$content]/@svg:font-family" />
-		<xsl:value-of select="translate($fontName, $quote, '')"/>
-		<xsl:text>; </xsl:text>
-	</xsl:template>
-
-	<xsl:template match="@style:row-height">
-		<xsl:text>height:</xsl:text>
-		<xsl:choose>
-			<!-- changing the distance measure: inch to in -->
-			<xsl:when test="contains(., 'inch')">
-				<xsl:value-of select="substring-before(.,'ch')"/>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:value-of select="."/>
-			</xsl:otherwise>
-		</xsl:choose>
-		<xsl:text>; </xsl:text>
-	</xsl:template>
-
-	<xsl:template match="@svg:strikethrough-position">
-		<xsl:if test="not(.='none')">
-			<xsl:text>text-decoration:line-through; </xsl:text>
-		</xsl:if>
-	</xsl:template>
-	<xsl:template match="@style:text-position">
-		<xsl:if test="contains(., 'sub')">
-			<xsl:text>vertical-align:sub; </xsl:text>
-			<xsl:if test="contains(., '%')">
-				<xsl:text>font-size:</xsl:text>
-				<xsl:value-of select="substring-after(., 'sub ')"/>
-				<xsl:text>;</xsl:text>
-			</xsl:if>
-		</xsl:if>
-		<xsl:if test="contains(., 'super')">
-			<xsl:text>vertical-align:super; </xsl:text>
-			<xsl:if test="contains(., '%')">
-				<xsl:text>font-size:</xsl:text>
-				<xsl:value-of select="substring-after(., 'super ')"/>
-				<xsl:text>;</xsl:text>
-			</xsl:if>
-		</xsl:if>
-	</xsl:template>
-
-	<xsl:template match="@style:vertical-pos">
-		<xsl:choose>
-			<xsl:when test=".='from-top'">
-				<xsl:text>vertical-align:top; </xsl:text>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:text>vertical-align:</xsl:text>
-				<xsl:value-of select="."/>
-				<xsl:text>; </xsl:text>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
-
-	<xsl:template match="@style:width">
-		<xsl:text>width:</xsl:text>
-		<xsl:choose>
-			<!-- changing the distance measure: inch to in -->
-			<xsl:when test="contains(., 'inch')">
-				<xsl:value-of select="substring-before(.,'ch')"/>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:value-of select="."/>
-			</xsl:otherwise>
-		</xsl:choose>
-		<xsl:text>; </xsl:text>
-	</xsl:template>
-	<xsl:template match="@style:wrap">
-		<xsl:choose>
-			<xsl:when test=".='left'">
-				<xsl:text>float:right; </xsl:text>
-			</xsl:when>
-			<xsl:when test=".='right'">
-				<xsl:text>float:left; </xsl:text>
-			</xsl:when>
-		</xsl:choose>
-	</xsl:template>
-	<xsl:template match="@style:writing-mode">
-        <xsl:text>writing-mode:</xsl:text>
-        <xsl:value-of select="."/>
-        <xsl:text>; </xsl:text>
-	</xsl:template>  
-    <!-- *** Properties with a no 'fo:' or 'style:' prefix *** -->
-	<xsl:template match="@table:align">
-		<xsl:choose>
-			<xsl:when test=".='left'">
-				<xsl:if test="not(../@fo:margin-left)">margin-left:0px; </xsl:if>
-				<xsl:text>margin-right:auto;</xsl:text></xsl:when>
-			<xsl:when test=".='right'">
-				<xsl:text>margin-left:auto</xsl:text>
-				<xsl:if test="not(../@fo:margin-right)">
-					; margin-right: 0px;
-				</xsl:if>
-			</xsl:when>
-			<xsl:when test=".='center'">
-				margin-left:auto;margin-right:auto;
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:text>float:none; </xsl:text>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
-
-	<xsl:template match="style:background-image">
-		<xsl:text>background-image:url(</xsl:text>
-		<xsl:value-of select="@xlink:href"/>
-		<xsl:text>); </xsl:text>
-		<xsl:choose>
-			<xsl:when test="@style:repeat = 'repeat'">
-				<xsl:text>background-repeat:repeat; </xsl:text>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:text>background-repeat:no-repeat; </xsl:text>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
-
-	<!-- Changing border width measure to cm and enlarging border-width to the Mozilla browser(1.7)
-		 visible minimum width
-			- 0.0133cm for solid style
-			- 0.0399cm for double style
-		 as there are three border lines painted -->
-	<xsl:template name="round-up-border-width">
-		<xsl:param name="borderWidth"/>
-		<xsl:param name="multiplier"/>
-
-		<xsl:variable name="borderWidthByCentimeter">
-			<xsl:call-template name="convert2cm">
-				<xsl:with-param name="value" select="$borderWidth"/>
-			</xsl:call-template>
-		</xsl:variable>
-		<xsl:variable name="minimalBorderWidth" select="0.0133 * $multiplier"/>
-		<xsl:choose>
-			<xsl:when test="number($borderWidthByCentimeter) < $minimalBorderWidth">
-				<xsl:value-of select="$minimalBorderWidth"/>
-				<xsl:text>cm</xsl:text>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:value-of select="$borderWidthByCentimeter"/>
-				<xsl:text>cm</xsl:text>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
-</xsl:stylesheet>
-
+		<xsl:text>:</xsl:text>
+		<!-- Map once erroneusly used inch shortage 'inch' to CSS shortage 'in' -->
+		<xsl:choose>
+			<xsl:when test="contains(., 'inch')">
+				<xsl:value-of select="substring-before(.,'ch')"/>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:value-of select="."/>
+			</xsl:otherwise>
+		</xsl:choose>
+		<xsl:text>; </xsl:text>
+	</xsl:template>
+
+	<xsl:template match="@fo:text-align">
+		<!-- 'important' is necessary as table cell value alignment is decided by runtime over the valuetype
+			Otherwise a table cell style-class would always be outnumbered by the run-time alignment value -->
+		<xsl:choose>
+			<xsl:when test="contains(., 'start')">
+                <xsl:choose>
+                    <xsl:when test="parent::*/@style:writing-mode and contains(parent::*/@style:writing-mode, 'rl')">
+                        <xsl:text>text-align:right ! important; </xsl:text>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <xsl:text>text-align:left ! important; </xsl:text>
+                    </xsl:otherwise>
+                </xsl:choose>
+			</xsl:when>
+			<xsl:when test="contains(., 'end')">
+                <xsl:choose>
+                    <xsl:when test="parent::*/@style:writing-mode and contains(parent::*/@style:writing-mode, 'rl')">
+                        <xsl:text>text-align:left ! important;</xsl:text>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <xsl:text>text-align:right ! important; </xsl:text>
+                    </xsl:otherwise>
+                </xsl:choose>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:text>text-align:</xsl:text>
+				<xsl:value-of select="."/>
+				<xsl:text> ! important; </xsl:text>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+	<xsl:template match="@style:vertical-align">
+		<xsl:choose>
+			<xsl:when test="contains(., 'bottom')">
+				<xsl:text>vertical-align:bottom; </xsl:text>
+			</xsl:when>
+			<xsl:when test="contains(., 'middle')">
+				<xsl:text>vertical-align:middle; </xsl:text>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:text>vertical-align:top; </xsl:text>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+<!-- *** Properties with a 'style:' prefix *** -->
+	<!-- NOTE: Can 'inside' | 'from-inside' better be handled:
+	<!ATTLIST * style:horizontal-pos (from-left|left|center|right|from-inside|inside|outside)#IMPLIED>-->
+	<xsl:template match="@style:horizontal-pos">
+		<xsl:choose>
+			<xsl:when test=".='left'">
+				<xsl:text>text-align:left; </xsl:text>
+			</xsl:when>
+			<xsl:when test=". = 'right'">
+				<xsl:text>text-align:right; </xsl:text>
+			</xsl:when>
+			<xsl:when test=".='center'">
+				<xsl:text>text-align:center; </xsl:text>
+			</xsl:when>
+			<!-- NOTE: currently other values are not used.
+				If the property value is from-left or from-inside,
+				the svg:x attribute associated with the frame element specifies
+				the horizontal position of the frame.
+				Otherwise the svg:x attribute is ignored for text documents.
+			-->
+		</xsl:choose>
+	</xsl:template>
+
+	<xsl:template match="@style:column-width">
+		<xsl:text>width:</xsl:text>
+		<xsl:choose>
+			<!-- changing the distance measure: inch to in -->
+			<xsl:when test="contains(., 'inch')">
+				<xsl:value-of select="substring-before(.,'ch')"/>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:value-of select="."/>
+			</xsl:otherwise>
+		</xsl:choose>
+		<xsl:text>; </xsl:text>
+	</xsl:template>
+
+	<xsl:template match="@style:text-underline-style">
+		<xsl:text>text-decoration:</xsl:text>
+		<xsl:choose>
+			<!-- changing the distance measure: inch to in -->
+			<xsl:when test=".='none'">
+				<xsl:text>none ! important</xsl:text>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:text>underline</xsl:text>
+			</xsl:otherwise>
+		</xsl:choose>
+		<xsl:text>; </xsl:text>
+	</xsl:template>
+
+	<xsl:template match="@style:font-name">
+		<xsl:param name="globalData" />
+
+		<xsl:text>font-family:</xsl:text>
+		<xsl:variable name="content" select="."/>
+		<xsl:variable name="quote">'</xsl:variable>
+		<xsl:variable name="fontName" select="$globalData/office:font-face-decls/style:font-face[@style:name=$content]/@svg:font-family" />
+		<xsl:value-of select="translate($fontName, $quote, '')"/>
+		<xsl:text>; </xsl:text>
+	</xsl:template>
+
+	<xsl:template match="@style:row-height">
+		<xsl:text>height:</xsl:text>
+		<xsl:choose>
+			<!-- changing the distance measure: inch to in -->
+			<xsl:when test="contains(., 'inch')">
+				<xsl:value-of select="substring-before(.,'ch')"/>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:value-of select="."/>
+			</xsl:otherwise>
+		</xsl:choose>
+		<xsl:text>; </xsl:text>
+	</xsl:template>
+
+	<xsl:template match="@svg:strikethrough-position">
+		<xsl:if test="not(.='none')">
+			<xsl:text>text-decoration:line-through; </xsl:text>
+		</xsl:if>
+	</xsl:template>
+	<xsl:template match="@style:text-position">
+		<xsl:if test="contains(., 'sub')">
+			<xsl:text>vertical-align:sub; </xsl:text>
+			<xsl:if test="contains(., '%')">
+				<xsl:text>font-size:</xsl:text>
+				<xsl:value-of select="substring-after(., 'sub ')"/>
+				<xsl:text>;</xsl:text>
+			</xsl:if>
+		</xsl:if>
+		<xsl:if test="contains(., 'super')">
+			<xsl:text>vertical-align:super; </xsl:text>
+			<xsl:if test="contains(., '%')">
+				<xsl:text>font-size:</xsl:text>
+				<xsl:value-of select="substring-after(., 'super ')"/>
+				<xsl:text>;</xsl:text>
+			</xsl:if>
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template match="@style:vertical-pos">
+		<xsl:choose>
+			<xsl:when test=".='from-top'">
+				<xsl:text>vertical-align:top; </xsl:text>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:text>vertical-align:</xsl:text>
+				<xsl:value-of select="."/>
+				<xsl:text>; </xsl:text>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+	<xsl:template match="@style:width">
+		<xsl:text>width:</xsl:text>
+		<xsl:choose>
+			<!-- changing the distance measure: inch to in -->
+			<xsl:when test="contains(., 'inch')">
+				<xsl:value-of select="substring-before(.,'ch')"/>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:value-of select="."/>
+			</xsl:otherwise>
+		</xsl:choose>
+		<xsl:text>; </xsl:text>
+	</xsl:template>
+	<xsl:template match="@style:wrap">
+		<xsl:choose>
+			<xsl:when test=".='left'">
+				<xsl:text>float:right; </xsl:text>
+			</xsl:when>
+			<xsl:when test=".='right'">
+				<xsl:text>float:left; </xsl:text>
+			</xsl:when>
+		</xsl:choose>
+	</xsl:template>
+	<xsl:template match="@style:writing-mode">
+        <xsl:text>writing-mode:</xsl:text>
+        <xsl:value-of select="."/>
+        <xsl:text>; </xsl:text>
+	</xsl:template>
+    <!-- *** Properties with a no 'fo:' or 'style:' prefix *** -->
+	<xsl:template match="@table:align">
+		<xsl:choose>
+			<xsl:when test=".='left'">
+				<xsl:if test="not(../@fo:margin-left)">margin-left:0px; </xsl:if>
+				<xsl:text>margin-right:auto;</xsl:text></xsl:when>
+			<xsl:when test=".='right'">
+				<xsl:text>margin-left:auto</xsl:text>
+				<xsl:if test="not(../@fo:margin-right)">
+					; margin-right: 0px;
+				</xsl:if>
+			</xsl:when>
+			<xsl:when test=".='center'">
+				margin-left:auto;margin-right:auto;
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:text>float:none; </xsl:text>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+	<xsl:template match="style:background-image">
+		<xsl:text>background-image:url(</xsl:text>
+		<xsl:value-of select="@xlink:href"/>
+		<xsl:text>); </xsl:text>
+		<xsl:choose>
+			<xsl:when test="@style:repeat = 'repeat'">
+				<xsl:text>background-repeat:repeat; </xsl:text>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:text>background-repeat:no-repeat; </xsl:text>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+	<!-- Changing border width measure to cm and enlarging border-width to the Mozilla browser(1.7)
+		 visible minimum width
+			- 0.0133cm for solid style
+			- 0.0399cm for double style
+		 as there are three border lines painted -->
+	<xsl:template name="round-up-border-width">
+		<xsl:param name="borderWidth"/>
+		<xsl:param name="multiplier"/>
+
+		<xsl:variable name="borderWidthByCentimeter">
+			<xsl:call-template name="convert2cm">
+				<xsl:with-param name="value" select="$borderWidth"/>
+			</xsl:call-template>
+		</xsl:variable>
+		<xsl:variable name="minimalBorderWidth" select="0.0133 * $multiplier"/>
+		<xsl:choose>
+			<xsl:when test="number($borderWidthByCentimeter) < $minimalBorderWidth">
+				<xsl:value-of select="$minimalBorderWidth"/>
+				<xsl:text>cm</xsl:text>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:value-of select="$borderWidthByCentimeter"/>
+				<xsl:text>cm</xsl:text>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+</xsl:stylesheet>
+
-- 
1.8.5.1



More information about the LibreOffice mailing list