Kaydet (Commit) 7ec5ba47 authored tarafından Mark Hung's avatar Mark Hung Kaydeden (comit) Michael Stahl

Fix FastSaxSerializer::write() for non-BMP unicode characters.

Change-Id: I6ee9d028813c970b9ac5b9f0574af932e73111bd
Reviewed-on: https://gerrit.libreoffice.org/21293Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMichael Stahl <mstahl@redhat.com>
üst cbc0c1b6
...@@ -94,29 +94,8 @@ namespace sax_fastparser { ...@@ -94,29 +94,8 @@ namespace sax_fastparser {
void FastSaxSerializer::write( const OUString& sOutput, bool bEscape ) void FastSaxSerializer::write( const OUString& sOutput, bool bEscape )
{ {
const sal_Int32 nLength = sOutput.getLength(); write( sOutput.toUtf8(), bEscape );
for (sal_Int32 i = 0; i < nLength; ++i)
{
const sal_Unicode cUnicode = sOutput[ i ];
const char cChar = cUnicode;
if (cUnicode & 0xff80)
{
write( OString(&cUnicode, 1, RTL_TEXTENCODING_UTF8) );
}
else if(bEscape) switch( cChar )
{
case '<': writeBytes( "&lt;", 4 ); break;
case '>': writeBytes( "&gt;", 4 ); break;
case '&': writeBytes( "&amp;", 5 ); break;
case '\'': writeBytes( "&apos;", 6 ); break;
case '"': writeBytes( "&quot;", 6 ); break;
case '\n': writeBytes( "&#10;", 5 ); break;
case '\r': writeBytes( "&#13;", 5 ); break;
default: writeBytes( &cChar, 1 ); break;
}
else
writeBytes( &cChar, 1 );
}
} }
void FastSaxSerializer::write( const OString& sOutput, bool bEscape ) void FastSaxSerializer::write( const OString& sOutput, bool bEscape )
......
...@@ -1011,6 +1011,15 @@ DECLARE_OOXMLEXPORT_TEST(testOO106020, "ooo106020-1.odt") ...@@ -1011,6 +1011,15 @@ DECLARE_OOXMLEXPORT_TEST(testOO106020, "ooo106020-1.odt")
assertXPath(pXmlDoc, "//w:tbl", 1); assertXPath(pXmlDoc, "//w:tbl", 1);
} }
DECLARE_OOXMLEXPORT_TEST(testNonBMPChar, "nonbmpchar.docx")
{
sal_uInt32 nCh = 0x24b62;
OUString aExpected( &nCh, 1);
// Assert that UTF8 encoded non-BMP Unicode character is correct
uno::Reference<text::XTextRange> xTextRange1 = getRun(getParagraph(1), 1);
CPPUNIT_ASSERT_EQUAL(aExpected, xTextRange1->getString());
}
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment