diff options
author | Nick Wellnhofer <wellnhofer@aevum.de> | 2014-10-04 12:16:59 +0200 |
---|---|---|
committer | Nick Wellnhofer <wellnhofer@aevum.de> | 2014-10-04 12:19:30 +0200 |
commit | ec39a33e02d3b337f3f25602659a33d4b30aa31a (patch) | |
tree | 5640cf4372e40cc1a03875fda9f3a3a1eae00221 | |
parent | de1fca613ed3a8ab57bb3c83ff71538bd8b347d0 (diff) | |
download | libxslt-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.c | 2 | ||||
-rw-r--r-- | tests/exslt/strings/align.1.out | 8 | ||||
-rw-r--r-- | tests/exslt/strings/align.1.xml | 9 | ||||
-rw-r--r-- | tests/exslt/strings/align.1.xsl | 22 |
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> + |