sc/source/filter/orcus/interface.cxx |  157 +++++++++++------------------------
 1 file changed, 50 insertions(+), 107 deletions(-)

New commits:
commit 99bad52f534b0f9e5aebcf0a65e1787ac9f09d94
Author:     Kohei Yoshida <ko...@libreoffice.org>
AuthorDate: Tue Feb 14 21:30:45 2023 -0500
Commit:     Kohei Yoshida <ko...@libreoffice.org>
CommitDate: Wed Feb 15 03:14:03 2023 +0000

    Switch to static rules table and add a few more entries
    
    Hopefully it's easier to add new rules.
    
    Change-Id: I893ea5de5bcc5535f2f49a682de33ff2fcfffd48
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147035
    Tested-by: Jenkins
    Reviewed-by: Kohei Yoshida <ko...@libreoffice.org>

diff --git a/sc/source/filter/orcus/interface.cxx 
b/sc/source/filter/orcus/interface.cxx
index 7e283e89e119..e53d2d004e95 100644
--- a/sc/source/filter/orcus/interface.cxx
+++ b/sc/source/filter/orcus/interface.cxx
@@ -51,6 +51,7 @@
 #include <orcus/exception.hpp>
 #include <stylehelper.hxx>
 #include <utility>
+#include <unordered_map>
 
 using namespace com::sun::star;
 
@@ -99,113 +100,55 @@ void ScOrcusGlobalSettings::set_origin_date(int year, int 
month, int day)
 
 void ScOrcusGlobalSettings::set_character_set(orcus::character_set_t cs)
 {
-    switch (cs)
-    {
-        case orcus::character_set_t::big5:
-            mnTextEncoding = RTL_TEXTENCODING_BIG5;
-            break;
-        case orcus::character_set_t::euc_jp:
-            mnTextEncoding = RTL_TEXTENCODING_EUC_JP;
-            break;
-        case orcus::character_set_t::euc_kr:
-            mnTextEncoding = RTL_TEXTENCODING_EUC_KR;
-            break;
-        case orcus::character_set_t::gb2312:
-            mnTextEncoding = RTL_TEXTENCODING_GB_2312;
-            break;
-        case orcus::character_set_t::gbk:
-            mnTextEncoding = RTL_TEXTENCODING_GBK;
-            break;
-        case orcus::character_set_t::iso_8859_1:
-        case orcus::character_set_t::iso_8859_1_windows_3_0_latin_1:
-        case orcus::character_set_t::iso_8859_1_windows_3_1_latin_1:
-            mnTextEncoding = RTL_TEXTENCODING_ISO_8859_1;
-            break;
-        case orcus::character_set_t::iso_8859_2:
-        case orcus::character_set_t::iso_8859_2_windows_latin_2:
-            mnTextEncoding = RTL_TEXTENCODING_ISO_8859_2;
-            break;
-        case orcus::character_set_t::iso_8859_3:
-            mnTextEncoding = RTL_TEXTENCODING_ISO_8859_3;
-            break;
-        case orcus::character_set_t::iso_8859_4:
-            mnTextEncoding = RTL_TEXTENCODING_ISO_8859_4;
-            break;
-        case orcus::character_set_t::iso_8859_5:
-            mnTextEncoding = RTL_TEXTENCODING_ISO_8859_5;
-            break;
-        case orcus::character_set_t::iso_8859_6:
-        case orcus::character_set_t::iso_8859_6_e:
-        case orcus::character_set_t::iso_8859_6_i:
-            mnTextEncoding = RTL_TEXTENCODING_ISO_8859_6;
-            break;
-        case orcus::character_set_t::iso_8859_7:
-            mnTextEncoding = RTL_TEXTENCODING_ISO_8859_7;
-            break;
-        case orcus::character_set_t::iso_8859_8:
-        case orcus::character_set_t::iso_8859_8_e:
-        case orcus::character_set_t::iso_8859_8_i:
-            mnTextEncoding = RTL_TEXTENCODING_ISO_8859_8;
-            break;
-        case orcus::character_set_t::iso_8859_9:
-        case orcus::character_set_t::iso_8859_9_windows_latin_5:
-            mnTextEncoding = RTL_TEXTENCODING_ISO_8859_9;
-            break;
-        case orcus::character_set_t::iso_8859_14:
-            mnTextEncoding = RTL_TEXTENCODING_ISO_8859_14;
-            break;
-        case orcus::character_set_t::iso_8859_15:
-            mnTextEncoding = RTL_TEXTENCODING_ISO_8859_15;
-            break;
-        case orcus::character_set_t::iso_2022_jp:
-        case orcus::character_set_t::iso_2022_jp_2:
-            mnTextEncoding = RTL_TEXTENCODING_ISO_2022_JP;
-            break;
-        case orcus::character_set_t::jis_x0201:
-            mnTextEncoding = RTL_TEXTENCODING_JIS_X_0201;
-            break;
-        case orcus::character_set_t::shift_jis:
-            mnTextEncoding = RTL_TEXTENCODING_SHIFT_JIS;
-            break;
-        case orcus::character_set_t::us_ascii:
-            mnTextEncoding = RTL_TEXTENCODING_ASCII_US;
-            break;
-        case orcus::character_set_t::utf_7:
-            mnTextEncoding = RTL_TEXTENCODING_UTF7;
-            break;
-        case orcus::character_set_t::utf_8:
-            mnTextEncoding = RTL_TEXTENCODING_UTF8;
-            break;
-        case orcus::character_set_t::windows_1250:
-            mnTextEncoding = RTL_TEXTENCODING_MS_1250;
-            break;
-        case orcus::character_set_t::windows_1251:
-            mnTextEncoding = RTL_TEXTENCODING_MS_1251;
-            break;
-        case orcus::character_set_t::windows_1252:
-            mnTextEncoding = RTL_TEXTENCODING_MS_1252;
-            break;
-        case orcus::character_set_t::windows_1253:
-            mnTextEncoding = RTL_TEXTENCODING_MS_1253;
-            break;
-        case orcus::character_set_t::windows_1254:
-            mnTextEncoding = RTL_TEXTENCODING_MS_1254;
-            break;
-        case orcus::character_set_t::windows_1255:
-            mnTextEncoding = RTL_TEXTENCODING_MS_1255;
-            break;
-        case orcus::character_set_t::windows_1256:
-            mnTextEncoding = RTL_TEXTENCODING_MS_1256;
-            break;
-        case orcus::character_set_t::windows_1257:
-            mnTextEncoding = RTL_TEXTENCODING_MS_1257;
-            break;
-        case orcus::character_set_t::windows_1258:
-            mnTextEncoding = RTL_TEXTENCODING_MS_1258;
-            break;
-        default:
-            ; // Add more as needed.
-    }
+    // Keep the entries sorted by the key.
+    static const std::unordered_map<orcus::character_set_t, rtl_TextEncoding> 
rules = {
+        { orcus::character_set_t::big5, RTL_TEXTENCODING_BIG5 },
+        { orcus::character_set_t::euc_jp, RTL_TEXTENCODING_EUC_JP },
+        { orcus::character_set_t::euc_kr, RTL_TEXTENCODING_EUC_KR },
+        { orcus::character_set_t::gb2312, RTL_TEXTENCODING_GB_2312 },
+        { orcus::character_set_t::gbk, RTL_TEXTENCODING_GBK },
+        { orcus::character_set_t::iso_2022_cn, RTL_TEXTENCODING_ISO_2022_CN },
+        { orcus::character_set_t::iso_2022_cn_ext, 
RTL_TEXTENCODING_ISO_2022_CN },
+        { orcus::character_set_t::iso_2022_jp, RTL_TEXTENCODING_ISO_2022_JP },
+        { orcus::character_set_t::iso_2022_jp_2, RTL_TEXTENCODING_ISO_2022_JP 
},
+        { orcus::character_set_t::iso_8859_1, RTL_TEXTENCODING_ISO_8859_1 },
+        { orcus::character_set_t::iso_8859_14, RTL_TEXTENCODING_ISO_8859_14 },
+        { orcus::character_set_t::iso_8859_15, RTL_TEXTENCODING_ISO_8859_15 },
+        { orcus::character_set_t::iso_8859_1_windows_3_0_latin_1, 
RTL_TEXTENCODING_ISO_8859_1 },
+        { orcus::character_set_t::iso_8859_1_windows_3_1_latin_1, 
RTL_TEXTENCODING_ISO_8859_1 },
+        { orcus::character_set_t::iso_8859_2, RTL_TEXTENCODING_ISO_8859_2 },
+        { orcus::character_set_t::iso_8859_2_windows_latin_2, 
RTL_TEXTENCODING_ISO_8859_2 },
+        { orcus::character_set_t::iso_8859_3, RTL_TEXTENCODING_ISO_8859_3 },
+        { orcus::character_set_t::iso_8859_4, RTL_TEXTENCODING_ISO_8859_4 },
+        { orcus::character_set_t::iso_8859_5, RTL_TEXTENCODING_ISO_8859_5 },
+        { orcus::character_set_t::iso_8859_6, RTL_TEXTENCODING_ISO_8859_6 },
+        { orcus::character_set_t::iso_8859_6_e, RTL_TEXTENCODING_ISO_8859_6 },
+        { orcus::character_set_t::iso_8859_6_i, RTL_TEXTENCODING_ISO_8859_6 },
+        { orcus::character_set_t::iso_8859_7, RTL_TEXTENCODING_ISO_8859_7 },
+        { orcus::character_set_t::iso_8859_8, RTL_TEXTENCODING_ISO_8859_8 },
+        { orcus::character_set_t::iso_8859_8_e, RTL_TEXTENCODING_ISO_8859_8 },
+        { orcus::character_set_t::iso_8859_8_i, RTL_TEXTENCODING_ISO_8859_8 },
+        { orcus::character_set_t::iso_8859_9, RTL_TEXTENCODING_ISO_8859_9 },
+        { orcus::character_set_t::iso_8859_9_windows_latin_5, 
RTL_TEXTENCODING_ISO_8859_9 },
+        { orcus::character_set_t::jis_x0201, RTL_TEXTENCODING_JIS_X_0201 },
+        { orcus::character_set_t::jis_x0212_1990, RTL_TEXTENCODING_JIS_X_0212 
},
+        { orcus::character_set_t::shift_jis, RTL_TEXTENCODING_SHIFT_JIS },
+        { orcus::character_set_t::us_ascii, RTL_TEXTENCODING_ASCII_US },
+        { orcus::character_set_t::utf_7, RTL_TEXTENCODING_UTF7 },
+        { orcus::character_set_t::utf_8, RTL_TEXTENCODING_UTF8 },
+        { orcus::character_set_t::windows_1250, RTL_TEXTENCODING_MS_1250 },
+        { orcus::character_set_t::windows_1251, RTL_TEXTENCODING_MS_1251 },
+        { orcus::character_set_t::windows_1252, RTL_TEXTENCODING_MS_1252 },
+        { orcus::character_set_t::windows_1253, RTL_TEXTENCODING_MS_1253 },
+        { orcus::character_set_t::windows_1254, RTL_TEXTENCODING_MS_1254 },
+        { orcus::character_set_t::windows_1255, RTL_TEXTENCODING_MS_1255 },
+        { orcus::character_set_t::windows_1256, RTL_TEXTENCODING_MS_1256 },
+        { orcus::character_set_t::windows_1257, RTL_TEXTENCODING_MS_1257 },
+        { orcus::character_set_t::windows_1258, RTL_TEXTENCODING_MS_1258 },
+    };
+
+    if (auto it = rules.find(cs); it != rules.end())
+        mnTextEncoding = it->second;
 }
 
 void ScOrcusGlobalSettings::set_default_formula_grammar(os::formula_grammar_t 
grammar)

Reply via email to