From 4d003b92fa632d38909543b7317ceb75c96beeac Mon Sep 17 00:00:00 2001
From: Julien Nabet <serval2412@yahoo.fr>
Date: Mon, 21 Jul 2014 11:36:27 +0200
Subject: [PATCH 049/137] Resolves fdo#81581: Mediawiki doesn't recognize
underlining
Cherry-picked from b8f4db5bad245c2e340b3217b10df994785eecd3
Change-Id: I27ec27bd733e5161bbd18ba7cf813daa3ac6c089
Reviewed-on: https://gerrit.libreoffice.org/10438
Reviewed-by: Andras Timar <andras.timar@collabora.com>
Tested-by: Andras Timar <andras.timar@collabora.com>
---
swext/mediawiki/src/filter/odt2mediawiki.xsl | 59 ++++++++++++++++++++++++----
1 file changed, 51 insertions(+), 8 deletions(-)
diff --git a/swext/mediawiki/src/filter/odt2mediawiki.xsl b/swext/mediawiki/src/filter/odt2mediawiki.xsl
index 64474b3..1205536 100644
--- a/swext/mediawiki/src/filter/odt2mediawiki.xsl
+++ b/swext/mediawiki/src/filter/odt2mediawiki.xsl
@@ -118,23 +118,26 @@
<!-- Italic character style. -->
<variable name="ITALIC_BIT" select="2"/>
+ <!-- Underline character style. -->
+ <variable name="UNDERLINE_BIT" select="4"/>
+
<!-- Subscript character style. -->
- <variable name="SUBSCRIPT_BIT" select="4"/>
+ <variable name="SUBSCRIPT_BIT" select="8"/>
<!-- Superscript character style. -->
- <variable name="SUPERSCRIPT_BIT" select="8"/>
+ <variable name="SUPERSCRIPT_BIT" select="16"/>
<!-- Typewriter character style. -->
- <variable name="TYPEWRITER_BIT" select="16"/>
+ <variable name="TYPEWRITER_BIT" select="32"/>
<!-- Preformatted text paragraph style. -->
- <variable name="CODE_BIT" select="32"/>
+ <variable name="CODE_BIT" select="64"/>
<!-- Centered paragraph style. -->
- <variable name="CENTER_BIT" select="64"/>
+ <variable name="CENTER_BIT" select="128"/>
<!-- Right aligned paragraph style. -->
- <variable name="RIGHT_BIT" select="128"/>
+ <variable name="RIGHT_BIT" select="256"/>
<!-- Constant defining the empty style. -->
<variable name="NO_STYLE" select="0"/>
@@ -976,6 +979,8 @@
select="($style mod (2 * $BOLD_BIT)) != 0"/>
<variable name="italic"
select="($style mod (2 * $ITALIC_BIT)) - ($style mod ($ITALIC_BIT)) != 0"/>
+ <variable name="underline"
+ select="($style mod (2 * $UNDERLINE_BIT)) - ($style mod ($UNDERLINE_BIT)) != 0"/>
<variable name="superscript"
select="($style mod (2 * $SUPERSCRIPT_BIT)) - ($style mod ($SUPERSCRIPT_BIT)) != 0"/>
<variable name="subscript"
@@ -989,6 +994,8 @@
select="($style-left mod (2 * $BOLD_BIT)) != 0"/>
<variable name="italic-left"
select="($style-left mod (2 * $ITALIC_BIT)) - ($style-left mod ($ITALIC_BIT)) != 0"/>
+ <variable name="underline-left"
+ select="($style-left mod (2 * $UNDERLINE_BIT)) - ($style-left mod ($UNDERLINE_BIT)) != 0"/>
<variable name="superscript-left"
select="($style-left mod (2 * $SUPERSCRIPT_BIT)) - ($style-left mod ($SUPERSCRIPT_BIT)) != 0"/>
<variable name="subscript-left"
@@ -1000,6 +1007,8 @@
select="($style-right mod (2 * $BOLD_BIT)) != 0"/>
<variable name="italic-right"
select="($style-right mod (2 * $ITALIC_BIT)) - ($style-right mod ($ITALIC_BIT)) != 0"/>
+ <variable name="underline-right"
+ select="($style-right mod (2 * $UNDERLINE_BIT)) - ($style-right mod ($UNDERLINE_BIT)) != 0"/>
<variable name="superscript-right"
select="($style-right mod (2 * $SUPERSCRIPT_BIT)) - ($style-right mod ($SUPERSCRIPT_BIT)) != 0"/>
<variable name="subscript-right"
@@ -1027,6 +1036,9 @@
<if test="not($code) and $typewriter and not($typewriter-left)">
<text><tt></text>
</if>
+ <if test="$underline and not($underline-left)">
+ <text><u></text>
+ </if>
<if test="$bold and not($bold-left)">
<text>'''</text>
</if>
@@ -1044,6 +1056,9 @@
<if test="$bold and not($bold-right)">
<text>'''</text>
</if>
+ <if test="$underline and not($underline-right)">
+ <text></u></text>
+ </if>
<if test="not($code) and $typewriter and not($typewriter-right)">
<text></tt></text>
</if>
@@ -1255,6 +1270,8 @@
select="($style-mask mod (2 * $BOLD_BIT)) = 0"/>
<variable name="italic-requested"
select="($style-mask mod (2 * $ITALIC_BIT)) - ($style-mask mod ($ITALIC_BIT)) = 0"/>
+ <variable name="underline-requested"
+ select="($style-mask mod (2 * $UNDERLINE_BIT)) - ($style-mask mod ($UNDERLINE_BIT)) = 0"/>
<variable name="superscript-requested"
select="($style-mask mod (2 * $SUPERSCRIPT_BIT)) - ($style-mask mod ($SUPERSCRIPT_BIT)) = 0"/>
<variable name="subscript-requested"
@@ -1321,6 +1338,32 @@
</choose>
</variable>
+ <variable name="underline-style">
+ <choose>
+ <when test="$underline-requested and boolean($text-properties/@style:text-underline-style='solid')">
+ <!-- Underline found in current style. -->
+ <value-of select="$UNDERLINE_BIT"/>
+ </when>
+ <otherwise>
+ <value-of select="$NO_STYLE"/>
+ </otherwise>
+ </choose>
+ </variable>
+ <variable name="underline-mask">
+ <choose>
+ <when test="$underline-requested and boolean($text-properties/@style:text-underline-style='solid')">
+ <!--
+ Other value than "underline" means that the character style is not
+ underline and no parent style must be considered.
+ -->
+ <value-of select="$UNDERLINE_BIT"/>
+ </when>
+ <otherwise>
+ <value-of select="$NO_STYLE"/>
+ </otherwise>
+ </choose>
+ </variable>
+
<variable name="superscript-style">
<choose>
<when test="$superscript-requested and contains($text-properties/@style:text-position, 'super')">
@@ -1473,9 +1516,9 @@
guaranteed to be disjoint, therefore, addition can be use instead
of bitwise or (which is missing in XPath). -->
<variable name="updated-style"
- select="$style-set + $bold-style + $italic-style + $superscript-style + $subscript-style + $code-style + $typewriter-style + $center-style + $right-style"/>
+ select="$style-set + $bold-style + $italic-style + $underline-style + $superscript-style + $subscript-style + $code-style + $typewriter-style + $center-style + $right-style"/>
<variable name="updated-mask"
- select="$style-mask + $bold-mask + $italic-mask + $superscript-mask + $subscript-mask + $code-mask + $typewriter-mask + $center-mask + $right-mask"/>
+ select="$style-mask + $bold-mask + $italic-mask + $underline-mask + $superscript-mask + $subscript-mask + $code-mask + $typewriter-mask + $center-mask + $right-mask"/>
<!-- Inspect linked and nested styles. -->
<choose>
--
1.9.3