summaryrefslogtreecommitdiff
path: root/i18npool
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2023-04-04 11:16:00 +0200
committerAndras Timar <andras.timar@collabora.com>2023-04-27 23:18:16 +0200
commit590da8e3cee8d5749cef792d681c85f3f2ed1462 (patch)
treea0244fdeb277508ec7a3dc95c5309c56142d2cf4 /i18npool
parent06ca51c4820538fe684b7801d2b5f968487eecb6 (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.mk30
-rw-r--r--i18npool/Module_i18npool.mk1
-rw-r--r--i18npool/qa/cppunit/transliteration.cxx126
-rw-r--r--i18npool/source/transliteration/transliterationImpl.cxx60
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)