summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Wellnhofer <wellnhofer@aevum.de>2014-10-04 12:16:59 +0200
committerNick Wellnhofer <wellnhofer@aevum.de>2014-10-04 12:19:30 +0200
commitec39a33e02d3b337f3f25602659a33d4b30aa31a (patch)
tree5640cf4372e40cc1a03875fda9f3a3a1eae00221
parentde1fca613ed3a8ab57bb3c83ff71538bd8b347d0 (diff)
downloadlibxslt-ec39a33e02d3b337f3f25602659a33d4b30aa31a.tar.gz
Fix str:align with UTF-8 strings
The offset computation for left-aligned strings containing UTF-8 was wrong. Fixes bug #588544: https://bugzilla.gnome.org/show_bug.cgi?id=588544 Also add some test cases.
-rw-r--r--libexslt/strings.c2
-rw-r--r--tests/exslt/strings/align.1.out8
-rw-r--r--tests/exslt/strings/align.1.xml9
-rw-r--r--tests/exslt/strings/align.1.xsl22
4 files changed, 40 insertions, 1 deletions
diff --git a/libexslt/strings.c b/libexslt/strings.c
index 3c702add..f5f2d3c5 100644
--- a/libexslt/strings.c
+++ b/libexslt/strings.c
@@ -447,7 +447,7 @@ exsltStrAlignFunction (xmlXPathParserContextPtr ctxt, int nargs) {
} else {
int str_s;
- str_s = xmlStrlen (str);
+ str_s = xmlUTF8Strsize(padding, str_l);
ret = xmlStrdup (str);
ret = xmlStrcat (ret, padding + str_s);
}
diff --git a/tests/exslt/strings/align.1.out b/tests/exslt/strings/align.1.out
new file mode 100644
index 00000000..0b639e5b
--- /dev/null
+++ b/tests/exslt/strings/align.1.out
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<test-results>
+ <test-result>déja vu––––––</test-result>
+ <test-result>–––déja vu–––</test-result>
+ <test-result>––––––déja vu</test-result>
+ <test-result>déja</test-result>
+ <test-result>déja vu</test-result>
+</test-results>
diff --git a/tests/exslt/strings/align.1.xml b/tests/exslt/strings/align.1.xml
new file mode 100644
index 00000000..f32b2dcd
--- /dev/null
+++ b/tests/exslt/strings/align.1.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<test-cases>
+ <test-case string="déja vu" padding="–––––––––––––" alignment="left"/>
+ <test-case string="déja vu" padding="–––––––––––––" alignment="center"/>
+ <test-case string="déja vu" padding="–––––––––––––" alignment="right"/>
+ <test-case string="déja vu" padding="––––" alignment="left"/>
+ <test-case string="déja vu" padding="–––––––" alignment="left"/>
+</test-cases>
+
diff --git a/tests/exslt/strings/align.1.xsl b/tests/exslt/strings/align.1.xsl
new file mode 100644
index 00000000..3de033d7
--- /dev/null
+++ b/tests/exslt/strings/align.1.xsl
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:str="http://exslt.org/strings"
+ exclude-result-prefixes="str">
+
+<xsl:output indent="yes"/>
+
+<xsl:template match="test-cases">
+ <test-results>
+ <xsl:apply-templates select="test-case"/>
+ </test-results>
+</xsl:template>
+
+<xsl:template match="test-case">
+ <test-result>
+ <xsl:value-of select="str:align(@string, @padding, @alignment)"/>
+ </test-result>
+</xsl:template>
+
+</xsl:stylesheet>
+