drop custom Indic grapheme rules and rely on contemporary icu defaults
similar to...
commit 8578a1c9d1
Date: Thu Nov 26 15:47:26 2020 +0200
tdf#138481: Trust the built-in break iterator character data in ICU
Don't use our own char.txt.
the char_in.txt hasn't really changed since 2008 and is woefully out of
date at this point.
we have cppunit tests for the only documented bug that touched
char_in.txt, #i111152# and tdf#40292, for tdf#40292 change the test
to test what was actually reported as a bug
Change-Id: I8e35b102b0a46d2c63e47e055e472892f65022ac
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106763
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
This commit is contained in:
@@ -42,15 +42,7 @@ $(i18npool_BIDIR)/dict_%.cxx : \
|
||||
|
||||
endif
|
||||
|
||||
# Do we want the char_in.brk data? It's for languages in India (and bn_BD)
|
||||
ifeq ($(WITH_LOCALES),)
|
||||
i18npool_breakiterator_want_in=TRUE
|
||||
else ifneq ($(filter bn bn_% gu gu_% hi hi_% kn kn_% ml ml_% or or_% pa pa_% ta ta_% te te_%,$(WITH_LOCALES)),)
|
||||
i18npool_breakiterator_want_in=TRUE
|
||||
endif
|
||||
|
||||
i18npool_BRKTXTS := \
|
||||
$(if $(i18npool_breakiterator_want_in),char_in.brk) \
|
||||
count_word.brk \
|
||||
$(call gb_Helper_optional_locale,he,dict_word_he.brk) \
|
||||
$(call gb_Helper_optional_locale,hu,dict_word_hu.brk) \
|
||||
|
||||
@@ -662,17 +662,29 @@ void TestBreakIterator::testGraphemeIteration()
|
||||
aLocale.Country = "IN";
|
||||
|
||||
{
|
||||
const sal_Unicode KA_VIRAMA_SSA[] = { 0x0B95, 0x0BCD, 0x0BB7 };
|
||||
OUString aTest(KA_VIRAMA_SSA, SAL_N_ELEMENTS(KA_VIRAMA_SSA));
|
||||
const sal_Unicode CA_VOWELSIGNI_TA_VIRAMA_TA_VOWELSIGNI_RA_VOWELSIGNAI [] = { 0x0B9A, 0x0BBF, 0x0BA4, 0x0BCD, 0x0BA4, 0x0BBF, 0x0BB0, 0x0BC8 };
|
||||
|
||||
OUString aTest(CA_VOWELSIGNI_TA_VIRAMA_TA_VOWELSIGNI_RA_VOWELSIGNAI, SAL_N_ELEMENTS(CA_VOWELSIGNI_TA_VIRAMA_TA_VOWELSIGNI_RA_VOWELSIGNAI));
|
||||
|
||||
sal_Int32 nDone=0;
|
||||
sal_Int32 nPos = 0;
|
||||
|
||||
nPos = m_xBreak->nextCharacters(aTest, 0, aLocale,
|
||||
i18n::CharacterIteratorMode::SKIPCELL, 1, nDone);
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("Should skip full grapheme", static_cast<sal_Int32>(SAL_N_ELEMENTS(KA_VIRAMA_SSA)), nPos);
|
||||
nPos = m_xBreak->previousCharacters(aTest, SAL_N_ELEMENTS(KA_VIRAMA_SSA), aLocale,
|
||||
nPos = m_xBreak->nextCharacters(aTest, 0, aLocale, i18n::CharacterIteratorMode::SKIPCELL, 1, nDone);
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("Should skip full grapheme", static_cast<sal_Int32>(2), nPos);
|
||||
nPos = m_xBreak->nextCharacters(aTest, nPos, aLocale, i18n::CharacterIteratorMode::SKIPCELL, 1, nDone);
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("Should skip full grapheme", static_cast<sal_Int32>(4), nPos);
|
||||
nPos = m_xBreak->nextCharacters(aTest, nPos, aLocale, i18n::CharacterIteratorMode::SKIPCELL, 1, nDone);
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("Should skip full grapheme", static_cast<sal_Int32>(6), nPos);
|
||||
nPos = m_xBreak->nextCharacters(aTest, nPos, aLocale, i18n::CharacterIteratorMode::SKIPCELL, 1, nDone);
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("Should skip full grapheme", static_cast<sal_Int32>(SAL_N_ELEMENTS(CA_VOWELSIGNI_TA_VIRAMA_TA_VOWELSIGNI_RA_VOWELSIGNAI)), nPos);
|
||||
nPos = m_xBreak->previousCharacters(aTest, SAL_N_ELEMENTS(CA_VOWELSIGNI_TA_VIRAMA_TA_VOWELSIGNI_RA_VOWELSIGNAI), aLocale,
|
||||
i18n::CharacterIteratorMode::SKIPCELL, 1, nDone);
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("Should skip full grapheme", static_cast<sal_Int32>(6), nPos);
|
||||
nPos = m_xBreak->previousCharacters(aTest, nPos, aLocale, i18n::CharacterIteratorMode::SKIPCELL, 1, nDone);
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("Should skip full grapheme", static_cast<sal_Int32>(4), nPos);
|
||||
nPos = m_xBreak->previousCharacters(aTest, nPos, aLocale, i18n::CharacterIteratorMode::SKIPCELL, 1, nDone);
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("Should skip full grapheme", static_cast<sal_Int32>(2), nPos);
|
||||
nPos = m_xBreak->previousCharacters(aTest, nPos, aLocale, i18n::CharacterIteratorMode::SKIPCELL, 1, nDone);
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("Should skip full grapheme", static_cast<sal_Int32>(0), nPos);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,109 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2002-2009, International Business Machines Corporation and others.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# file: char.txt
|
||||
#
|
||||
# ICU Character Break Rules, also known as Grapheme Cluster Boundaries
|
||||
# See Unicode Standard Annex #29.
|
||||
# These rules are based on TR29 Revision 13, for Unicode Version 5.1
|
||||
#
|
||||
|
||||
#
|
||||
# Character Class Definitions.
|
||||
#
|
||||
$CR = [\p{Grapheme_Cluster_Break = CR}];
|
||||
$LF = [\p{Grapheme_Cluster_Break = LF}];
|
||||
$Control = [\p{Grapheme_Cluster_Break = Control}];
|
||||
$Prepend = [\p{Grapheme_Cluster_Break = Prepend}];
|
||||
$Extend = [\p{Grapheme_Cluster_Break = Extend}];
|
||||
$SpacingMark = [\p{Grapheme_Cluster_Break = SpacingMark}];
|
||||
$BengaliLetter = [\u0985-\u09B9 \u09CE \u09DC-\u09E1 \u09F0-\u09F1];
|
||||
$BengaliSignVirama = \u09CD;
|
||||
$GujaratiLetter = [\u0A85-\u0A8C \u0A8F-\u0A90 \u0A93-\u0AB9 \u0AE0-\u0AE1];
|
||||
$GujaratiSignVirama = \u0ACD;
|
||||
$DevanagariLetter = [\u0904-\u0939 \u0958-\u0961 \u0972-\u097F];
|
||||
$DevanagariSignVirama = \u094D;
|
||||
$KannadaLetter = [\u0C85-\u0CB9 \u0CDE-\u0CE1];
|
||||
$KannadaSignVirama = \u0CCD;
|
||||
$MalayalamLetter = [\u0D05-\u0D39 \u0D60-\u0D61 \u0D7A-\u0D7F];
|
||||
$MalayalamSignVirama = \u0D4D;
|
||||
$OdiaLetter = [\u0B05-\u0B39 \u0B5C-\u0B61 \u0B71];
|
||||
$OdiaSignVirama = \u0B4D;
|
||||
$GurmukhiLetter = [\u0A05-\u0A39 \u0A59-\u0A5E];
|
||||
$GurmukhiSignVirama = \u0A4D;
|
||||
$TamilKa = \u0B95;
|
||||
$TamilSignVirama = \u0BCD;
|
||||
$TamilSsa = \u0BB7;
|
||||
$TeluguLetter = [\u0C05-\u0C39 \u0C58-\u0C61];
|
||||
$TeluguSignVirama = \u0C4D;
|
||||
|
||||
#
|
||||
# Korean Syllable Definitions
|
||||
#
|
||||
$L = [\p{Grapheme_Cluster_Break = L}];
|
||||
$V = [\p{Grapheme_Cluster_Break = V}];
|
||||
$T = [\p{Grapheme_Cluster_Break = T}];
|
||||
|
||||
$LV = [\p{Grapheme_Cluster_Break = LV}];
|
||||
$LVT = [\p{Grapheme_Cluster_Break = LVT}];
|
||||
|
||||
|
||||
## -------------------------------------------------
|
||||
!!chain;
|
||||
|
||||
!!forward;
|
||||
|
||||
$CR $LF;
|
||||
|
||||
$BengaliLetter ($BengaliSignVirama $BengaliLetter?)+;
|
||||
$GujaratiLetter ($GujaratiSignVirama $GujaratiLetter?)+;
|
||||
$DevanagariLetter ($DevanagariSignVirama $DevanagariLetter?)+;
|
||||
$KannadaLetter ($KannadaSignVirama $KannadaLetter?)+;
|
||||
$MalayalamLetter ($MalayalamSignVirama $MalayalamLetter?)+;
|
||||
$OdiaLetter ($OdiaSignVirama $OdiaLetter?)+;
|
||||
$GurmukhiLetter ($GurmukhiSignVirama $GurmukhiLetter?)+;
|
||||
$TamilKa $TamilSignVirama $TamilSsa;
|
||||
$TeluguLetter ($TeluguSignVirama $TeluguLetter?)+;
|
||||
|
||||
$L ($L | $V | $LV | $LVT);
|
||||
($LV | $V) ($V | $T);
|
||||
($LVT | $T) $T;
|
||||
|
||||
[^$Control $CR $LF] $Extend;
|
||||
|
||||
[^$Control $CR $LF] $SpacingMark;
|
||||
$Prepend [^$Control $CR $LF];
|
||||
|
||||
|
||||
## -------------------------------------------------
|
||||
|
||||
!!reverse;
|
||||
$LF $CR;
|
||||
($BengaliLetter? $BengaliSignVirama)+ $BengaliLetter;
|
||||
($GujaratiLetter? $GujaratiSignVirama)+ $GujaratiLetter;
|
||||
($DevanagariLetter? $DevanagariSignVirama)+ $DevanagariLetter;
|
||||
($KannadaLetter? $KannadaSignVirama)+ $KannadaLetter;
|
||||
($MalayalamLetter? $MalayalamSignVirama)+ $MalayalamLetter;
|
||||
($OdiaLetter? $OdiaSignVirama)+ $OdiaLetter;
|
||||
($GurmukhiLetter? $GurmukhiSignVirama)+ $GurmukhiLetter;
|
||||
$TamilSsa $TamilSignVirama $TamilKa;
|
||||
($TeluguLetter? $TeluguSignVirama)+ $TeluguLetter;
|
||||
($L | $V | $LV | $LVT) $L;
|
||||
($V | $T) ($LV | $V);
|
||||
$T ($LVT | $T);
|
||||
|
||||
$Extend [^$Control $CR $LF];
|
||||
$SpacingMark [^$Control $CR $LF];
|
||||
[^$Control $CR $LF] $Prepend;
|
||||
|
||||
|
||||
## -------------------------------------------------
|
||||
|
||||
!!safe_reverse;
|
||||
|
||||
|
||||
## -------------------------------------------------
|
||||
|
||||
!!safe_forward;
|
||||
|
||||
@@ -168,13 +168,6 @@
|
||||
</LC_CURRENCY>
|
||||
<LC_TRANSLITERATION ref="en_US"/>
|
||||
<LC_MISC>
|
||||
<BreakIteratorRules>
|
||||
<EditMode/>
|
||||
<DictionaryMode/>
|
||||
<WordCountMode/>
|
||||
<CharacterMode>char_in</CharacterMode>
|
||||
<LineMode/>
|
||||
</BreakIteratorRules>
|
||||
<ReservedWords>
|
||||
<trueWord>সত্য</trueWord>
|
||||
<falseWord>মিথ্যা</falseWord>
|
||||
|
||||
@@ -346,13 +346,6 @@
|
||||
</LC_CURRENCY>
|
||||
<LC_TRANSLITERATION ref="en_US"/>
|
||||
<LC_MISC>
|
||||
<BreakIteratorRules>
|
||||
<EditMode/>
|
||||
<DictionaryMode/>
|
||||
<WordCountMode/>
|
||||
<CharacterMode>char_in</CharacterMode>
|
||||
<LineMode/>
|
||||
</BreakIteratorRules>
|
||||
<ReservedWords>
|
||||
<trueWord>সত্য</trueWord>
|
||||
<falseWord>মিথ্যা</falseWord>
|
||||
|
||||
@@ -170,13 +170,6 @@
|
||||
</LC_CURRENCY>
|
||||
<LC_TRANSLITERATION ref="en_US"/>
|
||||
<LC_MISC>
|
||||
<BreakIteratorRules>
|
||||
<EditMode/>
|
||||
<DictionaryMode/>
|
||||
<WordCountMode/>
|
||||
<CharacterMode>char_in</CharacterMode>
|
||||
<LineMode/>
|
||||
</BreakIteratorRules>
|
||||
<ReservedWords>
|
||||
<trueWord>ખરું</trueWord>
|
||||
<falseWord>ખોટું</falseWord>
|
||||
|
||||
@@ -344,13 +344,6 @@
|
||||
</LC_CURRENCY>
|
||||
<LC_TRANSLITERATION ref="en_US"/>
|
||||
<LC_MISC>
|
||||
<BreakIteratorRules>
|
||||
<EditMode/>
|
||||
<DictionaryMode/>
|
||||
<WordCountMode/>
|
||||
<CharacterMode>char_in</CharacterMode>
|
||||
<LineMode/>
|
||||
</BreakIteratorRules>
|
||||
<ReservedWords>
|
||||
<trueWord>सही</trueWord>
|
||||
<falseWord>गलत</falseWord>
|
||||
|
||||
@@ -170,13 +170,6 @@
|
||||
</LC_CURRENCY>
|
||||
<LC_TRANSLITERATION ref="en_US"/>
|
||||
<LC_MISC>
|
||||
<BreakIteratorRules>
|
||||
<EditMode/>
|
||||
<DictionaryMode/>
|
||||
<WordCountMode/>
|
||||
<CharacterMode>char_in</CharacterMode>
|
||||
<LineMode/>
|
||||
</BreakIteratorRules>
|
||||
<ReservedWords>
|
||||
<trueWord>ಸಹೀ</trueWord>
|
||||
<falseWord>ಗಲತ್</falseWord>
|
||||
|
||||
@@ -344,13 +344,6 @@
|
||||
</LC_CURRENCY>
|
||||
<LC_TRANSLITERATION ref="en_US"/>
|
||||
<LC_MISC>
|
||||
<BreakIteratorRules>
|
||||
<EditMode/>
|
||||
<DictionaryMode/>
|
||||
<WordCountMode/>
|
||||
<CharacterMode>char_in</CharacterMode>
|
||||
<LineMode/>
|
||||
</BreakIteratorRules>
|
||||
<ReservedWords>
|
||||
<trueWord>അതെ</trueWord>
|
||||
<falseWord>അല്ല</falseWord>
|
||||
|
||||
@@ -360,13 +360,6 @@
|
||||
<Transliteration unoid="IGNORE_CASE"/>
|
||||
</LC_TRANSLITERATION>
|
||||
<LC_MISC>
|
||||
<BreakIteratorRules>
|
||||
<EditMode/>
|
||||
<DictionaryMode/>
|
||||
<WordCountMode/>
|
||||
<CharacterMode>char_in</CharacterMode>
|
||||
<LineMode/>
|
||||
</BreakIteratorRules>
|
||||
<ReservedWords>
|
||||
<trueWord>ସତ</trueWord>
|
||||
<falseWord>ମିଛ</falseWord>
|
||||
|
||||
@@ -192,13 +192,6 @@
|
||||
</LC_CURRENCY>
|
||||
<LC_TRANSLITERATION ref="en_US"/>
|
||||
<LC_MISC>
|
||||
<BreakIteratorRules>
|
||||
<EditMode/>
|
||||
<DictionaryMode/>
|
||||
<WordCountMode/>
|
||||
<CharacterMode>char_in</CharacterMode>
|
||||
<LineMode/>
|
||||
</BreakIteratorRules>
|
||||
<ReservedWords>
|
||||
<trueWord>ਸਹੀ</trueWord>
|
||||
<falseWord>ਗਲਤ</falseWord>
|
||||
|
||||
@@ -170,13 +170,6 @@
|
||||
</LC_CURRENCY>
|
||||
<LC_TRANSLITERATION ref="en_US"/>
|
||||
<LC_MISC>
|
||||
<BreakIteratorRules>
|
||||
<EditMode/>
|
||||
<DictionaryMode/>
|
||||
<WordCountMode/>
|
||||
<CharacterMode>char_in</CharacterMode>
|
||||
<LineMode/>
|
||||
</BreakIteratorRules>
|
||||
<ReservedWords>
|
||||
<trueWord>ஸரி</trueWord>
|
||||
<falseWord>தப்ப</falseWord>
|
||||
|
||||
@@ -169,13 +169,6 @@
|
||||
</LC_CURRENCY>
|
||||
<LC_TRANSLITERATION ref="en_US"/>
|
||||
<LC_MISC>
|
||||
<BreakIteratorRules>
|
||||
<EditMode/>
|
||||
<DictionaryMode/>
|
||||
<WordCountMode/>
|
||||
<CharacterMode>char_in</CharacterMode>
|
||||
<LineMode/>
|
||||
</BreakIteratorRules>
|
||||
<ReservedWords>
|
||||
<trueWord>నిజము</trueWord>
|
||||
<falseWord>అపాదము</falseWord>
|
||||
|
||||
Reference in New Issue
Block a user