diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2023-04-04 11:16:00 +0200 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2023-04-27 23:18:16 +0200 |
commit | 590da8e3cee8d5749cef792d681c85f3f2ed1462 (patch) | |
tree | a0244fdeb277508ec7a3dc95c5309c56142d2cf4 /i18npool | |
parent | 06ca51c4820538fe684b7801d2b5f968487eecb6 (diff) |
tdf#151971: Fix used implementation names of transliteration services
...after 04af4e4f55f3ef319a78edd4d0109e2e7eba90b6 "[API CHANGE] Fix all bad
UNOIDL identifiers across offapi" had changed the spelling (character case) of
some of the css.i18n.TransliterationModules[New] enum values involved here, so
that the TmItem1 macro generated broken TMList::implName values now. (Which in
turn caused TransliterationImpl::loadBody to throw "unsatisfied query for
interface of type com.sun.star.i18n.XExtendedTransliteration!"
css::uno::RuntimeExceptions, which remained uncaught.)
Also add a test verifying that loading all those transliteration services no
longer fails throwing exceptions. Which lead to two open TODOs: For one, the
value of maxCascade in i18npool/inc/transliterationImpl.hxx might come from a
time when there were fewer TransliterationModules[New] enum values and might no
longer be appropriate. This would need some further investigation. But for
another, there are two transliteration services that cannot currently be
instantiated. That looks like a regression that should be fixed in a follow-up
commit.
Change-Id: Icfca3e841360d4b471013e2c96d6868a75a21a1c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150018
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
(cherry picked from commit 8e0ea143180c723bb429f6dbdd9ed370c220862b)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149981
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'i18npool')
-rw-r--r-- | i18npool/CppunitTest_i18npool_transliteration.mk | 30 | ||||
-rw-r--r-- | i18npool/Module_i18npool.mk | 1 | ||||
-rw-r--r-- | i18npool/qa/cppunit/transliteration.cxx | 126 | ||||
-rw-r--r-- | i18npool/source/transliteration/transliterationImpl.cxx | 60 |
4 files changed, 199 insertions, 18 deletions
diff --git a/i18npool/CppunitTest_i18npool_transliteration.mk b/i18npool/CppunitTest_i18npool_transliteration.mk new file mode 100644 index 000000000000..37dddcda0ae2 --- /dev/null +++ b/i18npool/CppunitTest_i18npool_transliteration.mk @@ -0,0 +1,30 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CppunitTest_CppunitTest,i18npool_transliteration)) + +$(eval $(call gb_CppunitTest_add_exception_objects,i18npool_transliteration, \ + i18npool/qa/cppunit/transliteration \ +)) + +$(eval $(call gb_CppunitTest_use_components,i18npool_transliteration, \ + i18npool/util/i18npool \ +))\ + +$(eval $(call gb_CppunitTest_use_libraries,i18npool_transliteration, \ + cppu \ + cppuhelper \ + sal \ +)) + +$(eval $(call gb_CppunitTest_use_sdk_api,i18npool_transliteration)) + +$(eval $(call gb_CppunitTest_use_ure,i18npool_transliteration)) + +# vim: set noet sw=4 ts=4: diff --git a/i18npool/Module_i18npool.mk b/i18npool/Module_i18npool.mk index e66a08a648ab..1797db8c3869 100644 --- a/i18npool/Module_i18npool.mk +++ b/i18npool/Module_i18npool.mk @@ -45,6 +45,7 @@ $(eval $(call gb_Module_add_check_targets,i18npool,\ CppunitTest_i18npool_textsearch \ CppunitTest_i18npool_calendar \ CppunitTest_i18npool_defaultnumberingprovider \ + CppunitTest_i18npool_transliteration \ )) # vim: set noet sw=4 ts=4: diff --git a/i18npool/qa/cppunit/transliteration.cxx b/i18npool/qa/cppunit/transliteration.cxx new file mode 100644 index 000000000000..77d82aa60eec --- /dev/null +++ b/i18npool/qa/cppunit/transliteration.cxx @@ -0,0 +1,126 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <sal/config.h> + +#include <cppunit/TestFixture.h> +#include <cppunit/extensions/HelperMacros.h> +#include <cppunit/plugin/TestPlugIn.h> + +#include <com/sun/star/i18n/Transliteration.hpp> +#include <com/sun/star/i18n/TransliterationModulesNew.hpp> +#include <cppuhelper/bootstrap.hxx> + +namespace +{ +class Transliteration : public CppUnit::TestFixture +{ +public: + void testLoadModuleNew() + { + auto const trans + = css::i18n::Transliteration::create(cppu::defaultBootstrap_InitialComponentContext()); + // Verify that loading succeeds without throwing an exception, for each possible + // TransliterationModulesNew value (TODO: there is an upper limit of maxCascade 27 in + // i18npool/inc/transliterationImpl.hxx for the length of the passed + // TransliterationModulesNew value, so pass each one individually rather than all 65 at + // once): + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_UPPERCASE_LOWERCASE }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_LOWERCASE_UPPERCASE }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_HALFWIDTH_FULLWIDTH }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_FULLWIDTH_HALFWIDTH }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_KATAKANA_HIRAGANA }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_HIRAGANA_KATAKANA }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IGNORE_CASE }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IGNORE_KANA }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IGNORE_WIDTH }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreTraditionalKanji_ja_JP }, + {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreTraditionalKana_ja_JP }, + {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreMinusSign_ja_JP }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreIterationMark_ja_JP }, + {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreSeparator_ja_JP }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreZiZu_ja_JP }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreBaFa_ja_JP }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreTiJi_ja_JP }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreHyuByu_ja_JP }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreSeZe_ja_JP }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreIandEfollowedByYa_ja_JP }, + {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreKiKuFollowedBySa_ja_JP }, + {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreSize_ja_JP }, {}); + trans->loadModuleNew( + { css::i18n::TransliterationModulesNew_IgnoreProlongedSoundMark_ja_JP }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreMiddleDot_ja_JP }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_IgnoreSpace_ja_JP }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_SmallToLarge_ja_JP }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_LargeToSmall_ja_JP }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToTextLower_zh_CN }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToTextUpper_zh_CN }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToTextLower_zh_TW }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToTextUpper_zh_TW }, {}); +#if 0 //TODO: currently broken + trans->loadModuleNew({css::i18n::TransliterationModulesNew_NumToTextFormalHangul_ko}, {}); +#endif + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToTextFormalLower_ko }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToTextFormalUpper_ko }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToTextInformalHangul_ko }, + {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToTextInformalLower_ko }, + {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToTextInformalUpper_ko }, + {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToCharLower_zh_CN }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToCharUpper_zh_CN }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToCharLower_zh_TW }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToCharUpper_zh_TW }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToCharHangul_ko }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToCharLower_ko }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToCharUpper_ko }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToCharFullwidth }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_NumToCharKanjiShort_ja_JP }, + {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_TextToNumLower_zh_CN }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_TextToNumUpper_zh_CN }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_TextToNumLower_zh_TW }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_TextToNumUpper_zh_TW }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_TextToNumFormalHangul_ko }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_TextToNumFormalLower_ko }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_TextToNumFormalUpper_ko }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_TextToNumInformalHangul_ko }, + {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_TextToNumInformalLower_ko }, + {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_TextToNumInformalUpper_ko }, + {}); +#if 0 //TODO: currently broken + trans->loadModuleNew({css::i18n::TransliterationModulesNew_CharToNumLower_zh_CN}, {}); +#endif + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_CharToNumUpper_zh_CN }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_CharToNumLower_zh_TW }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_CharToNumUpper_zh_TW }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_CharToNumHangul_ko }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_CharToNumLower_ko }, {}); + trans->loadModuleNew({ css::i18n::TransliterationModulesNew_CharToNumUpper_ko }, {}); + } + + CPPUNIT_TEST_SUITE(Transliteration); + CPPUNIT_TEST(testLoadModuleNew); + CPPUNIT_TEST_SUITE_END(); +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(Transliteration); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/i18npool/source/transliteration/transliterationImpl.cxx b/i18npool/source/transliteration/transliterationImpl.cxx index dc9e5a234e5b..914a401031f1 100644 --- a/i18npool/source/transliteration/transliterationImpl.cxx +++ b/i18npool/source/transliteration/transliterationImpl.cxx @@ -65,22 +65,44 @@ TMList const TMlist[] = { // Modules ModulesNew // No enum define for this trans. application has to use impl name to load it // TmItem1 (IGNORE_CASE_SIMPLE), // (1<<11 1024) (66) - TmItem1 (IgnoreTraditionalKanji_ja_JP), // 3. (1<<12 4096) (10) - TmItem1 (IgnoreTraditionalKana_ja_JP), // 4. (1<<13 8192) (11) - TmItem1 (IgnoreMinusSign_ja_JP), // 5. (1<<13 16384) (12) - TmItem1 (IgnoreIterationMark_ja_JP), // 6. (1<<14 32768) (13) - TmItem1 (IgnoreSeparator_ja_JP), // 7. (1<<15 65536) (14) - TmItem1 (IgnoreSize_ja_JP), // 15. (1<<23 16777216) (22) - TmItem1 (IgnoreMiddleDot_ja_JP), // 17. (1<<25 67108864) (24) - TmItem1 (IgnoreSpace_ja_JP), // 18. (1<<26 134217728) (25) - TmItem1 (IgnoreZiZu_ja_JP), // 8. (1<<16 131072) (15) - TmItem1 (IgnoreBaFa_ja_JP), // 9. (1<<17 262144) (16) - TmItem1 (IgnoreTiJi_ja_JP), // 10. (1<<18 524288) (17) - TmItem1 (IgnoreHyuByu_ja_JP), // 11. (1<<19 1048576) (18) - TmItem1 (IgnoreSeZe_ja_JP), // 12. (1<<20 2097152) (19) - TmItem1 (IgnoreIandEfollowedByYa_ja_JP), // 13. (1<<21 4194304) (20) - TmItem1 (IgnoreKiKuFollowedBySa_ja_JP), // 14. (1<<22 8388608) (21) - TmItem1 (IgnoreProlongedSoundMark_ja_JP), // 16. (1<<24 33554432) (23) + {TransliterationModules_IgnoreTraditionalKanji_ja_JP, + TransliterationModulesNew_IgnoreTraditionalKanji_ja_JP, "ignoreTraditionalKanji_ja_JP"}, + // 3. (1<<12 4096) (10) + {TransliterationModules_IgnoreTraditionalKana_ja_JP, + TransliterationModulesNew_IgnoreTraditionalKana_ja_JP, "ignoreTraditionalKana_ja_JP"}, + // 4. (1<<13 8192) (11) + {TransliterationModules_IgnoreMinusSign_ja_JP, TransliterationModulesNew_IgnoreMinusSign_ja_JP, + "ignoreMinusSign_ja_JP"}, // 5. (1<<13 16384) (12) + {TransliterationModules_IgnoreIterationMark_ja_JP, + TransliterationModulesNew_IgnoreIterationMark_ja_JP, "ignoreIterationMark_ja_JP"}, + // 6. (1<<14 32768) (13) + {TransliterationModules_IgnoreSeparator_ja_JP, TransliterationModulesNew_IgnoreSeparator_ja_JP, + "ignoreSeparator_ja_JP"}, // 7. (1<<15 65536) (14) + {TransliterationModules_IgnoreSize_ja_JP, TransliterationModulesNew_IgnoreSize_ja_JP, + "ignoreSize_ja_JP"}, // 15. (1<<23 16777216) (22) + {TransliterationModules_IgnoreMiddleDot_ja_JP, TransliterationModulesNew_IgnoreMiddleDot_ja_JP, + "ignoreMiddleDot_ja_JP"}, // 17. (1<<25 67108864) (24) + {TransliterationModules_IgnoreSpace_ja_JP, TransliterationModulesNew_IgnoreSpace_ja_JP, + "ignoreSpace_ja_JP"}, // 18. (1<<26 134217728) (25) + {TransliterationModules_IgnoreZiZu_ja_JP, TransliterationModulesNew_IgnoreZiZu_ja_JP, + "ignoreZiZu_ja_JP"}, // 8. (1<<16 131072) (15) + {TransliterationModules_IgnoreBaFa_ja_JP, TransliterationModulesNew_IgnoreBaFa_ja_JP, + "ignoreBaFa_ja_JP"}, // 9. (1<<17 262144) (16) + {TransliterationModules_IgnoreTiJi_ja_JP, TransliterationModulesNew_IgnoreTiJi_ja_JP, + "ignoreTiJi_ja_JP"}, // 10. (1<<18 524288) (17) + {TransliterationModules_IgnoreHyuByu_ja_JP, TransliterationModulesNew_IgnoreHyuByu_ja_JP, + "ignoreHyuByu_ja_JP"}, // 11. (1<<19 1048576) (18) + {TransliterationModules_IgnoreSeZe_ja_JP, TransliterationModulesNew_IgnoreSeZe_ja_JP, + "ignoreSeZe_ja_JP"}, // 12. (1<<20 2097152) (19) + {TransliterationModules_IgnoreIandEfollowedByYa_ja_JP, + TransliterationModulesNew_IgnoreIandEfollowedByYa_ja_JP, "ignoreIandEfollowedByYa_ja_JP"}, + // 13. (1<<21 4194304) (20) + {TransliterationModules_IgnoreKiKuFollowedBySa_ja_JP, + TransliterationModulesNew_IgnoreKiKuFollowedBySa_ja_JP, "ignoreKiKuFollowedBySa_ja_JP"}, + // 14. (1<<22 8388608) (21) + {TransliterationModules_IgnoreProlongedSoundMark_ja_JP, + TransliterationModulesNew_IgnoreProlongedSoundMark_ja_JP, "ignoreProlongedSoundMark_ja_JP"}, + // 16. (1<<24 33554432) (23) TmItem1 (UPPERCASE_LOWERCASE), // 19. (1) (1) TmItem1 (LOWERCASE_UPPERCASE), // 20. (2) (2) @@ -89,8 +111,10 @@ TMList const TMlist[] = { // Modules ModulesNew TmItem1 (KATAKANA_HIRAGANA), // 23. (5) (5) TmItem1 (HIRAGANA_KATAKANA), // 24. (6) (6) - TmItem1 (SmallToLarge_ja_JP), // 25. (1<<27 268435456) (26) - TmItem1 (LargeToSmall_ja_JP), // 26. (1<<28 536870912) (27) + {TransliterationModules_SmallToLarge_ja_JP, TransliterationModulesNew_SmallToLarge_ja_JP, + "smallToLarge_ja_JP"}, // 25. (1<<27 268435456) (26) + {TransliterationModules_LargeToSmall_ja_JP, TransliterationModulesNew_LargeToSmall_ja_JP, + "largeToSmall_ja_JP"}, // 26. (1<<28 536870912) (27) TmItem2 (NumToTextLower_zh_CN), // 27. () (28) TmItem2 (NumToTextUpper_zh_CN), // 28. () (29) TmItem2 (NumToTextLower_zh_TW), // 29. () (30) |