tdf#124909: Use the myspell dictionary for Swiss German on iOS

The iOS system German dictionary is not good for Swiss German. (And it
doesn't even claim to be, it says it is for de_DE.) The system German
dictionary accepts 'ß' but that is not used in Swiss German, 'ss' is
always used instead.

Build the spell library for iOS, too, and don't assume that the system
de_DE dictionary would be usable for de_CH and de_LI. Copy those
dictionaries for inclusion in the iOS app bundle.

Change-Id: I0f8020812221024756c792bddc16a707de35b827
Signed-off-by: Tor Lillqvist <tml@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112603
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112635
diff --git a/Repository.mk b/Repository.mk
index 930ae5b..d61b303 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -410,7 +410,7 @@
	simplecanvas \
	slideshow \
	sot \
	$(if $(filter-out iOS,$(OS)),spell) \
	spell \
	$(if $(DISABLE_GUI),,spl) \
	storagefd \
	$(call gb_Helper_optional,SCRIPTING,stringresource) \
diff --git a/comphelper/source/misc/lok.cxx b/comphelper/source/misc/lok.cxx
index c2a4487..796a3dc 100644
--- a/comphelper/source/misc/lok.cxx
+++ b/comphelper/source/misc/lok.cxx
@@ -210,7 +210,7 @@
    if (!isActive())
        return true;

#ifdef ANDROID
#if defined ANDROID || defined IOS
    (void) lang;
    return true;
#else
diff --git a/configure.ac b/configure.ac
index 887db85..5984c98 100644
--- a/configure.ac
+++ b/configure.ac
@@ -10760,9 +10760,7 @@
dnl Check for system hunspell
dnl ===================================================================
AC_MSG_CHECKING([which libhunspell to use])
if test "$_os" = iOS; then
   AC_MSG_RESULT([none])
elif test "$with_system_hunspell" = "yes"; then
if test "$with_system_hunspell" = "yes"; then
    AC_MSG_RESULT([external])
    SYSTEM_HUNSPELL=TRUE
    AC_LANG_PUSH([C++])
diff --git a/ios/CustomTarget_iOS_setup.mk b/ios/CustomTarget_iOS_setup.mk
index d417be3..95cf79a 100644
--- a/ios/CustomTarget_iOS_setup.mk
+++ b/ios/CustomTarget_iOS_setup.mk
@@ -76,6 +76,14 @@
	mkdir -p $(IOSRES)/share/fonts
	cp -R $(INSTDIR)/share/fonts/truetype $(IOSRES)/share/fonts
	cp -R $(INSTDIR)/share/gallery $(IOSRES)/share
	mkdir -p $(IOSRES)/share/spell
	# Install the Swiss German dictionary and use it for Liechtenstein, too
	if test -d $(INSTDIR)/share/extensions/dict-de; then \
		cp $(INSTDIR)/share/extensions/dict-de/de_CH_frami.aff $(IOSRES)/share/spell/de_CH.aff; \
		cp $(INSTDIR)/share/extensions/dict-de/de_CH_frami.dic $(IOSRES)/share/spell/de_CH.dic; \
		cp $(INSTDIR)/share/extensions/dict-de/de_CH_frami.aff $(IOSRES)/share/spell/de_LI.aff; \
		cp $(INSTDIR)/share/extensions/dict-de/de_CH_frami.dic $(IOSRES)/share/spell/de_LI.dic; \
	fi
	cp -R $(INSTDIR)/share/palette $(IOSRES)/share
	cp -R $(INSTDIR)/share/fingerprint $(IOSRES)/share
	cp $(SRCDIR)/ios/welcome.odt $(IOSRES)
diff --git a/lingucomponent/Module_lingucomponent.mk b/lingucomponent/Module_lingucomponent.mk
index 9dabeb1..3f8bcb0 100644
--- a/lingucomponent/Module_lingucomponent.mk
+++ b/lingucomponent/Module_lingucomponent.mk
@@ -15,7 +15,7 @@
	Library_hyphen \
	$(if $(filter-out iOS,$(OS)),Library_lnth) \
	$(if $(filter iOS MACOSX,$(OS)),Library_MacOSXSpell) \
	$(if $(filter-out iOS,$(OS)),Library_spell) \
	Library_spell \
	StaticLibrary_ulingu \
	Library_numbertext \
))
diff --git a/lingucomponent/source/lingutil/lingutil.cxx b/lingucomponent/source/lingutil/lingutil.cxx
index 1c9f449..a3642c9 100644
--- a/lingucomponent/source/lingutil/lingutil.cxx
+++ b/lingucomponent/source/lingutil/lingutil.cxx
@@ -34,6 +34,7 @@
#include <unotools/bootstrap.hxx>
#include <unotools/lingucfg.hxx>
#include <unotools/pathoptions.hxx>
#include <rtl/bootstrap.hxx>
#include <rtl/ustring.hxx>
#include <rtl/string.hxx>
#include <rtl/tencinfo.h>
@@ -58,7 +59,7 @@
}
#endif //defined(_WIN32)

#ifdef SYSTEM_DICTS
#if defined SYSTEM_DICTS || defined IOS
// find old style dictionaries in system directories
static void GetOldStyleDicsInDir(
    OUString const & aSystemDir, OUString const & aFormatName,
@@ -143,7 +144,7 @@

    OUString aFormatName;
    OUString aDicExtension;
#ifdef SYSTEM_DICTS
#if defined SYSTEM_DICTS || defined IOS
    OUString aSystemDir;
    OUString aSystemPrefix;
    OUString aSystemSuffix;
@@ -155,6 +156,10 @@
#ifdef SYSTEM_DICTS
        aSystemDir      = DICT_SYSTEM_DIR;
        aSystemSuffix   = aDicExtension;
#elif defined IOS
        aSystemDir      = "$BRAND_BASE_DIR/share/spell";
        rtl::Bootstrap::expandMacros(aSystemDir);
        aSystemSuffix   = ".dic";
#endif
    }
    else if (strcmp( pDicType, "HYPH" ) == 0)
@@ -181,11 +186,12 @@
    if (aFormatName.isEmpty() || aDicExtension.isEmpty())
        return aRes;

#ifdef SYSTEM_DICTS
#if defined SYSTEM_DICTS || defined IOS
    // set of languages to remember the language where it is already
    // decided to make use of the dictionary.
    std::set< OUString > aDicLangInUse;

#ifndef IOS
    // follow the hunspell tool's example and check DICPATH for preferred dictionaries
    rtl_uString * pSearchPath = nullptr;
    osl_getEnvironment(OUString("DICPATH").pData, &pSearchPath);
@@ -220,6 +226,7 @@
        }
        while (nIndex != -1);
    }
#endif

    // load system directories last so that DICPATH prevails
    GetOldStyleDicsInDir(aSystemDir, aFormatName, aSystemSuffix, aSystemPrefix,
diff --git a/lingucomponent/source/spellcheck/macosxspell/macspellimp.mm b/lingucomponent/source/spellcheck/macosxspell/macspellimp.mm
index a01d70a..a919015 100644
--- a/lingucomponent/source/spellcheck/macosxspell/macspellimp.mm
+++ b/lingucomponent/source/spellcheck/macosxspell/macspellimp.mm
@@ -140,12 +140,13 @@
                }
            }
#ifdef IOS
            // iOS says it has specifically de_DE, but let's assume it is good enough for the other
            // variants, too, for now.
            // iOS says it has specifically de_DE. Let's assume it is good enough for German as
            // written in Austria, Belgium, and Luxembourg, too. (Not for German in Switzerland and
            // Liechtenstein. For those you need to bundle the myspell dictionary.)
            else if ([pLangStr isEqualToString:@"de_DE"])
            {
                const std::vector<NSString*> aDE
                    { @"AT", @"BE", @"CH", @"DE", @"LI", @"LU" };
                    { @"AT", @"BE", @"DE", @"LU" };
                for (auto c: aDE)
                {
                    pLangStr = [@"de_" stringByAppendingString: c];
diff --git a/postprocess/Rdb_services.mk b/postprocess/Rdb_services.mk
index 3876df9..34a5c0b 100644
--- a/postprocess/Rdb_services.mk
+++ b/postprocess/Rdb_services.mk
@@ -93,8 +93,8 @@
	hwpfilter/source/hwp \
	lingucomponent/source/hyphenator/hyphen/hyphen \
	lingucomponent/source/languageguessing/guesslang \
	lingucomponent/source/spellcheck/spell/spell \
	$(if $(filter-out iOS,$(OS)), \
		lingucomponent/source/spellcheck/spell/spell \
		lingucomponent/source/thesaurus/libnth/lnth \
	) \
	lingucomponent/source/numbertext/numbertext \
diff --git a/solenv/bin/native-code.py b/solenv/bin/native-code.py
index 9832da7..0c197cb 100755
--- a/solenv/bin/native-code.py
+++ b/solenv/bin/native-code.py
@@ -281,7 +281,7 @@
    ("lingucomponent_MacSpellChecker_get_implementation", "#ifdef IOS"),
# lingucomponent/source/thesaurus/libnth/lnth.component
    ("lingucomponent_Thesaurus_get_implementation", "#ifndef IOS"),
    ("lingucomponent_SpellChecker_get_implementation", "#ifndef IOS"),
    "lingucomponent_SpellChecker_get_implementation",
    "lingucomponent_LangGuess_get_implementation",
    "lingucomponent_Hyphenator_get_implementation",
# package/source/xstor/xstor.component