diff options
| author | Caolán McNamara <caolanm@redhat.com> | 2012-07-13 09:49:02 +0100 | 
|---|---|---|
| committer | Stephan Bergmann <sbergman@redhat.com> | 2012-07-13 11:14:20 +0200 | 
| commit | 5e3c37c8a3b567cf3d8c9a47b37155e3c2ffefb9 (patch) | |
| tree | 6c65daf2197dbb1ed2642b1bec951ba2406fb5f6 | |
| parent | e10695d407cd882a4e95fd64a6848606017607b4 (diff) | |
Resolves: fdo#52020 ICU breakiterator not used for Khmer
Change-Id: I4c99129cabe70f17aa223cf8ec0ae1529188b6b7
(cherry picked from commit 8ad1d4443e67784a8c0d3c1a3a72f089cb0cd3ec)
Signed-off-by: Stephan Bergmann <sbergman@redhat.com>
| -rw-r--r-- | i18npool/qa/cppunit/test_breakiterator.cxx | 24 | ||||
| -rw-r--r-- | i18npool/source/breakiterator/breakiterator_unicode.cxx | 2 | 
2 files changed, 25 insertions, 1 deletions
diff --git a/i18npool/qa/cppunit/test_breakiterator.cxx b/i18npool/qa/cppunit/test_breakiterator.cxx index ffd590c0c05a..a8a050aacdae 100644 --- a/i18npool/qa/cppunit/test_breakiterator.cxx +++ b/i18npool/qa/cppunit/test_breakiterator.cxx @@ -62,6 +62,7 @@ public:  #if TODO      void testNorthernThai();  #endif +    void testKhmer();      CPPUNIT_TEST_SUITE(TestBreakIterator);      CPPUNIT_TEST(testLineBreaking); @@ -72,6 +73,7 @@ public:  #if TODO      CPPUNIT_TEST(testNorthernThai);  #endif +    CPPUNIT_TEST(testKhmer);      CPPUNIT_TEST_SUITE_END();  private:      uno::Reference<i18n::XBreakIterator> m_xBreak; @@ -344,6 +346,28 @@ void TestBreakIterator::testNorthernThai()  }  #endif +//A test to ensure that our khmer word boundary detection is useful +//https://bugs.freedesktop.org/show_bug.cgi?id=52020 +void TestBreakIterator::testKhmer() +{ +    lang::Locale aLocale; +    aLocale.Language = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("km")); +    aLocale.Country = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("KH")); + +    const sal_Unicode KHMER1[] = { 0x17B2, 0x17D2, 0x1799, 0x1782, 0x17C1 }; + +    ::rtl::OUString aTest(KHMER1, SAL_N_ELEMENTS(KHMER1)); +    i18n::Boundary aBounds = m_xBreak->getWordBoundary(aTest, 0, aLocale, +        i18n::WordType::DICTIONARY_WORD, true); + +    CPPUNIT_ASSERT(aBounds.startPos == 0 && aBounds.endPos == 3); + +    aBounds = m_xBreak->getWordBoundary(aTest, aBounds.endPos, aLocale, +        i18n::WordType::DICTIONARY_WORD, true); + +    CPPUNIT_ASSERT(aBounds.startPos == 3 && aBounds.endPos == 5); +} +  void TestBreakIterator::setUp()  {      BootstrapFixtureBase::setUp(); diff --git a/i18npool/source/breakiterator/breakiterator_unicode.cxx b/i18npool/source/breakiterator/breakiterator_unicode.cxx index 34e6918f5182..e90c888e6816 100644 --- a/i18npool/source/breakiterator/breakiterator_unicode.cxx +++ b/i18npool/source/breakiterator/breakiterator_unicode.cxx @@ -135,7 +135,7 @@ void SAL_CALL BreakIterator_Unicode::loadICUBreakIterator(const com::sun::star::                  rbi = new OOoRuleBasedBreakIterator(udata_open("OpenOffice", "brk",                      OUStringToOString(breakRules[breakType], RTL_TEXTENCODING_ASCII_US).getStr(), &status), status);              } -            else if ( rLocale.Language != "th" ) //use icu's breakiterator for Thai +            else if (rLocale.Language != "th" && rLocale.Language != "km") //use icu's breakiterator for Thai and Khmer              {                  status = U_ZERO_ERROR;                  OStringBuffer aUDName(64);  | 
