summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--external/hunspell/UnpackedTarball_hunspell.mk1
-rw-r--r--external/hunspell/hunspell-tdf95024-compound.patch108
2 files changed, 109 insertions, 0 deletions
diff --git a/external/hunspell/UnpackedTarball_hunspell.mk b/external/hunspell/UnpackedTarball_hunspell.mk
index 6ad31dd685d4..8f14062e47e1 100644
--- a/external/hunspell/UnpackedTarball_hunspell.mk
+++ b/external/hunspell/UnpackedTarball_hunspell.mk
@@ -21,6 +21,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,hunspell,\
external/hunspell/hunspell-morph-overflow.patch \
external/hunspell/ubsan.patch.0 \
external/hunspell/hunspell-1.3.3-rhbz1261421.patch \
+ external/hunspell/hunspell-tdf95024-compound.patch \
))
ifeq ($(COM),MSC)
diff --git a/external/hunspell/hunspell-tdf95024-compound.patch b/external/hunspell/hunspell-tdf95024-compound.patch
new file mode 100644
index 000000000000..133cf4ace537
--- /dev/null
+++ b/external/hunspell/hunspell-tdf95024-compound.patch
@@ -0,0 +1,108 @@
+From 42807f970ac2d65f0d13a7c57eb454b210e92240 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?L=C3=A1szl=C3=B3=20N=C3=A9meth?=
+ <laszlo.nemeth@collabora.com>
+Date: Mon, 12 Oct 2015 08:43:12 +0200
+Subject: [PATCH] fix compound handling for new Hungarian orthography
+
+The frequent cases of this compound limitation are handled by
+the extended dictionary, but not these ones with both derivative
+and inflectional suffixes.
+---
+ src/hunspell/affixmgr.cxx | 19 +++++++++++++++----
+ src/hunspell/affixmgr.hxx | 1 +
+ 2 files changed, 16 insertions(+), 4 deletions(-)
+
+diff --git a/src/hunspell/affixmgr.cxx b/src/hunspell/affixmgr.cxx
+index 0992e6e..0950425 100644
+--- misc/hunspell-1.3.3/src/hunspell/affixmgr.cxx
++++ misc/build/hunspell-1.3.3/src/hunspell/affixmgr.cxx
+@@ -139,8 +139,9 @@ AffixMgr::AffixMgr(const char * affpath, HashMgr** ptr, int * md, const char * k
+ cpdvowels=NULL; // vowels (for calculating of Hungarian compounding limit, O(n) search! XXX)
+ cpdvowels_utf16=NULL; // vowels for UTF-8 encoding (bsearch instead of O(n) search)
+ cpdvowels_utf16_len=0; // vowels
+- pfxappnd=NULL; // previous prefix for counting the syllables of prefix BUG
+- sfxappnd=NULL; // previous suffix for counting a special syllables BUG
++ pfxappnd=NULL; // previous prefix for counting syllables of the prefix BUG
++ sfxappnd=NULL; // previous suffix for counting syllables of the suffix BUG
++ sfxextra=0; // modifier for syllable count of sfxappnd BUG
+ cpdsyllablenum=NULL; // syllable count incrementing flag
+ checknum=0; // checking numbers, and word with numbers
+ wordchars=NULL; // letters + spec. word characters
+@@ -1201,6 +1202,7 @@ struct hentry * AffixMgr::prefix_check(const char * word, int len, char in_compo
+ pfx = NULL;
+ pfxappnd = NULL;
+ sfxappnd = NULL;
++ sfxextra = 0;
+
+ // first handle the special case of 0 length prefixes
+ PfxEntry * pe = pStart[0];
+@@ -1261,6 +1263,7 @@ struct hentry * AffixMgr::prefix_check_twosfx(const char * word, int len,
+
+ pfx = NULL;
+ sfxappnd = NULL;
++ sfxextra = 0;
+
+ // first handle the special case of 0 length prefixes
+ PfxEntry * pe = pStart[0];
+@@ -1302,6 +1305,7 @@ char * AffixMgr::prefix_check_morph(const char * word, int len, char in_compound
+
+ pfx = NULL;
+ sfxappnd = NULL;
++ sfxextra = 0;
+
+ // first handle the special case of 0 length prefixes
+ PfxEntry * pe = pStart[0];
+@@ -1353,6 +1357,7 @@ char * AffixMgr::prefix_check_twosfx_morph(const char * word, int len,
+
+ pfx = NULL;
+ sfxappnd = NULL;
++ sfxextra = 0;
+
+ // first handle the special case of 0 length prefixes
+ PfxEntry * pe = pStart[0];
+@@ -1993,7 +1998,7 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
+ // XXX only second suffix (inflections, not derivations)
+ if (sfxappnd) {
+ char * tmp = myrevstrdup(sfxappnd);
+- numsyllable -= get_syllable(tmp, strlen(tmp));
++ numsyllable -= get_syllable(tmp, strlen(tmp)) + sfxextra;
+ free(tmp);
+ }
+
+@@ -2512,7 +2517,7 @@ int AffixMgr::compound_check_morph(const char * word, int len,
+ // XXX only second suffix (inflections, not derivations)
+ if (sfxappnd) {
+ char * tmp = myrevstrdup(sfxappnd);
+- numsyllable -= get_syllable(tmp, strlen(tmp));
++ numsyllable -= get_syllable(tmp, strlen(tmp)) + sfxextra;
+ free(tmp);
+ }
+
+@@ -2696,6 +2701,12 @@ struct hentry * AffixMgr::suffix_check (const char * word, int len,
+ sfx=sptr; // BUG: sfx not stateless
+ sfxflag = sptr->getFlag(); // BUG: sfxflag not stateless
+ if (!sptr->getCont()) sfxappnd=sptr->getKey(); // BUG: sfxappnd not stateless
++// LANG_hu section: spec. Hungarian rule
++ else if (langnum == LANG_hu && sptr->getKeyLen() && sptr->getKey()[0] == 'i' &&
++ sptr->getKey()[1] != 'y' && sptr->getKey()[1] != 't') {
++ sfxextra = 1;
++ }
++// END of LANG_hu section
+ return rv;
+ }
+ }
+diff --git a/src/hunspell/affixmgr.hxx b/src/hunspell/affixmgr.hxx
+index 2679b7f..8839814 100644
+--- misc/hunspell-1.3.3/src/hunspell/affixmgr.hxx
++++ misc/build/hunspell-1.3.3/src/hunspell/affixmgr.hxx
+@@ -155,6 +155,7 @@ class LIBHUNSPELL_DLL_EXPORTED AffixMgr
+ char * cpdsyllablenum;
+ const char * pfxappnd; // BUG: not stateless
+ const char * sfxappnd; // BUG: not stateless
++ int sfxextra; // BUG: not stateless
+ FLAG sfxflag; // BUG: not stateless
+ char * derived; // BUG: not stateless
+ SfxEntry * sfx; // BUG: not stateless
+--
+1.9.1
+