[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[hunspell] 79/98: Imported Upstream version 1.2.14



This is an automated email from the git hooks/post-receive script.

rene pushed a commit to branch master
in repository hunspell.

commit c338652c000eeb784996199880a674f099d361fa
Author: Rene Engelhard <rene@debian.org>
Date:   Thu Apr 21 14:45:25 2016 +0200

    Imported Upstream version 1.2.14
---
 ChangeLog                                        | 101 +++++
 NEWS                                             |   5 +
 THANKS                                           |   4 +
 aclocal.m4                                       | 103 +----
 configure                                        | 406 ++++++++++----------
 configure.ac                                     |   4 +-
 man/hunspell.4                                   |  47 ++-
 po/hu.gmo                                        | Bin 8812 -> 8812 bytes
 po/hu.po                                         | 146 +++----
 po/hunspell.pot                                  | 147 ++++----
 po/it.gmo                                        | Bin 8847 -> 8847 bytes
 po/it.po                                         | 150 ++++----
 src/hunspell/affentry.cxx                        |   2 +-
 src/hunspell/affixmgr.cxx                        | 142 +++++--
 src/hunspell/affixmgr.hxx                        |   3 +-
 src/hunspell/csutil.cxx                          | 462 ++++++++++++++++++-----
 src/hunspell/csutil.hxx                          |  36 +-
 src/hunspell/hashmgr.cxx                         |   2 +-
 src/hunspell/htypes.hxx                          |   2 +-
 src/hunspell/hunspell.cxx                        |  34 +-
 src/hunspell/replist.cxx                         |   2 +
 src/hunspell/suggestmgr.cxx                      |  49 ++-
 src/hunspell/w_char.hxx                          |   2 +
 src/parsers/htmlparser.cxx                       |   2 +-
 src/tools/hunspell.cxx                           |  28 +-
 src/win_api/Hunspell.rc                          |   8 +-
 src/win_api/Makefile.cygwin                      |  10 +-
 src/win_api/config.h                             |   4 +-
 tests/2970240.aff                                |   5 +
 tests/2970240.dic                                |   4 +
 tests/2970240.good                               |   1 +
 tests/{rep.test => 2970240.test}                 |   0
 tests/2970240.wrong                              |   1 +
 tests/2970242.aff                                |   4 +
 tests/2970242.dic                                |   4 +
 tests/2970242.good                               |   5 +
 tests/{rep.test => 2970242.test}                 |   0
 tests/2970242.wrong                              |   1 +
 tests/2999225.aff                                |   6 +
 tests/2999225.dic                                |   4 +
 tests/2999225.good                               |   2 +
 tests/{rep.test => 2999225.test}                 |   0
 tests/Makefile.am                                |  75 +++-
 tests/Makefile.in                                |  75 +++-
 tests/arabic.aff                                 |   6 +
 tests/arabic.dic                                 |   2 +
 tests/{rep.test => arabic.test}                  |   2 +-
 tests/arabic.wrong                               |   1 +
 tests/breakoff.aff                               |   7 +
 tests/breakoff.dic                               |   6 +
 tests/breakoff.good                              |   3 +
 tests/{rep.test => breakoff.test}                |   2 +-
 tests/breakoff.wrong                             |   5 +
 tests/checkcompoundrep.dic                       |   1 +
 tests/checkcompoundrep.good                      |   1 +
 tests/checkcompoundrep.wrong                     |   2 +
 tests/checksharps.sug                            |   2 +-
 tests/checksharpsutf.sug                         |   2 +-
 tests/encoding.aff                               |   1 +
 tests/encoding.dic                               |   3 +
 tests/encoding.good                              |   4 +
 tests/{rep.test => encoding.test}                |   2 +-
 tests/opentaal_cpdpat.aff                        |  13 +
 tests/opentaal_cpdpat.dic                        |   4 +
 tests/opentaal_cpdpat.good                       |   1 +
 tests/{rep.test => opentaal_cpdpat.test}         |   0
 tests/opentaal_cpdpat.wrong                      |   1 +
 tests/opentaal_cpdpat2.aff                       |  27 ++
 tests/opentaal_cpdpat2.dic                       |   4 +
 tests/opentaal_cpdpat2.good                      |   1 +
 tests/{rep.test => opentaal_cpdpat2.test}        |   0
 tests/opentaal_cpdpat2.wrong                     |   1 +
 tests/opentaal_forbiddenword1.aff                |   9 +
 tests/opentaal_forbiddenword1.dic                |   5 +
 tests/opentaal_forbiddenword1.good               |   3 +
 tests/opentaal_forbiddenword1.sug                |   1 +
 tests/{rep.test => opentaal_forbiddenword1.test} |   0
 tests/opentaal_forbiddenword1.wrong              |   5 +
 tests/opentaal_forbiddenword2.aff                |   7 +
 tests/opentaal_forbiddenword2.dic                |   5 +
 tests/opentaal_forbiddenword2.good               |   4 +
 tests/opentaal_forbiddenword2.sug                |   1 +
 tests/{rep.test => opentaal_forbiddenword2.test} |   0
 tests/opentaal_forbiddenword2.wrong              |   5 +
 tests/opentaal_keepcase.aff                      |   8 +
 tests/opentaal_keepcase.dic                      |   7 +
 tests/opentaal_keepcase.good                     |   4 +
 tests/opentaal_keepcase.sug                      |   8 +
 tests/{rep.test => opentaal_keepcase.test}       |   0
 tests/opentaal_keepcase.wrong                    |   8 +
 tests/rep.aff                                    |  15 +-
 tests/rep.dic                                    |   9 +-
 tests/rep.sug                                    |   3 +
 tests/rep.test                                   |   2 +-
 tests/rep.wrong                                  |   6 +
 95 files changed, 1542 insertions(+), 765 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 47fcfd2..a86f751 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,104 @@
+2011-01-06 Németh László <nemeth at OOo>:
+        * affixmgr.cxx: fix freedesktop#32850 (program halt during Hungarian
+          spell checking of the word "6csillagocska6", reported by András Tímár)
+
+        * tools/hunspell.cxx: add Mac OS X Hunspell dictionary paths, asked by
+          Vidar Gundersen in hunfeat#3142010
+
+2011-01-05 Caolán McNamara <cmc at OOo>:
+	* moz#620626 NS_UNICHARUTIL_CID doesn't support
+	  case conversion
+
+2011-01-03 Németh László <nemeth at OOo>:
+	* NEWS and THANKS: update for release 1.2.13
+
+2010-12-20 Németh László <nemeth at OOo>:
+        * affixmgr.cxx: hun#3140784
+
+2010-12-16 Németh László <nemeth at OOo>:
+        * affixmgr.cxx: 
+        - improved fix of hun#2970242 (supporting
+          zero affixes, reported by Ruud Baars
+        - tests/opentaal_cpdpat{,2}: test files
+
+        - switching off default BREAK parameters by BREAK 0,
+          reported by Ruud Baars
+
+        - hun#2999225, reported by Ruud Baars
+
+2010-12-11 Németh László <nemeth at OOo>:
+        * affixmgr.cxx: fix hun#2970242 (CHECKCOMPOUNDPATTERN only with flags),
+          the bug reported by Ruud Baars
+        * tests/2970242.*: test files
+
+        * tests/2970240.*: test files for CHECKCOMPOUNDPATTERN fix (check all
+          boundaries in compound words, fixed by the previous CHECKCOMPOUNDREP
+          fix), the bug reported by Ruud Baars
+
+        * win_api/Makefile.cygwin: update
+
+2010-12-09 Caolán McNamara <cmc at OOo>:
+	* moz#617953 fix leak
+
+2010-11-08 Caolán McNamara <cmc at OOo>:
+	* rhbz#650503 crash in arabic dictionary
+
+2010-11-05 Caolán McNamara <cmc at OOo>:
+	* rhbz#648740 don't warn on empty flagvector
+
+2010-11-03 Caolán McNamara <cmc at OOo>:
+	* logically we shouldn't need a csconv table in utf-8 mode
+
+2010-10-27 Németh László <nemeth at OOo>:
+	* hun#3000055 (requested by Ruud Baars) add REP boundary specifiation:
+	  REP ^word$ xxxx
+	  REP ^wordstarting xxxx
+	  REP wordending$ xxxx
+
+	* hun#3008434 (requested by Adrián Chaves Fernández) and
+	  hun#3018929 (requested by Ruud Baars): REP with more than 2 words:
+	  REP morethantwo more_than_two
+
+	* suggestmgr.cxx: fix incomplete suggestion list for capitalized words,
+	  eg. missing Machtstrijd->Machtsstrijd in the Dutch dictionary
+	  (reported by Ruud Bars)
+
+	* tests, man: related updates
+
+2010-10-12 Caolán McNamara <cmc at OOo>:
+	* moz#603311 HashMgr::load_tables leaks dict when decode_flags fails
+	* fix mem leak found with new tests
+	* hun#3084340 allow underscores in html entity names
+
+2010-10-07 Németh László <nemeth at OOo>:
+	* affixmgr.cxx: 
+	- hun#2970239 fix bad suggestion of forbidden compound words
+	- hun#2999224 fix keepcase feature on compound words (only partial
+	  fix for COMPOUNDRULE based compounding)
+	- fix checkcompoundrep feature in compound words (check all boundaries,
+	  not only the last one)
+	  Problems reported by Ruud Baars.
+	  
+	* tests/opentaal_forbiddenword[12]*, tests/opentaal_keepcase*:
+	  new test files for the previous fixes
+	* tests/checkcompoundrep: extended test file.
+
+2010-09-05 Caolán McNamara <cmc at OOo>:
+	* moz#583582 fix double buffer gcc fortify issue
+
+2010-08-13 Caolán McNamara <cmc at OOo>:
+	* moz#586671 AffixMgr::parse_convtable leaks pattern/pattern2 if it
+	can't create both
+	* moz#586686 tidy up get_xml_list and friends
+
+2010-08-10 Caolán McNamara <cmc at OOo>:
+	* hun#3022860 fix remove duplicate code
+
+2010-07-17 Caolán McNamara <cmc at OOo>:
+	* remove ununsed get_default_enc and avoid potential misrecognition of
+	three letter language ids
+	* normalize encoding names before lookup
+
 2010-07-05 Caolán McNamara <cmc at OOo>:
 	* hun#2286060 add Hangul syllables to unicode tables
 
diff --git a/NEWS b/NEWS
index 6fd4328..d766dba 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,8 @@
+2011-01-03: Hunspell 1.2.13 release:
+  - bug fixes
+  - improved compound handling and
+    other improvements supported by OpenTaal Foundation, Netherlands
+2010-07-15: Hunspell 1.2.12 release
 2010-05-06: Hunspell 1.2.11 release:
   - Maintenance release bug fixes
 2010-04-30: Hunspell 1.2.10 release:
diff --git a/THANKS b/THANKS
index eba5a59..f6db777 100644
--- a/THANKS
+++ b/THANKS
@@ -120,6 +120,10 @@ http://www.imedia.hu
 OpenOffice.org community
 http://www.openoffice.org
 
+OpenTaal Foundation, Netherlands and
+Dutch Language Union (Nederlandse Taalunie)
+http://opentaal.org
+
 UHU-Linux Kft.
 
 Thanks,
diff --git a/aclocal.m4 b/aclocal.m4
index f60472a..76ec4de 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -13,111 +13,12 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.66],,
-[m4_warning([this file was generated for autoconf 2.66.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
+[m4_warning([this file was generated for autoconf 2.65.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
 
-# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
-#
-#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004.
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 5 lt~obsolete.m4
-
-# These exist entirely to fool aclocal when bootstrapping libtool.
-#
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
-# which have later been changed to m4_define as they aren't part of the
-# exported API, or moved to Autoconf or Automake where they belong.
-#
-# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
-# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
-# using a macro with the same name in our local m4/libtool.m4 it'll
-# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
-# and doesn't know about Autoconf macros at all.)
-#
-# So we provide this file, which has a silly filename so it's always
-# included after everything else.  This provides aclocal with the
-# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
-# because those macros already exist, or will be overwritten later.
-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
-#
-# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
-# Yes, that means every name once taken will need to remain here until
-# we give up compatibility with versions before 1.7, at which point
-# we need to keep only those names which we still refer to.
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
-
-m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
-m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
-m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
-m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
-m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
-m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
-m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
-m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
-m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
-m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
-m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
-m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
-m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
-m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
-m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
-m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
-m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
-m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
-m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
-m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
-m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
-m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
-m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
-m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
-m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
-m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
-m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
-m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
-m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
-m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
-m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
-m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
-m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
-m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
-m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
-m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
-m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
-m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
-m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
-m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
-m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
-m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
-m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
-m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
-m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],	[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
-m4_ifndef([_LT_AC_PROG_CXXCPP],		[AC_DEFUN([_LT_AC_PROG_CXXCPP])])
-m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],	[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
-m4_ifndef([_LT_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_PROG_F77],		[AC_DEFUN([_LT_PROG_F77])])
-m4_ifndef([_LT_PROG_FC],		[AC_DEFUN([_LT_PROG_FC])])
-m4_ifndef([_LT_PROG_CXX],		[AC_DEFUN([_LT_PROG_CXX])])
-
 # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
diff --git a/configure b/configure
index 3ad07c5..c103c95 100755
--- a/configure
+++ b/configure
@@ -1,13 +1,13 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.66 for hunspell 1.2.12.
+# Generated by GNU Autoconf 2.65 for hunspell 1.2.14.
 #
 # Report bugs to <nemeth@openoffice.org>.
 #
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -319,7 +319,7 @@ $as_echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -359,19 +359,19 @@ else
 fi # as_fn_arith
 
 
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
 # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
 # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
+# script with status $?, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  as_status=$?; test $as_status -eq 0 && as_status=1
+  if test "$3"; then
+    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
   fi
-  $as_echo "$as_me: error: $2" >&2
+  $as_echo "$as_me: error: $1" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -682,7 +682,7 @@ test -n "$DJDIR" || exec 7<&0 </dev/null
 exec 6>&1
 
 # Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
 # so uname gets run too.
 ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
 
@@ -701,8 +701,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='hunspell'
 PACKAGE_TARNAME='hunspell'
-PACKAGE_VERSION='1.2.12'
-PACKAGE_STRING='hunspell 1.2.12'
+PACKAGE_VERSION='1.2.14'
+PACKAGE_STRING='hunspell 1.2.14'
 PACKAGE_BUGREPORT='nemeth@openoffice.org'
 PACKAGE_URL=''
 
@@ -1062,7 +1062,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
+      as_fn_error "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1088,7 +1088,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
+      as_fn_error "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1292,7 +1292,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
+      as_fn_error "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1308,7 +1308,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
+      as_fn_error "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1338,8 +1338,8 @@ do
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
+  -*) as_fn_error "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information."
     ;;
 
   *=*)
@@ -1347,7 +1347,7 @@ Try \`$0 --help' for more information"
     # Reject names that are not valid shell variable names.
     case $ac_envvar in #(
       '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
     esac
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
@@ -1365,13 +1365,13 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error $? "missing argument to $ac_option"
+  as_fn_error "missing argument to $ac_option"
 fi
 
 if test -n "$ac_unrecognized_opts"; then
   case $enable_option_checking in
     no) ;;
-    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
@@ -1394,7 +1394,7 @@ do
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
 done
 
 # There might be people who depend on the old broken behavior: `$host'
@@ -1408,8 +1408,8 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
+    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1424,9 +1424,9 @@ test "$silent" = yes && exec 6>/dev/null
 ac_pwd=`pwd` && test -n "$ac_pwd" &&
 ac_ls_di=`ls -di .` &&
 ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error $? "working directory cannot be determined"
+  as_fn_error "working directory cannot be determined"
 test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error $? "pwd does not report name of working directory"
+  as_fn_error "pwd does not report name of working directory"
 
 
 # Find the source files, if location was not specified.
@@ -1465,11 +1465,11 @@ else
 fi
 if test ! -r "$srcdir/$ac_unique_file"; then
   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
 fi
 ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
 ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
 	pwd)`
 # When building in place, set srcdir=.
 if test "$ac_abs_confdir" = "$ac_pwd"; then
@@ -1495,7 +1495,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures hunspell 1.2.12 to adapt to many kinds of systems.
+\`configure' configures hunspell 1.2.14 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1509,7 +1509,7 @@ Configuration:
       --help=short        display options specific to this package
       --help=recursive    display the short help of all the included packages
   -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking ...' messages
+  -q, --quiet, --silent   do not print \`checking...' messages
       --cache-file=FILE   cache test results in FILE [disabled]
   -C, --config-cache      alias for \`--cache-file=config.cache'
   -n, --no-create         do not create output files
@@ -1566,7 +1566,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of hunspell 1.2.12:";;
+     short | recursive ) echo "Configuration of hunspell 1.2.14:";;
    esac
   cat <<\_ACEOF
 
@@ -1685,10 +1685,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-hunspell configure 1.2.12
-generated by GNU Autoconf 2.66
+hunspell configure 1.2.14
+generated by GNU Autoconf 2.65
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2009 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1830,7 +1830,7 @@ ac_fn_c_check_header_compile ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1939,7 +1939,7 @@ ac_fn_c_check_func ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2089,10 +2089,10 @@ fi
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval "test \"\${$3+set}\"" = set; then :
+  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -2151,15 +2151,17 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
 $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## ------------------------------------ ##
+( cat <<\_ASBOX
+## ------------------------------------ ##
 ## Report this to nemeth@openoffice.org ##
-## ------------------------------------ ##"
+## ------------------------------------ ##
+_ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -2181,7 +2183,7 @@ ac_fn_c_check_type ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -2407,8 +2409,8 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by hunspell $as_me 1.2.12, which was
-generated by GNU Autoconf 2.66.  Invocation command line was
+It was created by hunspell $as_me 1.2.14, which was
+generated by GNU Autoconf 2.65.  Invocation command line was
 
   $ $0 $@
 
@@ -2518,9 +2520,11 @@ trap 'exit_status=$?
   {
     echo
 
-    $as_echo "## ---------------- ##
+    cat <<\_ASBOX
+## ---------------- ##
 ## Cache variables. ##
-## ---------------- ##"
+## ---------------- ##
+_ASBOX
     echo
     # The following way of writing the cache mishandles newlines in values,
 (
@@ -2554,9 +2558,11 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 )
     echo
 
-    $as_echo "## ----------------- ##
+    cat <<\_ASBOX
+## ----------------- ##
 ## Output variables. ##
-## ----------------- ##"
+## ----------------- ##
+_ASBOX
     echo
     for ac_var in $ac_subst_vars
     do
@@ -2569,9 +2575,11 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
     echo
 
     if test -n "$ac_subst_files"; then
-      $as_echo "## ------------------- ##
+      cat <<\_ASBOX
+## ------------------- ##
 ## File substitutions. ##
-## ------------------- ##"
+## ------------------- ##
+_ASBOX
       echo
       for ac_var in $ac_subst_files
       do
@@ -2585,9 +2593,11 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
     fi
 
     if test -s confdefs.h; then
-      $as_echo "## ----------- ##
+      cat <<\_ASBOX
+## ----------- ##
 ## confdefs.h. ##
-## ----------- ##"
+## ----------- ##
+_ASBOX
       echo
       cat confdefs.h
       echo
@@ -2642,12 +2652,7 @@ _ACEOF
 ac_site_file1=NONE
 ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  # We do not want a PATH search for config.site.
-  case $CONFIG_SITE in #((
-    -*)  ac_site_file1=./$CONFIG_SITE;;
-    */*) ac_site_file1=$CONFIG_SITE;;
-    *)   ac_site_file1=./$CONFIG_SITE;;
-  esac
+  ac_site_file1=$CONFIG_SITE
 elif test "x$prefix" != xNONE; then
   ac_site_file1=$prefix/share/config.site
   ac_site_file2=$prefix/etc/config.site
@@ -2662,11 +2667,7 @@ do
     { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
 $as_echo "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file" \
-      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
+    . "$ac_site_file"
   fi
 done
 
@@ -2746,7 +2747,7 @@ if $ac_cache_corrupted; then
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
   { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
 fi
 ## -------------------- ##
 ## Main body of script. ##
@@ -2762,22 +2763,16 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
+  for ac_t in install-sh install.sh shtool; do
+    if test -f "$ac_dir/$ac_t"; then
+      ac_aux_dir=$ac_dir
+      ac_install_sh="$ac_aux_dir/$ac_t -c"
+      break 2
+    fi
+  done
 done
 if test -z "$ac_aux_dir"; then
-  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+  as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
 fi
 
 # These three variables are undocumented and unsupported,
@@ -2791,7 +2786,7 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
@@ -2802,16 +2797,16 @@ else
 test "x$ac_build_alias" = x &&
   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
 test "x$ac_build_alias" = x &&
-  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
 $as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -2836,7 +2831,7 @@ else
   ac_cv_host=$ac_cv_build
 else
   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
@@ -2844,7 +2839,7 @@ fi
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -2869,7 +2864,7 @@ else
   ac_cv_target=$ac_cv_host
 else
   ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
+    as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
 fi
 
 fi
@@ -2877,7 +2872,7 @@ fi
 $as_echo "$ac_cv_target" >&6; }
 case $ac_cv_target in
 *-*-*) ;;
-*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+*) as_fn_error "invalid value of canonical target" "$LINENO" 5;;
 esac
 target=$ac_cv_target
 ac_save_IFS=$IFS; IFS='-'
@@ -3008,11 +3003,11 @@ am_lf='
 '
 case `pwd` in
   *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+    as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
 esac
 
 # Do `set' in a subshell so we don't clobber the current shell's
@@ -3034,7 +3029,7 @@ if (
       # if, for instance, CONFIG_SHELL is bash and it inherits a
       # broken ls alias from the environment.  This has actually
       # happened.  Such a system could not be considered "sane".
-      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+      as_fn_error "ls -t appears to fail.  Make sure there is not a broken
 alias in your environment" "$LINENO" 5
    fi
 
@@ -3044,7 +3039,7 @@ then
    # Ok.
    :
 else
-   as_fn_error $? "newly created file is older than distributed files!
+   as_fn_error "newly created file is older than distributed files!
 Check your system clock" "$LINENO" 5
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -3282,7 +3277,7 @@ done
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -3290,7 +3285,7 @@ SHELL = /bin/sh
 all:
 	@echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
 case `${MAKE-make} -f conftest.make 2>/dev/null` in
   *@@@%%%=?*=@@@%%%*)
     eval ac_cv_prog_make_${ac_make}_set=yes;;
@@ -3324,7 +3319,7 @@ if test "`cd $srcdir && pwd`" != "`pwd`"; then
   am__isrc=' -I$(srcdir)'
   # test to see if srcdir already configured
   if test -f $srcdir/config.status; then
-    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+    as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
   fi
 fi
 
@@ -3340,7 +3335,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE=hunspell
- VERSION=1.2.12
+ VERSION=1.2.14
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3613,8 +3608,9 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C++ compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
+{ as_fn_set_status 77
+as_fn_error "C++ compiler cannot create executables
+See \`config.log' for more details." "$LINENO" 5; }; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
@@ -3656,8 +3652,8 @@ done
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
+as_fn_error "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." "$LINENO" 5; }
 fi
 rm -f conftest conftest$ac_cv_exeext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
@@ -3714,9 +3710,9 @@ $as_echo "$ac_try_echo"; } >&5
     else
 	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C++ compiled programs.
+as_fn_error "cannot run C++ compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
+See \`config.log' for more details." "$LINENO" 5; }
     fi
   fi
 fi
@@ -3767,8 +3763,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
+as_fn_error "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." "$LINENO" 5; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
@@ -4386,8 +4382,8 @@ fi
 
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
+as_fn_error "no acceptable C compiler found in \$PATH
+See \`config.log' for more details." "$LINENO" 5; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -4835,7 +4831,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_SED"; then
-    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+    as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
   fi
 else
   ac_cv_path_SED=$SED
@@ -4911,7 +4907,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_GREP"; then
-    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_GREP=$GREP
@@ -4977,7 +4973,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_EGREP=$EGREP
@@ -5044,7 +5040,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_FGREP"; then
-    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_FGREP=$FGREP
@@ -5160,7 +5156,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
 if test "${lt_cv_prog_gnu_ld+set}" = set; then :
@@ -5362,13 +5358,13 @@ if test "${lt_cv_nm_interface+set}" = set; then :
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:5365: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:5361: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5368: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:5364: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5371: output\"" >&5)
+  (eval echo "\"\$as_me:5367: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -6574,7 +6570,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 6577 "configure"' > conftest.$ac_ext
+  echo '#line 6573 "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -7448,8 +7444,8 @@ if $ac_preproc_ok; then :
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
+as_fn_error "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -7578,7 +7574,8 @@ do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
 "
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -8630,11 +8627,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8633: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8630: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8637: \$? = $ac_status" >&5
+   echo "$as_me:8634: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8969,11 +8966,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8972: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8969: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8976: \$? = $ac_status" >&5
+   echo "$as_me:8973: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -9074,11 +9071,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9077: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:9074: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:9081: \$? = $ac_status" >&5
+   echo "$as_me:9078: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -9129,11 +9126,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9132: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:9129: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:9136: \$? = $ac_status" >&5
+   echo "$as_me:9133: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -11499,7 +11496,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11502 "configure"
+#line 11499 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11595,7 +11592,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11598 "configure"
+#line 11595 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12010,7 +12007,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
 if test "${lt_cv_prog_gnu_ld+set}" = set; then :
@@ -13551,11 +13548,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13554: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13551: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:13558: \$? = $ac_status" >&5
+   echo "$as_me:13555: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -13650,11 +13647,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13653: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13650: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13657: \$? = $ac_status" >&5
+   echo "$as_me:13654: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -13702,11 +13699,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13705: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13702: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13709: \$? = $ac_status" >&5
+   echo "$as_me:13706: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -14966,7 +14963,8 @@ for ac_header in fcntl.h libintl.h locale.h unistd.h error.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -15252,7 +15250,8 @@ for ac_func in memchr setlocale strchr strstr
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+eval as_val=\$$as_ac_var
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
@@ -15911,7 +15910,8 @@ if test $ac_cv_os_cray = yes; then
   for ac_func in _getb67 GETB67 getb67; do
     as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+eval as_val=\$$as_ac_var
+   if test "x$as_val" = x""yes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define CRAY_STACKSEG_END $ac_func
@@ -15981,7 +15981,8 @@ do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
 "
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -16646,7 +16647,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
 if test "${acl_cv_prog_gnu_ld+set}" = set; then :
@@ -18051,7 +18052,8 @@ rm -f core conftest.err conftest.$ac_objext \
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -18066,7 +18068,8 @@ done
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+eval as_val=\$$as_ac_var
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
@@ -19024,7 +19027,8 @@ fi
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -19037,7 +19041,8 @@ done
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+eval as_val=\$$as_ac_var
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
@@ -19536,7 +19541,7 @@ typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
 
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
 $as_echo_n "checking for GNU gettext in libc... " >&6; }
-if eval "test \"\${$gt_func_gnugettext_libc+set}\"" = set; then :
+if { as_var=$gt_func_gnugettext_libc; eval "test \"\${$as_var+set}\" = set"; }; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20005,7 +20010,7 @@ fi
 
           { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
 $as_echo_n "checking for GNU gettext in libintl... " >&6; }
-if eval "test \"\${$gt_func_gnugettext_libintl+set}\"" = set; then :
+if { as_var=$gt_func_gnugettext_libintl; eval "test \"\${$as_var+set}\" = set"; }; then :
   $as_echo_n "(cached) " >&6
 else
   gt_save_CPPFLAGS="$CPPFLAGS"
@@ -20642,7 +20647,6 @@ DEFS=-DHAVE_CONFIG_H
 
 ac_libobjs=
 ac_ltlibobjs=
-U=
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
@@ -20666,19 +20670,19 @@ else
 fi
 
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error $? "conditional \"AMDEP\" was never defined.
+  as_fn_error "conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+  as_fn_error "conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
@@ -20828,19 +20832,19 @@ export LANGUAGE
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
 # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
 # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
+# script with status $?, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  as_status=$?; test $as_status -eq 0 && as_status=1
+  if test "$3"; then
+    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
   fi
-  $as_echo "$as_me: error: $2" >&2
+  $as_echo "$as_me: error: $1" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -21036,7 +21040,7 @@ $as_echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -21089,8 +21093,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by hunspell $as_me 1.2.12, which was
-generated by GNU Autoconf 2.66.  Invocation command line was
+This file was extended by hunspell $as_me 1.2.14, which was
+generated by GNU Autoconf 2.65.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -21155,11 +21159,11 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-hunspell config.status 1.2.12
-configured by $0, generated by GNU Autoconf 2.66,
+hunspell config.status 1.2.14
+configured by $0, generated by GNU Autoconf 2.65,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2009 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -21215,7 +21219,7 @@ do
     ac_need_defaults=false;;
   --he | --h)
     # Conflict between --help and --header
-    as_fn_error $? "ambiguous option: \`$1'
+    as_fn_error "ambiguous option: \`$1'
 Try \`$0 --help' for more information.";;
   --help | --hel | -h )
     $as_echo "$ac_cs_usage"; exit ;;
@@ -21224,7 +21228,7 @@ Try \`$0 --help' for more information.";;
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) as_fn_error $? "unrecognized option: \`$1'
+  -*) as_fn_error "unrecognized option: \`$1'
 Try \`$0 --help' for more information." ;;
 
   *) as_fn_append ac_config_targets " $1"
@@ -21658,7 +21662,7 @@ do
     "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
     "tests/suggestiontest/Makefile") CONFIG_FILES="$CONFIG_FILES tests/suggestiontest/Makefile" ;;
 
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
@@ -21696,7 +21700,7 @@ $debug ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -21713,7 +21717,7 @@ if test "x$ac_cr" = x; then
 fi
 ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
 if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\\r'
+  ac_cs_awk_cr='\r'
 else
   ac_cs_awk_cr=$ac_cr
 fi
@@ -21727,18 +21731,18 @@ _ACEOF
   echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
   echo "_ACEOF"
 } >conf$$subs.sh ||
-  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   . ./conf$$subs.sh ||
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
 
   ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
   if test $ac_delim_n = $ac_delim_num; then
     break
   elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -21827,28 +21831,20 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
 else
   cat
 fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
-  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+  || as_fn_error "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
 # trailing colons and then remove the whole line if VPATH becomes empty
 # (actually we leave an empty line to preserve line numbers).
 if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
-h
-s///
-s/^/:/
-s/[	 ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[	 ]*\):*/\1/
 s/:*$//
-x
-s/\(=[	 ]*\).*/\1/
-G
-s/\n//
 s/^[^=]*=[	 ]*$//
 }'
 fi
@@ -21876,7 +21872,7 @@ for ac_last_try in false false :; do
   if test -z "$ac_t"; then
     break
   elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -21961,7 +21957,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
 _ACEOF
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+  as_fn_error "could not setup config headers machinery" "$LINENO" 5
 fi # test -n "$CONFIG_HEADERS"
 
 
@@ -21974,7 +21970,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -22002,7 +21998,7 @@ do
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
@@ -22029,7 +22025,7 @@ $as_echo "$as_me: creating $ac_file" >&6;}
 
     case $ac_tag in
     *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -22166,22 +22162,22 @@ s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
 eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+  || as_fn_error "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
   { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
   { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&5
+which seems to be undefined.  Please make sure it is defined." >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&2;}
+which seems to be undefined.  Please make sure it is defined." >&2;}
 
   rm -f "$tmp/stdin"
   case $ac_file in
   -) cat "$tmp/out" && rm -f "$tmp/out";;
   *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
   esac \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+  || as_fn_error "could not create $ac_file" "$LINENO" 5
  ;;
   :H)
   #
@@ -22192,19 +22188,19 @@ which seems to be undefined.  Please make sure it is defined" >&2;}
       $as_echo "/* $configure_input  */" \
       && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
     } >"$tmp/config.h" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+      || as_fn_error "could not create $ac_file" "$LINENO" 5
     if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
       mv "$tmp/config.h" "$ac_file" \
-	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+	|| as_fn_error "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
       && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error $? "could not create -" "$LINENO" 5
+      || as_fn_error "could not create -" "$LINENO" 5
   fi
 # Compute "$ac_file"'s index in $config_headers.
 _am_arg="$ac_file"
@@ -23275,7 +23271,7 @@ _ACEOF
 ac_clean_files=$ac_clean_files_save
 
 test $ac_write_fail = 0 ||
-  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
 
 
 # configure is writing to config.log, and then calls config.status.
@@ -23296,7 +23292,7 @@ if test "$no_create" != yes; then
   exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit 1
+  $ac_cs_success || as_fn_exit $?
 fi
 if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
diff --git a/configure.ac b/configure.ac
index 8cf7df5..3dcf181 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,12 +4,12 @@
 m4_pattern_allow
 
 AC_PREREQ(2.59)
-AC_INIT([hunspell],[1.2.12],[nemeth@openoffice.org])
+AC_INIT([hunspell],[1.2.14],[nemeth@openoffice.org])
 
 AC_CANONICAL_SYSTEM
 AC_SUBST(XFAILED)
 
-AM_INIT_AUTOMAKE(hunspell, 1.2.12)
+AM_INIT_AUTOMAKE(hunspell, 1.2.14)
 HUNSPELL_VERSION_MAJOR=`echo $VERSION | cut -d"." -f1`
 HUNSPELL_VERSION_MINOR=`echo $VERSION | cut -d"." -f2`
 AC_SUBST(HUNSPELL_VERSION_MAJOR)
diff --git a/man/hunspell.4 b/man/hunspell.4
index fb54f67..d200741 100644
--- a/man/hunspell.4
+++ b/man/hunspell.4
@@ -1,4 +1,4 @@
-.TH hunspell 4 "2010-03-03"
+.TH hunspell 4 "2010-12-16"
 .LO 1
 .SH NAME
 hunspell \- format of Hunspell dictionaries and affix files
@@ -229,35 +229,33 @@ First REP is the header of this table and one or more REP data
 line are following it. With this table, Hunspell can suggest the right forms for the typical 
 faults of spelling when the incorrect form differs by more, 
 than 1 letter from the right form.
+The search string supports the regex boundary signs (^ and $).
 For example a possible English replacement table definition
 to handle misspelled consonants:
 .PP
 .RS
 .nf
-REP 8
+REP 5
 REP f ph
 REP ph f
-REP f gh
-REP gh f
-REP j dg
-REP dg j
-REP k ch
-REP ch k
+REP tion$ shun
+REP ^cooccurr co-occurr
+REP ^alot$ a_lot
 .fi
 .RE
 .PP
+
 Note I: It's very useful to define replacements for the most typical one-character mistakes, too:
 with REP you can add higher priority to a subset of the TRY suggestions (suggestion list
 begins with the REP suggestions).
 
-Note II: Suggesting separated words by REP, you can specify a space with an
-underline:
+Note II: Suggesting separated words, specify spaces with underlines:
 
 .PP
 .RS
 .nf
 REP 1
-REP alot a_lot
+REP onetwothree one_two_three
 .fi
 .RE
 .PP
@@ -350,13 +348,22 @@ BREAK -
 .fi
 .RE
 .PP
-W
+
+Switching off the default values:
+.PP
+.RS
+.nf
+BREAK 0
+.fi
+.RE
+.PP
+
 Note II: COMPOUNDRULE is better (or will be better) for handling dashes and
 other  compound joining characters or character strings. Use BREAK, if you
-want check words with dashes or other joining characters and there is no time
+want to check words with dashes or other joining characters and there is no time
 or possibility to describe precise compound rules with COMPOUNDRULE
-(COMPOUNDRULE has handled only the last suffixation of
-the compound word yet).
+(COMPOUNDRULE handles only the suffixation of the last word part of a
+compound word).
 
 Note III: For command line spell checking of words with extra characters,
 set WORDCHARS parameters: WORDCHARS -\fB--\fR (see tests/break.*) example
@@ -431,6 +438,16 @@ the old German orthography: Schiff|fahrt -> Schiffahrt).
 Forbid compounding, if the first word in the compound ends with endchars, and
 next word begins with beginchars and (optionally) they have the requested flags.
 The optional replacement parameter allows simplified compound form.
+
+The special "endchars" pattern 0 (zero) limits the rule to the unmodified stems (stems
+and stems with zero affixes):
+.PP
+.RS
+.nf
+CHECKCOMPOUNDPATTERN 0/x /y
+.fi
+.RE
+.PP
 Note: COMPOUNDMIN doesn't work correctly with the compound word alternation,
 so it may need to set COMPOUNDMIN to lower value.
 .IP "COMPOUNDSYLLABLE max_syllable vowels"
diff --git a/po/hu.gmo b/po/hu.gmo
index 76b43f3..f67d2f1 100644
Binary files a/po/hu.gmo and b/po/hu.gmo differ
diff --git a/po/hu.po b/po/hu.po
index e8d9383..2663f3f 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,41 +8,41 @@ msgid ""
 msgstr ""
 "Project-Id-Version: hunspell\n"
 "Report-Msgid-Bugs-To: nemeth@openoffice.org\n"
-"POT-Creation-Date: 2010-07-14 08:39+0100\n"
+"POT-Creation-Date: 2011-01-06 13:57+0100\n"
 "PO-Revision-Date: 2005-09-03 11:22+0200\n"
 "Last-Translator: László Németh <nemeth dot lacko at gmail>\n"
 "Language-Team: Hungarian <openscope.org>\n"
-"Language: hu\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Language: hu\n"
 
-#: src/tools/hunspell.cxx:192 src/tools/hunspell.cxx:300
+#: src/tools/hunspell.cxx:204 src/tools/hunspell.cxx:312
 #, c-format
 msgid "error - iconv_open: %s -> %s\n"
 msgstr "hiba - iconv_open: %s -> %s\n"
 
-#: src/tools/hunspell.cxx:235 src/tools/hunspell.cxx:258
+#: src/tools/hunspell.cxx:247 src/tools/hunspell.cxx:270
 #, c-format
 msgid "error - iconv_open: UTF-8 -> %s\n"
 msgstr "hiba - iconv_open: UTF-8 -> %s\n"
 
-#: src/tools/hunspell.cxx:550 src/tools/hunspell.cxx:1072
-#: src/tools/hunspell.cxx:1202
+#: src/tools/hunspell.cxx:562 src/tools/hunspell.cxx:1084
+#: src/tools/hunspell.cxx:1214
 #, c-format
 msgid "error - missing HOME variable\n"
 msgstr "hiba - nincs definiálva a HOME környezeti változó\n"
 
-#: src/tools/hunspell.cxx:633
+#: src/tools/hunspell.cxx:645
 #, c-format
 msgid "Line %d: %s -> "
 msgstr "%d. sor: %s -> "
 
-#: src/tools/hunspell.cxx:879
+#: src/tools/hunspell.cxx:891
 msgid "FORBIDDEN!"
 msgstr "TILTOTT!"
 
-#: src/tools/hunspell.cxx:880
+#: src/tools/hunspell.cxx:892
 #, c-format
 msgid ""
 "\t%s\t\tFile: %s\n"
@@ -51,7 +51,7 @@ msgstr ""
 "\t%s\t\tFájl: %s\n"
 "\n"
 
-#: src/tools/hunspell.cxx:933
+#: src/tools/hunspell.cxx:945
 msgid ""
 "\n"
 "[SPACE] R)epl A)ccept I)nsert U)ncap S)tem Q)uit e(X)it or ? for help\n"
@@ -60,7 +60,7 @@ msgstr ""
 "Szóköz=tovább <szám> C)sere J)ó F)elvesz K)isbetűvel T)ő M)égsem V)ége ?"
 "=Súgó\n"
 
-#: src/tools/hunspell.cxx:999
+#: src/tools/hunspell.cxx:1011
 msgid ""
 "Whenever a word is found that is not in the dictionary\n"
 "it is printed on the first line of the screen.  If the dictionary\n"
@@ -74,7 +74,7 @@ msgstr ""
 "egyet, de megadhatunk akár egy új szót is.\n"
 "Részletes leírás a program lehetőségeiről: man hunspell.\n"
 
-#: src/tools/hunspell.cxx:1004
+#: src/tools/hunspell.cxx:1016
 msgid ""
 "\n"
 "Commands are:\n"
@@ -84,28 +84,28 @@ msgstr ""
 "Billentyűparancsok: \n"
 "\n"
 
-#: src/tools/hunspell.cxx:1005
+#: src/tools/hunspell.cxx:1017
 msgid "R\tReplace the misspelled word completely.\n"
 msgstr "C\tA hibás szó kicserélése egy megadott szóra.\n"
 
-#: src/tools/hunspell.cxx:1006
+#: src/tools/hunspell.cxx:1018
 msgid "Space\tAccept the word this time only.\n"
 msgstr "Szóköz\tA szó egyszeri átugrása változtatás nélkül.\n"
 
-#: src/tools/hunspell.cxx:1007
+#: src/tools/hunspell.cxx:1019
 msgid "A\tAccept the word for the rest of this session.\n"
 msgstr "J\tA szó minden előfordulását jónak tekinti a program futása során.\n"
 
-#: src/tools/hunspell.cxx:1008
+#: src/tools/hunspell.cxx:1020
 msgid "I\tAccept the word, and put it in your private dictionary.\n"
 msgstr ""
 "F\tA szót felveszi a saját szótárba, így új indításkor is ismerni fogja.\n"
 
-#: src/tools/hunspell.cxx:1009
+#: src/tools/hunspell.cxx:1021
 msgid "U\tAccept and add lowercase version to private dictionary.\n"
 msgstr "K\tMint az előző, de a szót kisbetűsen veszi fel a saját szótárba.\n"
 
-#: src/tools/hunspell.cxx:1011
+#: src/tools/hunspell.cxx:1023
 msgid ""
 "S\tAsk a stem and a model word and store them in the private dictionary.\n"
 "\tThe stem will be accepted also with the affixes of the model word.\n"
@@ -113,28 +113,28 @@ msgstr ""
 "T\tSzótő és mintaszó bekérése és saját szótárban való tárolása.\n"
 "\tA tő felveheti a mintául megadott szó toldalékait is.\n"
 
-#: src/tools/hunspell.cxx:1014
+#: src/tools/hunspell.cxx:1026
 msgid "0-n\tReplace with one of the suggested words.\n"
 msgstr "0-n\tA javasolt szavak közül az adott sorszámúra cserél.\n"
 
-#: src/tools/hunspell.cxx:1015
+#: src/tools/hunspell.cxx:1027
 msgid ""
 "X\tWrite the rest of this file, ignoring misspellings, and start next file.\n"
 msgstr "V\tMenti az eddigi javításokat, és rátér a következő fájlra.\n"
 
-#: src/tools/hunspell.cxx:1016
+#: src/tools/hunspell.cxx:1028
 msgid "Q\tQuit immediately. Asks for confirmation. Leaves file unchanged.\n"
 msgstr "M\tKilép a javítások mentése nélkül, de előtte megerősítést kér.\n"
 
-#: src/tools/hunspell.cxx:1017
+#: src/tools/hunspell.cxx:1029
 msgid "^Z\tSuspend program. Restart with fg command.\n"
 msgstr "^Z\tA program felfüggesztése. Újraindítás fg paranccsal.\n"
 
-#: src/tools/hunspell.cxx:1018
+#: src/tools/hunspell.cxx:1030
 msgid "?\tShow this help screen.\n"
 msgstr "?\tEnnek a leírásnak a megjelenítése.\n"
 
-#: src/tools/hunspell.cxx:1019
+#: src/tools/hunspell.cxx:1031
 msgid ""
 "\n"
 "-- Type space to continue -- \n"
@@ -144,11 +144,11 @@ msgstr ""
 
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "R)epl" before
-#: src/tools/hunspell.cxx:1029
+#: src/tools/hunspell.cxx:1041
 msgid "r"
 msgstr "c"
 
-#: src/tools/hunspell.cxx:1041
+#: src/tools/hunspell.cxx:1053
 msgid "Replace with: "
 msgstr "Csere: "
 
@@ -156,73 +156,73 @@ msgstr "Csere: "
 #. previously in the  translation of "U)ncap" and I)nsert before
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "U)ncap" and I)nsert before
-#: src/tools/hunspell.cxx:1062 src/tools/hunspell.cxx:1094
+#: src/tools/hunspell.cxx:1074 src/tools/hunspell.cxx:1106
 msgid "u"
 msgstr "k"
 
-#: src/tools/hunspell.cxx:1063 src/tools/hunspell.cxx:1094
+#: src/tools/hunspell.cxx:1075 src/tools/hunspell.cxx:1106
 msgid "i"
 msgstr "f"
 
-#: src/tools/hunspell.cxx:1088 src/tools/hunspell.cxx:1218
+#: src/tools/hunspell.cxx:1100 src/tools/hunspell.cxx:1230
 #, c-format
 msgid "Cannot update personal dictionary."
 msgstr "Nem lehet frissíteni a saját szótárat."
 
-#: src/tools/hunspell.cxx:1094
+#: src/tools/hunspell.cxx:1106
 msgid "a"
 msgstr "j"
 
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "S)tem" before
-#: src/tools/hunspell.cxx:1101
+#: src/tools/hunspell.cxx:1113
 msgid "s"
 msgstr "t"
 
-#: src/tools/hunspell.cxx:1134
+#: src/tools/hunspell.cxx:1146
 msgid "New word (stem): "
 msgstr "Új szó(tő): "
 
-#: src/tools/hunspell.cxx:1161
+#: src/tools/hunspell.cxx:1173
 msgid "Model word (a similar dictionary word): "
 msgstr "Mintaszó (egy hasonló szótári szó): "
 
-#: src/tools/hunspell.cxx:1224
+#: src/tools/hunspell.cxx:1236
 msgid "Model word must be in the dictionary. Press any key!"
 msgstr "A minta csak szótári szó lehet! Továbblépés billentyűleütéssel."
 
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "e(X)it" before
-#: src/tools/hunspell.cxx:1233
+#: src/tools/hunspell.cxx:1245
 msgid "x"
 msgstr "v"
 
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "Q)uit" before
-#: src/tools/hunspell.cxx:1238
+#: src/tools/hunspell.cxx:1250
 msgid "q"
 msgstr "m"
 
-#: src/tools/hunspell.cxx:1240
+#: src/tools/hunspell.cxx:1252
 msgid "Are you sure you want to throw away your changes? "
 msgstr "Kilép a módosítások mentése nélkül (i/n)? "
 
 #. TRANSLATORS: translate this letter according to the shortcut letter y)es
-#: src/tools/hunspell.cxx:1242
+#: src/tools/hunspell.cxx:1254
 msgid "y"
 msgstr "i"
 
-#: src/tools/hunspell.cxx:1314
+#: src/tools/hunspell.cxx:1326
 #, c-format
 msgid "Can't create tempfile %s.\n"
 msgstr "Nem lehet létrehozni a(z) %s átmeneti fájlt.\n"
 
-#: src/tools/hunspell.cxx:1475
+#: src/tools/hunspell.cxx:1487
 #, c-format
 msgid "Usage: hunspell [OPTION]... [FILE]...\n"
 msgstr "Használat: hunspell [KAPCSOLÓ]... [FÁJL]...\n"
 
-#: src/tools/hunspell.cxx:1476
+#: src/tools/hunspell.cxx:1488
 #, c-format
 msgid ""
 "Check spelling of each FILE. Without FILE, check standard input.\n"
@@ -231,103 +231,103 @@ msgstr ""
 "A FÁJL(OK) (ennek hiányában a szabványos bemenet) helyesírását ellenőrzi.\n"
 "\n"
 
-#: src/tools/hunspell.cxx:1477
+#: src/tools/hunspell.cxx:1489
 #, c-format
 msgid "  -1\t\tcheck only first field in lines (delimiter = tabulator)\n"
 msgstr ""
 "  -1\t\tcsak az első mezőt ellenőrzi a sorban (mezőhatároló = tabulátor)\n"
 
-#: src/tools/hunspell.cxx:1478
+#: src/tools/hunspell.cxx:1490
 #, c-format
 msgid "  -a\t\tIspell's pipe interface\n"
 msgstr "  -a\t\tIspell-szerű csőfelület\n"
 
-#: src/tools/hunspell.cxx:1479
+#: src/tools/hunspell.cxx:1491
 #, c-format
 msgid "  --check-url\tCheck URLs, e-mail addresses and directory paths\n"
 msgstr "  --check-url\tURL-ek, e-mail címek és útvonalak ellenőrzése\n"
 
-#: src/tools/hunspell.cxx:1480
+#: src/tools/hunspell.cxx:1492
 #, c-format
 msgid "  -d d[,d2,...]\tuse d (d2 etc.) dictionaries\n"
 msgstr "  -d d[,d2,...]\ta d (d2 stb.) nevű szótárat használja\n"
 
-#: src/tools/hunspell.cxx:1481
+#: src/tools/hunspell.cxx:1493
 #, c-format
 msgid "  -D\t\tshow available dictionaries\n"
 msgstr "  -D\t\taz elérhető szótárak kilistázása\n"
 
-#: src/tools/hunspell.cxx:1482
+#: src/tools/hunspell.cxx:1494
 #, c-format
 msgid "  -G\t\tprint only correct words or lines\n"
 msgstr "  -G\t\tkiírja a bemenet helyes szavait vagy sorait\n"
 
-#: src/tools/hunspell.cxx:1483
+#: src/tools/hunspell.cxx:1495
 #, c-format
 msgid "  -h, --help\tdisplay this help and exit\n"
 msgstr "  -h, --help\tkiírja ezt a leírást\n"
 
-#: src/tools/hunspell.cxx:1484
+#: src/tools/hunspell.cxx:1496
 #, c-format
 msgid "  -H\t\tHTML input file format\n"
 msgstr "  -H\t\tHTML bemeneti formátum\n"
 
-#: src/tools/hunspell.cxx:1485
+#: src/tools/hunspell.cxx:1497
 #, c-format
 msgid "  -i enc\tinput encoding\n"
 msgstr "  -i kód\tbemeneti karakterkódolás\n"
 
-#: src/tools/hunspell.cxx:1486
+#: src/tools/hunspell.cxx:1498
 #, c-format
 msgid "  -l\t\tprint misspelled words\n"
 msgstr "  -l\t\tkiírja a hibás szavakat\n"
 
-#: src/tools/hunspell.cxx:1487
+#: src/tools/hunspell.cxx:1499
 #, c-format
 msgid "  -L\t\tprint lines with misspelled words\n"
 msgstr "  -L\t\tkiírja a hibás sorokat\n"
 
-#: src/tools/hunspell.cxx:1488
+#: src/tools/hunspell.cxx:1500
 #, c-format
 msgid "  -m \t\tanalyze the words of the input text\n"
 msgstr "  -m \t\tszövegszavak morfológiai elemzése\n"
 
-#: src/tools/hunspell.cxx:1489
+#: src/tools/hunspell.cxx:1501
 #, c-format
 msgid "  -n\t\tnroff/troff input file format\n"
 msgstr "  -n\t\tnroff/troff bemeneti formátum\n"
 
-#: src/tools/hunspell.cxx:1490
+#: src/tools/hunspell.cxx:1502
 #, c-format
 msgid "  -p dict\tset dict custom dictionary\n"
 msgstr "  -p tár\ta tár nevű saját szótárat használja\n"
 
-#: src/tools/hunspell.cxx:1491
+#: src/tools/hunspell.cxx:1503
 #, c-format
 msgid "  -P password\tset password for encrypted dictionaries\n"
 msgstr "  -P jelszó\tjelszó megadása a titkosított szótárakhoz\n"
 
-#: src/tools/hunspell.cxx:1492
+#: src/tools/hunspell.cxx:1504
 #, c-format
 msgid "  -s \t\tstem the words of the input text\n"
 msgstr "  -s \t\tszövegszavak tövezése\n"
 
-#: src/tools/hunspell.cxx:1493
+#: src/tools/hunspell.cxx:1505
 #, c-format
 msgid "  -t\t\tTeX/LaTeX input file format\n"
 msgstr "  -t\t\tTeX/LaTeX bemeneti formátum\n"
 
-#: src/tools/hunspell.cxx:1499
+#: src/tools/hunspell.cxx:1511
 #, c-format
 msgid "  -v, --version\tprint version number\n"
 msgstr "  -v, --version\tkiírja a változat számát\n"
 
-#: src/tools/hunspell.cxx:1500
+#: src/tools/hunspell.cxx:1512
 #, c-format
 msgid "  -vv\t\tprint Ispell compatible version number\n"
 msgstr "  -vv\t\tkiírja a változat számát Ispell-szerűen\n"
 
-#: src/tools/hunspell.cxx:1501
+#: src/tools/hunspell.cxx:1513
 #, c-format
 msgid ""
 "  -w\t\tprint misspelled words (= lines) from one word/line input.\n"
@@ -336,7 +336,7 @@ msgstr ""
 "  -w\t\tkiírja a hibás szavakat a soronként egy szavas bemenetből.\n"
 "\n"
 
-#: src/tools/hunspell.cxx:1502
+#: src/tools/hunspell.cxx:1514
 #, c-format
 msgid ""
 "Example: hunspell -d en_US file.txt    # interactive spelling\n"
@@ -349,12 +349,12 @@ msgstr ""
 "        hunspell -i utf-8 fájl.txt    # UTF-8-as fájl ellenőrzése\n"
 "\n"
 
-#: src/tools/hunspell.cxx:1505
+#: src/tools/hunspell.cxx:1517
 #, c-format
 msgid "Bug reports: http://hunspell.sourceforge.net\n";
 msgstr "Hibajelzés: http://hunspell.sourceforge.net\n";
 
-#: src/tools/hunspell.cxx:1511
+#: src/tools/hunspell.cxx:1523
 #, c-format
 msgid ""
 "\n"
@@ -371,7 +371,7 @@ msgstr ""
 "MySpell copyright (C) Kevin Hendricks, 2001-2002, Licenc: BSD.\n"
 "\n"
 
-#: src/tools/hunspell.cxx:1514
+#: src/tools/hunspell.cxx:1526
 #, c-format
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
@@ -382,13 +382,13 @@ msgstr ""
 "NINCS garancia, még az eladhatóságra vagy valamely célra való\n"
 "alkalmazhatóságra sem.\n"
 
-#: src/tools/hunspell.cxx:1606 src/tools/hunspell.cxx:1726
-#: src/tools/hunspell.cxx:1743
+#: src/tools/hunspell.cxx:1618 src/tools/hunspell.cxx:1738
+#: src/tools/hunspell.cxx:1755
 #, c-format
 msgid "Can't open %s.\n"
 msgstr "Nem lehet megnyitni a(z) %s-t.\n"
 
-#: src/tools/hunspell.cxx:1655
+#: src/tools/hunspell.cxx:1667
 #, c-format
 msgid ""
 "SEARCH PATH:\n"
@@ -397,12 +397,12 @@ msgstr ""
 "KERESÉSI ÚTVONAL:\n"
 "%s\n"
 
-#: src/tools/hunspell.cxx:1656
+#: src/tools/hunspell.cxx:1668
 #, c-format
 msgid "AVAILABLE DICTIONARIES (path is not mandatory for -d option):\n"
 msgstr "ELÉRHETŐ SZÓTÁRAK (az útvonal nem kötelező a -d kapcsolónál):\n"
 
-#: src/tools/hunspell.cxx:1668
+#: src/tools/hunspell.cxx:1680
 #, c-format
 msgid ""
 "LOADED DICTIONARY:\n"
@@ -413,17 +413,17 @@ msgstr ""
 "%s\n"
 "%s\n"
 
-#: src/tools/hunspell.cxx:1686
+#: src/tools/hunspell.cxx:1698
 #, c-format
 msgid "error - %s exceeds dictionary limit.\n"
 msgstr "hiba - %s meghaladja a szótárlimitet.\n"
 
-#: src/tools/hunspell.cxx:1690
+#: src/tools/hunspell.cxx:1702
 #, fuzzy, c-format
 msgid "Can't open affix or dictionary files for dictionary named \"%s\".\n"
 msgstr "Nem lehet megnyitni a ragozási vagy a szótárfájlt.\n"
 
-#: src/tools/hunspell.cxx:1753
+#: src/tools/hunspell.cxx:1765
 #, c-format
 msgid "Hunspell has been compiled without Ncurses user interface.\n"
 msgstr "A Hunspell Ncurses felhasználói felület nélkül lett fordítva.\n"
diff --git a/po/hunspell.pot b/po/hunspell.pot
index 1d3de17..e7ab10c 100644
--- a/po/hunspell.pot
+++ b/po/hunspell.pot
@@ -6,56 +6,55 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: hunspell 1.2.12\n"
+"Project-Id-Version: hunspell 1.2.14\n"
 "Report-Msgid-Bugs-To: nemeth@openoffice.org\n"
-"POT-Creation-Date: 2010-07-14 08:39+0100\n"
+"POT-Creation-Date: 2011-01-06 13:57+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/tools/hunspell.cxx:192 src/tools/hunspell.cxx:300
+#: src/tools/hunspell.cxx:204 src/tools/hunspell.cxx:312
 #, c-format
 msgid "error - iconv_open: %s -> %s\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:235 src/tools/hunspell.cxx:258
+#: src/tools/hunspell.cxx:247 src/tools/hunspell.cxx:270
 #, c-format
 msgid "error - iconv_open: UTF-8 -> %s\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:550 src/tools/hunspell.cxx:1072
-#: src/tools/hunspell.cxx:1202
+#: src/tools/hunspell.cxx:562 src/tools/hunspell.cxx:1084
+#: src/tools/hunspell.cxx:1214
 #, c-format
 msgid "error - missing HOME variable\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:633
+#: src/tools/hunspell.cxx:645
 #, c-format
 msgid "Line %d: %s -> "
 msgstr ""
 
-#: src/tools/hunspell.cxx:879
+#: src/tools/hunspell.cxx:891
 msgid "FORBIDDEN!"
 msgstr ""
 
-#: src/tools/hunspell.cxx:880
+#: src/tools/hunspell.cxx:892
 #, c-format
 msgid ""
 "\t%s\t\tFile: %s\n"
 "\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:933
+#: src/tools/hunspell.cxx:945
 msgid ""
 "\n"
 "[SPACE] R)epl A)ccept I)nsert U)ncap S)tem Q)uit e(X)it or ? for help\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:999
+#: src/tools/hunspell.cxx:1011
 msgid ""
 "Whenever a word is found that is not in the dictionary\n"
 "it is printed on the first line of the screen.  If the dictionary\n"
@@ -64,61 +63,61 @@ msgid ""
 "completely, or choosing one of the suggested words.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1004
+#: src/tools/hunspell.cxx:1016
 msgid ""
 "\n"
 "Commands are:\n"
 "\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1005
+#: src/tools/hunspell.cxx:1017
 msgid "R\tReplace the misspelled word completely.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1006
+#: src/tools/hunspell.cxx:1018
 msgid "Space\tAccept the word this time only.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1007
+#: src/tools/hunspell.cxx:1019
 msgid "A\tAccept the word for the rest of this session.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1008
+#: src/tools/hunspell.cxx:1020
 msgid "I\tAccept the word, and put it in your private dictionary.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1009
+#: src/tools/hunspell.cxx:1021
 msgid "U\tAccept and add lowercase version to private dictionary.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1011
+#: src/tools/hunspell.cxx:1023
 msgid ""
 "S\tAsk a stem and a model word and store them in the private dictionary.\n"
 "\tThe stem will be accepted also with the affixes of the model word.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1014
+#: src/tools/hunspell.cxx:1026
 msgid "0-n\tReplace with one of the suggested words.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1015
+#: src/tools/hunspell.cxx:1027
 msgid ""
 "X\tWrite the rest of this file, ignoring misspellings, and start next file.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1016
+#: src/tools/hunspell.cxx:1028
 msgid "Q\tQuit immediately. Asks for confirmation. Leaves file unchanged.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1017
+#: src/tools/hunspell.cxx:1029
 msgid "^Z\tSuspend program. Restart with fg command.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1018
+#: src/tools/hunspell.cxx:1030
 msgid "?\tShow this help screen.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1019
+#: src/tools/hunspell.cxx:1031
 msgid ""
 "\n"
 "-- Type space to continue -- \n"
@@ -126,11 +125,11 @@ msgstr ""
 
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "R)epl" before
-#: src/tools/hunspell.cxx:1029
+#: src/tools/hunspell.cxx:1041
 msgid "r"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1041
+#: src/tools/hunspell.cxx:1053
 msgid "Replace with: "
 msgstr ""
 
@@ -138,182 +137,182 @@ msgstr ""
 #. previously in the  translation of "U)ncap" and I)nsert before
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "U)ncap" and I)nsert before
-#: src/tools/hunspell.cxx:1062 src/tools/hunspell.cxx:1094
+#: src/tools/hunspell.cxx:1074 src/tools/hunspell.cxx:1106
 msgid "u"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1063 src/tools/hunspell.cxx:1094
+#: src/tools/hunspell.cxx:1075 src/tools/hunspell.cxx:1106
 msgid "i"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1088 src/tools/hunspell.cxx:1218
+#: src/tools/hunspell.cxx:1100 src/tools/hunspell.cxx:1230
 #, c-format
 msgid "Cannot update personal dictionary."
 msgstr ""
 
-#: src/tools/hunspell.cxx:1094
+#: src/tools/hunspell.cxx:1106
 msgid "a"
 msgstr ""
 
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "S)tem" before
-#: src/tools/hunspell.cxx:1101
+#: src/tools/hunspell.cxx:1113
 msgid "s"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1134
+#: src/tools/hunspell.cxx:1146
 msgid "New word (stem): "
 msgstr ""
 
-#: src/tools/hunspell.cxx:1161
+#: src/tools/hunspell.cxx:1173
 msgid "Model word (a similar dictionary word): "
 msgstr ""
 
-#: src/tools/hunspell.cxx:1224
+#: src/tools/hunspell.cxx:1236
 msgid "Model word must be in the dictionary. Press any key!"
 msgstr ""
 
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "e(X)it" before
-#: src/tools/hunspell.cxx:1233
+#: src/tools/hunspell.cxx:1245
 msgid "x"
 msgstr ""
 
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "Q)uit" before
-#: src/tools/hunspell.cxx:1238
+#: src/tools/hunspell.cxx:1250
 msgid "q"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1240
+#: src/tools/hunspell.cxx:1252
 msgid "Are you sure you want to throw away your changes? "
 msgstr ""
 
 #. TRANSLATORS: translate this letter according to the shortcut letter y)es
-#: src/tools/hunspell.cxx:1242
+#: src/tools/hunspell.cxx:1254
 msgid "y"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1314
+#: src/tools/hunspell.cxx:1326
 #, c-format
 msgid "Can't create tempfile %s.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1475
+#: src/tools/hunspell.cxx:1487
 #, c-format
 msgid "Usage: hunspell [OPTION]... [FILE]...\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1476
+#: src/tools/hunspell.cxx:1488
 #, c-format
 msgid ""
 "Check spelling of each FILE. Without FILE, check standard input.\n"
 "\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1477
+#: src/tools/hunspell.cxx:1489
 #, c-format
 msgid "  -1\t\tcheck only first field in lines (delimiter = tabulator)\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1478
+#: src/tools/hunspell.cxx:1490
 #, c-format
 msgid "  -a\t\tIspell's pipe interface\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1479
+#: src/tools/hunspell.cxx:1491
 #, c-format
 msgid "  --check-url\tCheck URLs, e-mail addresses and directory paths\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1480
+#: src/tools/hunspell.cxx:1492
 #, c-format
 msgid "  -d d[,d2,...]\tuse d (d2 etc.) dictionaries\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1481
+#: src/tools/hunspell.cxx:1493
 #, c-format
 msgid "  -D\t\tshow available dictionaries\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1482
+#: src/tools/hunspell.cxx:1494
 #, c-format
 msgid "  -G\t\tprint only correct words or lines\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1483
+#: src/tools/hunspell.cxx:1495
 #, c-format
 msgid "  -h, --help\tdisplay this help and exit\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1484
+#: src/tools/hunspell.cxx:1496
 #, c-format
 msgid "  -H\t\tHTML input file format\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1485
+#: src/tools/hunspell.cxx:1497
 #, c-format
 msgid "  -i enc\tinput encoding\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1486
+#: src/tools/hunspell.cxx:1498
 #, c-format
 msgid "  -l\t\tprint misspelled words\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1487
+#: src/tools/hunspell.cxx:1499
 #, c-format
 msgid "  -L\t\tprint lines with misspelled words\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1488
+#: src/tools/hunspell.cxx:1500
 #, c-format
 msgid "  -m \t\tanalyze the words of the input text\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1489
+#: src/tools/hunspell.cxx:1501
 #, c-format
 msgid "  -n\t\tnroff/troff input file format\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1490
+#: src/tools/hunspell.cxx:1502
 #, c-format
 msgid "  -p dict\tset dict custom dictionary\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1491
+#: src/tools/hunspell.cxx:1503
 #, c-format
 msgid "  -P password\tset password for encrypted dictionaries\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1492
+#: src/tools/hunspell.cxx:1504
 #, c-format
 msgid "  -s \t\tstem the words of the input text\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1493
+#: src/tools/hunspell.cxx:1505
 #, c-format
 msgid "  -t\t\tTeX/LaTeX input file format\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1499
+#: src/tools/hunspell.cxx:1511
 #, c-format
 msgid "  -v, --version\tprint version number\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1500
+#: src/tools/hunspell.cxx:1512
 #, c-format
 msgid "  -vv\t\tprint Ispell compatible version number\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1501
+#: src/tools/hunspell.cxx:1513
 #, c-format
 msgid ""
 "  -w\t\tprint misspelled words (= lines) from one word/line input.\n"
 "\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1502
+#: src/tools/hunspell.cxx:1514
 #, c-format
 msgid ""
 "Example: hunspell -d en_US file.txt    # interactive spelling\n"
@@ -322,12 +321,12 @@ msgid ""
 "\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1505
+#: src/tools/hunspell.cxx:1517
 #, c-format
 msgid "Bug reports: http://hunspell.sourceforge.net\n";
 msgstr ""
 
-#: src/tools/hunspell.cxx:1511
+#: src/tools/hunspell.cxx:1523
 #, c-format
 msgid ""
 "\n"
@@ -338,7 +337,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1514
+#: src/tools/hunspell.cxx:1526
 #, c-format
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
@@ -346,25 +345,25 @@ msgid ""
 "to the extent permitted by law.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1606 src/tools/hunspell.cxx:1726
-#: src/tools/hunspell.cxx:1743
+#: src/tools/hunspell.cxx:1618 src/tools/hunspell.cxx:1738
+#: src/tools/hunspell.cxx:1755
 #, c-format
 msgid "Can't open %s.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1655
+#: src/tools/hunspell.cxx:1667
 #, c-format
 msgid ""
 "SEARCH PATH:\n"
 "%s\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1656
+#: src/tools/hunspell.cxx:1668
 #, c-format
 msgid "AVAILABLE DICTIONARIES (path is not mandatory for -d option):\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1668
+#: src/tools/hunspell.cxx:1680
 #, c-format
 msgid ""
 "LOADED DICTIONARY:\n"
@@ -372,17 +371,17 @@ msgid ""
 "%s\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1686
+#: src/tools/hunspell.cxx:1698
 #, c-format
 msgid "error - %s exceeds dictionary limit.\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1690
+#: src/tools/hunspell.cxx:1702
 #, c-format
 msgid "Can't open affix or dictionary files for dictionary named \"%s\".\n"
 msgstr ""
 
-#: src/tools/hunspell.cxx:1753
+#: src/tools/hunspell.cxx:1765
 #, c-format
 msgid "Hunspell has been compiled without Ncurses user interface.\n"
 msgstr ""
diff --git a/po/it.gmo b/po/it.gmo
index 3084b82..cfa1ecc 100644
Binary files a/po/it.gmo and b/po/it.gmo differ
diff --git a/po/it.po b/po/it.po
index 28667b6..9e9ba6b 100644
--- a/po/it.po
+++ b/po/it.po
@@ -8,43 +8,43 @@ msgid ""
 msgstr ""
 "Project-Id-Version: hunspell\n"
 "Report-Msgid-Bugs-To: nemeth@openoffice.org\n"
-"POT-Creation-Date: 2010-07-14 08:39+0100\n"
+"POT-Creation-Date: 2011-01-06 13:57+0100\n"
 "PO-Revision-Date: 2009-08-14 10:25+0200\n"
 "Last-Translator: Milo Casagrande <milo@ubuntu.com>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
-"Language: it\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
 "X-Launchpad-Export-Date: 2009-08-12 13:40+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: src/tools/hunspell.cxx:192 src/tools/hunspell.cxx:300
+#: src/tools/hunspell.cxx:204 src/tools/hunspell.cxx:312
 #, c-format
 msgid "error - iconv_open: %s -> %s\n"
 msgstr "errore - iconv_open: %s -> %s\n"
 
-#: src/tools/hunspell.cxx:235 src/tools/hunspell.cxx:258
+#: src/tools/hunspell.cxx:247 src/tools/hunspell.cxx:270
 #, c-format
 msgid "error - iconv_open: UTF-8 -> %s\n"
 msgstr "errore - iconv_open: UTF-8 -> %s\n"
 
-#: src/tools/hunspell.cxx:550 src/tools/hunspell.cxx:1072
-#: src/tools/hunspell.cxx:1202
+#: src/tools/hunspell.cxx:562 src/tools/hunspell.cxx:1084
+#: src/tools/hunspell.cxx:1214
 #, c-format
 msgid "error - missing HOME variable\n"
 msgstr "errore - variabile HOME mancante\n"
 
-#: src/tools/hunspell.cxx:633
+#: src/tools/hunspell.cxx:645
 #, c-format
 msgid "Line %d: %s -> "
 msgstr "Riga %d: %s -> "
 
-#: src/tools/hunspell.cxx:879
+#: src/tools/hunspell.cxx:891
 msgid "FORBIDDEN!"
 msgstr "PROIBITO."
 
-#: src/tools/hunspell.cxx:880
+#: src/tools/hunspell.cxx:892
 #, c-format
 msgid ""
 "\t%s\t\tFile: %s\n"
@@ -56,7 +56,7 @@ msgstr ""
 # (ndt)
 # to stem -> to have or take origin -> Origine
 # to uncap -> togliere la 'capitalizzazione' delle parole, le lettere maiuscole
-#: src/tools/hunspell.cxx:933
+#: src/tools/hunspell.cxx:945
 msgid ""
 "\n"
 "[SPACE] R)epl A)ccept I)nsert U)ncap S)tem Q)uit e(X)it or ? for help\n"
@@ -64,7 +64,7 @@ msgstr ""
 "\n"
 "[SPAZIO] S)ost A)ccet I)nser T)ogli cap O)rig C)hiudi E)sci o ? per l'aiuto\n"
 
-#: src/tools/hunspell.cxx:999
+#: src/tools/hunspell.cxx:1011
 msgid ""
 "Whenever a word is found that is not in the dictionary\n"
 "it is printed on the first line of the screen.  If the dictionary\n"
@@ -78,7 +78,7 @@ msgstr ""
 "di ognuna. È possibile sostituire la parola completamente o\n"
 "scegliere uno dei suggerimenti.\n"
 
-#: src/tools/hunspell.cxx:1004
+#: src/tools/hunspell.cxx:1016
 msgid ""
 "\n"
 "Commands are:\n"
@@ -88,28 +88,28 @@ msgstr ""
 "I comandi sono:\n"
 "\n"
 
-#: src/tools/hunspell.cxx:1005
+#: src/tools/hunspell.cxx:1017
 msgid "R\tReplace the misspelled word completely.\n"
 msgstr "R\tSostituisce la parola sbagliata\n"
 
-#: src/tools/hunspell.cxx:1006
+#: src/tools/hunspell.cxx:1018
 msgid "Space\tAccept the word this time only.\n"
 msgstr "Spazio\tAccetta la parola solo per questa volta\n"
 
-#: src/tools/hunspell.cxx:1007
+#: src/tools/hunspell.cxx:1019
 msgid "A\tAccept the word for the rest of this session.\n"
 msgstr "A\tAccetta la parola per il resto di questa sessione\n"
 
-#: src/tools/hunspell.cxx:1008
+#: src/tools/hunspell.cxx:1020
 msgid "I\tAccept the word, and put it in your private dictionary.\n"
 msgstr "I\tAccetta la parola e la inserisce nel dizionario privato\n"
 
-#: src/tools/hunspell.cxx:1009
+#: src/tools/hunspell.cxx:1021
 msgid "U\tAccept and add lowercase version to private dictionary.\n"
 msgstr ""
 "U\tAccetta la parola e la inserisce in minuscolo nel dizionario privato\n"
 
-#: src/tools/hunspell.cxx:1011
+#: src/tools/hunspell.cxx:1023
 msgid ""
 "S\tAsk a stem and a model word and store them in the private dictionary.\n"
 "\tThe stem will be accepted also with the affixes of the model word.\n"
@@ -119,31 +119,31 @@ msgstr ""
 "\tla parte principale viene accettata anche con gli affissi della parola "
 "modello\n"
 
-#: src/tools/hunspell.cxx:1014
+#: src/tools/hunspell.cxx:1026
 msgid "0-n\tReplace with one of the suggested words.\n"
 msgstr "0-n\tSostituisce con una delle parole suggerite\n"
 
-#: src/tools/hunspell.cxx:1015
+#: src/tools/hunspell.cxx:1027
 msgid ""
 "X\tWrite the rest of this file, ignoring misspellings, and start next file.\n"
 msgstr ""
 "X\tScrive il resto del file ignorando gli errori e inizia con il file "
 "successivo\n"
 
-#: src/tools/hunspell.cxx:1016
+#: src/tools/hunspell.cxx:1028
 msgid "Q\tQuit immediately. Asks for confirmation. Leaves file unchanged.\n"
 msgstr ""
 "Q\tChiude immediatamente, chiede conferma e lascia il file non modificato\n"
 
-#: src/tools/hunspell.cxx:1017
+#: src/tools/hunspell.cxx:1029
 msgid "^Z\tSuspend program. Restart with fg command.\n"
 msgstr "^Z\tSospende il programma; per riavviarlo, usare il comando fg\n"
 
-#: src/tools/hunspell.cxx:1018
+#: src/tools/hunspell.cxx:1030
 msgid "?\tShow this help screen.\n"
 msgstr "?\tMostra questo aiuto\n"
 
-#: src/tools/hunspell.cxx:1019
+#: src/tools/hunspell.cxx:1031
 msgid ""
 "\n"
 "-- Type space to continue -- \n"
@@ -153,11 +153,11 @@ msgstr ""
 
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "R)epl" before
-#: src/tools/hunspell.cxx:1029
+#: src/tools/hunspell.cxx:1041
 msgid "r"
 msgstr "s"
 
-#: src/tools/hunspell.cxx:1041
+#: src/tools/hunspell.cxx:1053
 msgid "Replace with: "
 msgstr "Sostituisci con: "
 
@@ -165,73 +165,73 @@ msgstr "Sostituisci con: "
 #. previously in the  translation of "U)ncap" and I)nsert before
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "U)ncap" and I)nsert before
-#: src/tools/hunspell.cxx:1062 src/tools/hunspell.cxx:1094
+#: src/tools/hunspell.cxx:1074 src/tools/hunspell.cxx:1106
 msgid "u"
 msgstr "t"
 
-#: src/tools/hunspell.cxx:1063 src/tools/hunspell.cxx:1094
+#: src/tools/hunspell.cxx:1075 src/tools/hunspell.cxx:1106
 msgid "i"
 msgstr "i"
 
-#: src/tools/hunspell.cxx:1088 src/tools/hunspell.cxx:1218
+#: src/tools/hunspell.cxx:1100 src/tools/hunspell.cxx:1230
 #, c-format
 msgid "Cannot update personal dictionary."
 msgstr "Impossibile aggiornare il dizionario personale"
 
-#: src/tools/hunspell.cxx:1094
+#: src/tools/hunspell.cxx:1106
 msgid "a"
 msgstr "a"
 
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "S)tem" before
-#: src/tools/hunspell.cxx:1101
+#: src/tools/hunspell.cxx:1113
 msgid "s"
 msgstr "o"
 
-#: src/tools/hunspell.cxx:1134
+#: src/tools/hunspell.cxx:1146
 msgid "New word (stem): "
 msgstr "Nuova parola (origine):"
 
-#: src/tools/hunspell.cxx:1161
+#: src/tools/hunspell.cxx:1173
 msgid "Model word (a similar dictionary word): "
 msgstr "Parola modello (una parola simile dal dizionario): "
 
-#: src/tools/hunspell.cxx:1224
+#: src/tools/hunspell.cxx:1236
 msgid "Model word must be in the dictionary. Press any key!"
 msgstr "La parola modello deve essere nel dizionario. Premere un tasto."
 
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "e(X)it" before
-#: src/tools/hunspell.cxx:1233
+#: src/tools/hunspell.cxx:1245
 msgid "x"
 msgstr "e"
 
 #. TRANSLATORS: translate this letter according to the shortcut letter used
 #. previously in the  translation of "Q)uit" before
-#: src/tools/hunspell.cxx:1238
+#: src/tools/hunspell.cxx:1250
 msgid "q"
 msgstr "c"
 
-#: src/tools/hunspell.cxx:1240
+#: src/tools/hunspell.cxx:1252
 msgid "Are you sure you want to throw away your changes? "
 msgstr "Scartare veramente le modifiche? "
 
 #. TRANSLATORS: translate this letter according to the shortcut letter y)es
-#: src/tools/hunspell.cxx:1242
+#: src/tools/hunspell.cxx:1254
 msgid "y"
 msgstr "s"
 
-#: src/tools/hunspell.cxx:1314
+#: src/tools/hunspell.cxx:1326
 #, c-format
 msgid "Can't create tempfile %s.\n"
 msgstr "Impossibile creare il file temporaneo %s.\n"
 
-#: src/tools/hunspell.cxx:1475
+#: src/tools/hunspell.cxx:1487
 #, c-format
 msgid "Usage: hunspell [OPTION]... [FILE]...\n"
 msgstr "Uso: hunspell [OPZIONI]... [FILE]...\n"
 
-#: src/tools/hunspell.cxx:1476
+#: src/tools/hunspell.cxx:1488
 #, c-format
 msgid ""
 "Check spelling of each FILE. Without FILE, check standard input.\n"
@@ -241,108 +241,108 @@ msgstr ""
 "input.\n"
 "\n"
 
-#: src/tools/hunspell.cxx:1477
+#: src/tools/hunspell.cxx:1489
 #, c-format
 msgid "  -1\t\tcheck only first field in lines (delimiter = tabulator)\n"
 msgstr ""
 "  -1\t\tControlla solo il primo campo nelle righe (delimitatore = "
 "tabulatore)\n"
 
-#: src/tools/hunspell.cxx:1478
+#: src/tools/hunspell.cxx:1490
 #, c-format
 msgid "  -a\t\tIspell's pipe interface\n"
 msgstr "  -a\t\tInterfaccia pipe di Ispell\n"
 
-#: src/tools/hunspell.cxx:1479
+#: src/tools/hunspell.cxx:1491
 #, c-format
 msgid "  --check-url\tCheck URLs, e-mail addresses and directory paths\n"
 msgstr ""
 "  --check-url\tControlla gli URL, indirizzi email e i percorsi delle "
 "directory\n"
 
-#: src/tools/hunspell.cxx:1480
+#: src/tools/hunspell.cxx:1492
 #, c-format
 msgid "  -d d[,d2,...]\tuse d (d2 etc.) dictionaries\n"
 msgstr "  -d d[,d2,...]\tUsa i dizionari d (d2 ecc...)\n"
 
-#: src/tools/hunspell.cxx:1481
+#: src/tools/hunspell.cxx:1493
 #, c-format
 msgid "  -D\t\tshow available dictionaries\n"
 msgstr "  -D\t\tMostra i dizionari disponibili\n"
 
-#: src/tools/hunspell.cxx:1482
+#: src/tools/hunspell.cxx:1494
 #, c-format
 msgid "  -G\t\tprint only correct words or lines\n"
 msgstr "  -G\t\tStampa solo le righe o le parole corrette\n"
 
-#: src/tools/hunspell.cxx:1483
+#: src/tools/hunspell.cxx:1495
 #, c-format
 msgid "  -h, --help\tdisplay this help and exit\n"
 msgstr "  -h, --help\tMostra questo aiuto ed esce\n"
 
-#: src/tools/hunspell.cxx:1484
+#: src/tools/hunspell.cxx:1496
 #, c-format
 msgid "  -H\t\tHTML input file format\n"
 msgstr "  -H\t\tFormato del file di input HTML\n"
 
-#: src/tools/hunspell.cxx:1485
+#: src/tools/hunspell.cxx:1497
 #, c-format
 msgid "  -i enc\tinput encoding\n"
 msgstr "  -i cod\tCodifica dell'input\n"
 
-#: src/tools/hunspell.cxx:1486
+#: src/tools/hunspell.cxx:1498
 #, c-format
 msgid "  -l\t\tprint misspelled words\n"
 msgstr "  -l\t\tStampa le parole errate\n"
 
-#: src/tools/hunspell.cxx:1487
+#: src/tools/hunspell.cxx:1499
 #, c-format
 msgid "  -L\t\tprint lines with misspelled words\n"
 msgstr "  -L\t\tStampa le righe con le parole errate\n"
 
-#: src/tools/hunspell.cxx:1488
+#: src/tools/hunspell.cxx:1500
 #, c-format
 msgid "  -m \t\tanalyze the words of the input text\n"
 msgstr "  -m \t\tAnalizza le parole del testo in input\n"
 
-#: src/tools/hunspell.cxx:1489
+#: src/tools/hunspell.cxx:1501
 #, c-format
 msgid "  -n\t\tnroff/troff input file format\n"
 msgstr "  -n\t\tFormato del file di input nroff/troff\n"
 
-#: src/tools/hunspell.cxx:1490
+#: src/tools/hunspell.cxx:1502
 #, c-format
 msgid "  -p dict\tset dict custom dictionary\n"
 msgstr "  -p diz\tImposta diz come dizionario personalizzato\n"
 
-#: src/tools/hunspell.cxx:1491
+#: src/tools/hunspell.cxx:1503
 #, c-format
 msgid "  -P password\tset password for encrypted dictionaries\n"
 msgstr "  -P password\tImposta la password per i dizionari cifrati\n"
 
-#: src/tools/hunspell.cxx:1492
+#: src/tools/hunspell.cxx:1504
 #, c-format
 msgid "  -s \t\tstem the words of the input text\n"
 msgstr ""
 "  -s \t\tRecupera la parte principale (stem) delle parole del testo di "
 "input\n"
 
-#: src/tools/hunspell.cxx:1493
+#: src/tools/hunspell.cxx:1505
 #, c-format
 msgid "  -t\t\tTeX/LaTeX input file format\n"
 msgstr "  -t\t\tFormato del file di input TeX/LaTeX\n"
 
-#: src/tools/hunspell.cxx:1499
+#: src/tools/hunspell.cxx:1511
 #, c-format
 msgid "  -v, --version\tprint version number\n"
 msgstr "  -v, --version\tStampa il numero della versione\n"
 
-#: src/tools/hunspell.cxx:1500
+#: src/tools/hunspell.cxx:1512
 #, c-format
 msgid "  -vv\t\tprint Ispell compatible version number\n"
 msgstr "  -vv\t\tStampa il numero della versione di compatibilità di Ispell\n"
 
-#: src/tools/hunspell.cxx:1501
+#: src/tools/hunspell.cxx:1513
 #, c-format
 msgid ""
 "  -w\t\tprint misspelled words (= lines) from one word/line input.\n"
@@ -351,7 +351,7 @@ msgstr ""
 "  -w\t\tStampa le parole errate (= righe) da una parola o riga di input\n"
 "\n"
 
-#: src/tools/hunspell.cxx:1502
+#: src/tools/hunspell.cxx:1514
 #, c-format
 msgid ""
 "Example: hunspell -d en_US file.txt    # interactive spelling\n"
@@ -361,16 +361,16 @@ msgid ""
 msgstr ""
 "Esempio: hunspell -d en_US file.txt    # controllo ortografico interattivo\n"
 "         hunspell -l file.txt          # stampa le parole errate\n"
-"         hunspell -i utf-8 file.txt    # controlla il file codificato in "
-"UTF-8\n"
+"         hunspell -i utf-8 file.txt    # controlla il file codificato in UTF-"
+"8\n"
 "\n"
 
-#: src/tools/hunspell.cxx:1505
+#: src/tools/hunspell.cxx:1517
 #, c-format
 msgid "Bug reports: http://hunspell.sourceforge.net\n";
 msgstr "Per segnalare bug: http://hunspell.sourceforge.net\n";
 
-#: src/tools/hunspell.cxx:1511
+#: src/tools/hunspell.cxx:1523
 #, c-format
 msgid ""
 "\n"
@@ -387,7 +387,7 @@ msgstr ""
 "Copyright di Myspell © Kevin Hendricks, 2001-2002, Licenza: BSD.\n"
 "\n"
 
-#: src/tools/hunspell.cxx:1514
+#: src/tools/hunspell.cxx:1526
 #, c-format
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
@@ -400,13 +400,13 @@ msgstr ""
 "limiti\n"
 "permessi dalla legge.\n"
 
-#: src/tools/hunspell.cxx:1606 src/tools/hunspell.cxx:1726
-#: src/tools/hunspell.cxx:1743
+#: src/tools/hunspell.cxx:1618 src/tools/hunspell.cxx:1738
+#: src/tools/hunspell.cxx:1755
 #, c-format
 msgid "Can't open %s.\n"
 msgstr "Impossibile aprire %s.\n"
 
-#: src/tools/hunspell.cxx:1655
+#: src/tools/hunspell.cxx:1667
 #, c-format
 msgid ""
 "SEARCH PATH:\n"
@@ -415,13 +415,13 @@ msgstr ""
 "Percorso di ricerca:\n"
 "%s\n"
 
-#: src/tools/hunspell.cxx:1656
+#: src/tools/hunspell.cxx:1668
 #, c-format
 msgid "AVAILABLE DICTIONARIES (path is not mandatory for -d option):\n"
 msgstr ""
 "Dizionari disponibili (il percorso non è obbligatorio per l'opzione -d):\n"
 
-#: src/tools/hunspell.cxx:1668
+#: src/tools/hunspell.cxx:1680
 #, c-format
 msgid ""
 "LOADED DICTIONARY:\n"
@@ -432,17 +432,17 @@ msgstr ""
 "%s\n"
 "%s\n"
 
-#: src/tools/hunspell.cxx:1686
+#: src/tools/hunspell.cxx:1698
 #, c-format
 msgid "error - %s exceeds dictionary limit.\n"
 msgstr "errore - %s supera il limite del dizionario.\n"
 
-#: src/tools/hunspell.cxx:1690
+#: src/tools/hunspell.cxx:1702
 #, fuzzy, c-format
 msgid "Can't open affix or dictionary files for dictionary named \"%s\".\n"
 msgstr "Impossibile aprire i file di affisso o dizionario.\n"
 
-#: src/tools/hunspell.cxx:1753
+#: src/tools/hunspell.cxx:1765
 #, c-format
 msgid "Hunspell has been compiled without Ncurses user interface.\n"
 msgstr ""
diff --git a/src/hunspell/affentry.cxx b/src/hunspell/affentry.cxx
index 7c8268b..fef0cca 100644
--- a/src/hunspell/affentry.cxx
+++ b/src/hunspell/affentry.cxx
@@ -106,7 +106,7 @@ inline int PfxEntry::test_condition(const char * st)
                 pos = NULL;
                 p = nextchar(p);
                 // skip the next character
-                if (!ingroup) for (st++; (opts & aeUTF8) && (*st & 0xc0) == 0x80; st++);
+                if (!ingroup && *st) for (st++; (opts & aeUTF8) && (*st & 0xc0) == 0x80; st++);
                 if (*st == '\0' && p) return 0; // word <= condition
                 break;
             }
diff --git a/src/hunspell/affixmgr.cxx b/src/hunspell/affixmgr.cxx
index 9c2902e..4fce178 100644
--- a/src/hunspell/affixmgr.cxx
+++ b/src/hunspell/affixmgr.cxx
@@ -29,7 +29,7 @@ AffixMgr::AffixMgr(const char * affpath, HashMgr** ptr, int * md, const char * k
   maptable = NULL;
   nummap = 0;
   breaktable = NULL;
-  numbreak = 0;
+  numbreak = -1;
   reptable = NULL;
   numrep = 0;
   iconvtable = NULL;
@@ -709,7 +709,7 @@ int  AffixMgr::parse_file(const char * affpath, const char * key)
     }
 
     // default BREAK definition
-    if (!breaktable) {
+    if (numbreak == -1) {
         breaktable = (char **) malloc(sizeof(char *) * 3);
         if (!breaktable) return 1;
         breaktable[0] = mystrdup("-");
@@ -1267,7 +1267,7 @@ int AffixMgr::cpdrep_check(const char * word, int wl)
 }
 
 // forbid compoundings when there are special patterns at word bound
-int AffixMgr::cpdpat_check(const char * word, int pos, hentry * r1, hentry * r2)
+int AffixMgr::cpdpat_check(const char * word, int pos, hentry * r1, hentry * r2, const char affixed)
 {
   int len;
   for (int i = 0; i < numcheckcpd; i++) {
@@ -1276,8 +1276,14 @@ int AffixMgr::cpdpat_check(const char * word, int pos, hentry * r1, hentry * r2)
           (r1->astr && TESTAFF(r1->astr, checkcpdtable[i].cond, r1->alen))) &&
         (!r2 || !checkcpdtable[i].cond2 ||
           (r2->astr && TESTAFF(r2->astr, checkcpdtable[i].cond2, r2->alen))) &&
-        (len = strlen(checkcpdtable[i].pattern)) && (pos > len) &&
-        (strncmp(word + pos - len, checkcpdtable[i].pattern, len) == 0)) return 1;
+        // zero length pattern => only TESTAFF
+        // zero pattern (0/flag) => unmodified stem (zero affixes allowed)
+        (!*(checkcpdtable[i].pattern) || (
+            (*(checkcpdtable[i].pattern)=='0' && r1->blen <= pos && strncmp(word + pos - r1->blen, r1->word, r1->blen) == 0) ||
+            (*(checkcpdtable[i].pattern)!='0' && (len = strlen(checkcpdtable[i].pattern)) &&
+                strncmp(word + pos - len, checkcpdtable[i].pattern, len) == 0)))) {
+            return 1;
+        }
   }
   return 0;
 }
@@ -1462,6 +1468,7 @@ void AffixMgr::setcminmax(int * cmin, int * cmax, const char * word, int len) {
     }
 }
 
+
 // check if compound word is correctly spelled
 // hu_mov_rule = spec. Hungarian rule (XXX)
 struct hentry * AffixMgr::compound_check(const char * word, int len, 
@@ -1484,6 +1491,8 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
     int oldcmax = 0;
     int oldlen = 0;
     int checkedstriple = 0;
+    int onlycpdrule;
+    int affixed = 0;
 
     int checked_prefix;
 
@@ -1492,17 +1501,20 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
     strcpy(st, word);
 
     for (i = cmin; i < cmax; i++) {
-
-        oldnumsyllable = numsyllable;
-        oldwordnum = wordnum;
-        checked_prefix = 0;
-
         // go to end of the UTF-8 character
         if (utf8) {
             for (; (st[i] & 0xc0) == 0x80; i++);
             if (i >= cmax) return NULL;
         }
 
+        onlycpdrule = 0;
+
+        do { // onlycpdrule loop
+
+        oldnumsyllable = numsyllable;
+        oldwordnum = wordnum;
+        checked_prefix = 0;
+
         do { // simplified checkcompoundpattern loop
 
         if (scpd > 0) {
@@ -1525,7 +1537,6 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
           cmax = len - cpdmin + 1;
         }
 
-
         ch = st[i];
         st[i] = '\0';
 
@@ -1534,27 +1545,31 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
 
         // FIRST WORD
 
+        affixed = 1;
         rv = lookup(st); // perhaps without prefix
 
         // search homonym with compound flag
         while ((rv) && !hu_mov_rule &&
             ((needaffix && TESTAFF(rv->astr, needaffix, rv->alen)) ||
-                !((compoundflag && !words && TESTAFF(rv->astr, compoundflag, rv->alen)) ||
-                  (compoundbegin && !wordnum &&
+                !((compoundflag && !words && !onlycpdrule && TESTAFF(rv->astr, compoundflag, rv->alen)) ||
+                  (compoundbegin && !wordnum && !onlycpdrule && 
                         TESTAFF(rv->astr, compoundbegin, rv->alen)) ||
-                  (compoundmiddle && wordnum && !words &&
+                  (compoundmiddle && wordnum && !words && !onlycpdrule &&
                     TESTAFF(rv->astr, compoundmiddle, rv->alen)) ||
                   (numdefcpd &&
                     ((!words && !wordnum && defcpd_check(&words, wnum, rv, (hentry **) &rwords, 0)) ||
-                    (words && defcpd_check(&words, wnum, rv, (hentry **) &rwords, 0))))) ||
+                    (words && defcpd_check(&words, wnum, rv, (hentry **) &rwords, 0))) && (onlycpdrule = 1))) || // switch onlycpdrule on
                   (scpd != 0 && checkcpdtable[scpd-1].cond != FLAG_NULL &&
                     !TESTAFF(rv->astr, checkcpdtable[scpd-1].cond, rv->alen)))
                   ) {
             rv = rv->next_homonym;
         }
 
+        if (rv) affixed = 0;
+
         if (!rv) {
-            if (compoundflag && 
+            if (onlycpdrule) break;
+            if (compoundflag && !words && 
              !(rv = prefix_check(st, i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundflag))) {
                 if ((rv = suffix_check(st, i, 0, NULL, NULL, 0, NULL,
                         FLAG_NULL, compoundflag, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) && !hu_mov_rule &&
@@ -1577,11 +1592,13 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
               ) checked_prefix = 1;
         // else check forbiddenwords and needaffix
         } else if (rv->astr && (TESTAFF(rv->astr, forbiddenword, rv->alen) ||
-            TESTAFF(rv->astr, needaffix, rv->alen) || 
+            TESTAFF(rv->astr, needaffix, rv->alen) ||
+            TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) ||
             (is_sug && nosuggest && TESTAFF(rv->astr, nosuggest, rv->alen))
              )) {
                 st[i] = ch;
-                continue;
+                //continue;
+                break;
         }
 
             // check non_compound flag in suffix and prefix
@@ -1619,6 +1636,7 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
 
         // check forbiddenwords
         if ((rv) && (rv->astr) && (TESTAFF(rv->astr, forbiddenword, rv->alen) ||
+            TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) ||
             (is_sug && nosuggest && TESTAFF(rv->astr, nosuggest, rv->alen)))) {
                 return NULL;
             }
@@ -1681,7 +1699,6 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
             }
 // END of LANG_hu section
 
-
             // NEXT WORD(S)
             rv_first = rv;
             st[i] = ch;
@@ -1728,6 +1745,7 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
 
             // check forbiddenwords
             if ((rv) && (rv->astr) && (TESTAFF(rv->astr, forbiddenword, rv->alen) ||
+                TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) ||
                (is_sug && nosuggest && TESTAFF(rv->astr, nosuggest, rv->alen)))) return NULL;
 
             // second word is acceptable, as a root?
@@ -1746,7 +1764,7 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
                     ) &&
                (
                  // test CHECKCOMPOUNDPATTERN
-                 !numcheckcpd || scpd != 0 || !cpdpat_check(word, i, rv_first, rv)
+                 !numcheckcpd || scpd != 0 || !cpdpat_check(word, i, rv_first, rv, 0)
                ) &&
                 (
                      (!checkcompounddup || (rv != rv_first))
@@ -1767,8 +1785,8 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
             // perhaps second word has prefix or/and suffix
             sfx = NULL;
             sfxflag = FLAG_NULL;
-            rv = (compoundflag) ? affix_check((word+i),strlen(word+i), compoundflag, IN_CPD_END) : NULL;
-            if (!rv && compoundend) {
+            rv = (compoundflag && !onlycpdrule) ? affix_check((word+i),strlen(word+i), compoundflag, IN_CPD_END) : NULL;
+            if (!rv && compoundend && !onlycpdrule) {
                 sfx = NULL;
                 pfx = NULL;
                 rv = affix_check((word+i),strlen(word+i), compoundend, IN_CPD_END);
@@ -1785,7 +1803,7 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
                 TESTAFF(rv->astr, checkcpdtable[scpd-1].cond2, rv->alen))) rv = NULL;
 
             // test CHECKCOMPOUNDPATTERN conditions (forbidden compounds)
-            if (rv && numcheckcpd && scpd == 0 && cpdpat_check(word, i, rv_first, rv)) rv = NULL;
+            if (rv && numcheckcpd && scpd == 0 && cpdpat_check(word, i, rv_first, rv, affixed)) rv = NULL;
 
             // check non_compound flag in suffix and prefix
             if ((rv) && 
@@ -1800,6 +1818,7 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
 
             // check forbiddenwords
             if ((rv) && (rv->astr) && (TESTAFF(rv->astr, forbiddenword, rv->alen) ||
+                TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) ||
                (is_sug && nosuggest && TESTAFF(rv->astr, nosuggest, rv->alen)))) return NULL;
 
             // pfxappnd = prefix of word+i, or NULL
@@ -1829,7 +1848,7 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
                     switch (sfxflag) {
                         case 'c': { numsyllable+=2; break; }
                         case 'J': { numsyllable += 1; break; }
-                        case 'I': { if (TESTAFF(rv->astr, 'J', rv->alen)) numsyllable += 1; break; }
+                        case 'I': { if (rv && TESTAFF(rv->astr, 'J', rv->alen)) numsyllable += 1; break; }
                     }
                 }
             }
@@ -1865,14 +1884,33 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
             if (wordnum < maxwordnum) {
                 rv = compound_check((st+i),strlen(st+i), wordnum+1,
                      numsyllable, maxwordnum, wnum + 1, words, 0, is_sug);
-                if (rv && numcheckcpd && ((scpd == 0 && cpdpat_check(word, i, rv_first, rv)) ||
-                   (scpd != 0 && !cpdpat_check(word, i, rv_first, rv)))) rv = NULL;
+                if (rv && numcheckcpd && ((scpd == 0 && cpdpat_check(word, i, rv_first, rv, affixed)) ||
+                   (scpd != 0 && !cpdpat_check(word, i, rv_first, rv, affixed)))) rv = NULL;
             } else {
                 rv=NULL;
             }
             if (rv) {
                 // forbid compound word, if it is a non compound word with typical fault
-                if (checkcompoundrep && cpdrep_check(word, len)) return NULL;
+                if (checkcompoundrep || forbiddenword) {
+                    struct hentry * rv2 = NULL;
+                    if (checkcompoundrep && cpdrep_check(word, len)) return NULL;
+                    // check first part
+                    if (strncmp(rv->word, word + i, rv->blen) == 0) {
+                        char r = *(st + i + rv->blen);
+                        *(st + i + rv->blen) = '\0';
+                        if (checkcompoundrep && cpdrep_check(st, i + rv->blen)) return NULL;
+                        if (forbiddenword) {
+                    	    rv2 = lookup(word);
+                    	    if (!rv2) rv2 = affix_check(word, len);
+                    	    if (rv2 && rv2->astr && TESTAFF(rv2->astr, forbiddenword, rv2->alen) && 
+                    		(strncmp(rv2->word, st, i + rv->blen) == 0)) {
+                		    return NULL;
+                	    }
+                	}
+                	*(st + i + rv->blen) = r;
+                    }
+                }
+
                 return rv_first;
             }
           } while (striple && !checkedstriple); // end of striple loop
@@ -1894,7 +1932,11 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
         }
         scpd++;
 
-        } while (simplifiedcpd && scpd <= numcheckcpd); // end of simplifiedcpd loop
+        } while (!onlycpdrule && simplifiedcpd && scpd <= numcheckcpd); // end of simplifiedcpd loop
+
+        scpd = 0;
+        wordnum = oldwordnum;
+        numsyllable = oldnumsyllable;
 
         if (soldi != 0) {
           i = soldi;
@@ -1902,9 +1944,8 @@ struct hentry * AffixMgr::compound_check(const char * word, int len,
           soldi = 0;
         } else st[i] = ch;
 
-        scpd = 0;
-        wordnum = oldwordnum;
-        numsyllable = oldnumsyllable;
+        } while (numdefcpd && oldwordnum == 0 && !onlycpdrule && (onlycpdrule = 1)); // end of onlycpd loop
+
     }
 
     return NULL;
@@ -2026,6 +2067,7 @@ int AffixMgr::compound_check_morph(const char * word, int len,
             }
         // else check forbiddenwords
         } else if (rv->astr && (TESTAFF(rv->astr, forbiddenword, rv->alen) ||
+            TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) ||
             TESTAFF(rv->astr, needaffix, rv->alen))) {
                 st[i] = ch;
                 continue;
@@ -2065,7 +2107,8 @@ int AffixMgr::compound_check_morph(const char * word, int len,
             }       
 
         // check forbiddenwords
-        if ((rv) && (rv->astr) && TESTAFF(rv->astr, forbiddenword, rv->alen)) continue;
+        if ((rv) && (rv->astr) && (TESTAFF(rv->astr, forbiddenword, rv->alen)
+            || TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen))) continue;
 
         // increment word number, if the second root has a compoundroot flag
         if ((rv) && (compoundroot) && 
@@ -2097,7 +2140,7 @@ int AffixMgr::compound_check_morph(const char * word, int len,
                ) ||
                (
                    // test CHECKCOMPOUNDPATTERN
-                   numcheckcpd && !words && cpdpat_check(word, i, rv, NULL)
+                   numcheckcpd && !words && cpdpat_check(word, i, rv, NULL, 0)
                ) ||
                ( 
                  checkcompoundcase && !words && cpdcase_check(word, i)
@@ -2173,7 +2216,8 @@ int AffixMgr::compound_check_morph(const char * word, int len,
             }
 
             // check forbiddenwords
-            if ((rv) && (rv->astr) && TESTAFF(rv->astr, forbiddenword, rv->alen)) {
+            if ((rv) && (rv->astr) && (TESTAFF(rv->astr, forbiddenword, rv->alen) ||
+                TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen))) {
                 st[i] = ch;
                 continue;
             }
@@ -2267,7 +2311,8 @@ int AffixMgr::compound_check_morph(const char * word, int len,
             }
 
             // check forbiddenwords
-            if ((rv) && (rv->astr) && (TESTAFF(rv->astr,forbiddenword,rv->alen))
+            if ((rv) && (rv->astr) && (TESTAFF(rv->astr,forbiddenword,rv->alen) ||
+                    TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen))
                     && (! TESTAFF(rv->astr, needaffix, rv->alen))) {
                         st[i] = ch;
                         continue;
@@ -2837,7 +2882,8 @@ char * AffixMgr::morphgen(char * ts, int wl, const unsigned short * ap,
                     if (newword) {
                         hentry * check = pHMgr->lookup(newword); // XXX extra dic
                         if (!check || !check->astr || 
-                            !TESTAFF(check->astr, forbiddenword, check->alen)) {
+                            !(TESTAFF(check->astr, forbiddenword, check->alen) || 
+                              TESTAFF(check->astr, ONLYUPCASEFLAG, check->alen))) {
                                 return newword;
                         }
                         free(newword);
@@ -3391,7 +3437,16 @@ int  AffixMgr::parse_reptable(char * line, FileMgr * af)
                              }
                              break;
                           }
-                  case 1: { reptable[j].pattern = mystrrep(mystrdup(piece),"_"," "); break; }
+                  case 1: {
+                            if (*piece == '^') reptable[j].start = true; else reptable[j].start = false;
+                            reptable[j].pattern = mystrrep(mystrdup(piece + int(reptable[j].start)),"_"," ");
+                            int lr = strlen(reptable[j].pattern) - 1;
+                            if (reptable[j].pattern[lr] == '$') {
+                                reptable[j].end = true;
+                                reptable[j].pattern[lr] = '\0';
+                            } else reptable[j].end = false;
+                            break;
+                          }
                   case 2: { reptable[j].pattern2 = mystrrep(mystrdup(piece),"_"," "); break; }
                   default: break;
                }
@@ -3481,8 +3536,12 @@ int  AffixMgr::parse_convtable(char * line, FileMgr * af, RepList ** rl, const c
            piece = mystrsep(&tp, 0);
         }
         if (!pattern || !pattern2) {
-             HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum());
-             return 1;
+            if (pattern)
+                free(pattern);
+            if (pattern2)
+                free(pattern2);
+            HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum());
+            return 1;
         }
         (*rl)->add(pattern, pattern2);
    }
@@ -3878,7 +3937,7 @@ int  AffixMgr::parse_maptable(char * line, FileMgr * af)
 /* parse in the word breakpoint table */
 int  AffixMgr::parse_breaktable(char * line, FileMgr * af)
 {
-   if (numbreak != 0) {
+   if (numbreak > -1) {
       HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum());
       return 1;
    }
@@ -3893,10 +3952,11 @@ int  AffixMgr::parse_breaktable(char * line, FileMgr * af)
              case 0: { np++; break; }
              case 1: { 
                        numbreak = atoi(piece);
-                       if (numbreak < 1) {
+                       if (numbreak < 0) {
                           HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", af->getlinenum());
                           return 1;
                        }
+                       if (numbreak == 0) return 0;
                        breaktable = (char **) malloc(numbreak * sizeof(char *));
                        if (!breaktable) return 1;
                        np++;
diff --git a/src/hunspell/affixmgr.hxx b/src/hunspell/affixmgr.hxx
index ae5db38..486bb90 100644
--- a/src/hunspell/affixmgr.hxx
+++ b/src/hunspell/affixmgr.hxx
@@ -143,7 +143,8 @@ public:
 
   short       get_syllable (const char * word, int wlen);
   int         cpdrep_check(const char * word, int len);
-  int         cpdpat_check(const char * word, int len, hentry * r1, hentry * r2);
+  int         cpdpat_check(const char * word, int len, hentry * r1, hentry * r2,
+                    const char affixed);
   int         defcpd_check(hentry *** words, short wnum, hentry * rv,
                     hentry ** rwords, char all);
   int         cpdcase_check(const char * word, int len);
diff --git a/src/hunspell/csutil.cxx b/src/hunspell/csutil.cxx
index fd0bae0..e5732a4 100644
--- a/src/hunspell/csutil.cxx
+++ b/src/hunspell/csutil.cxx
@@ -10,6 +10,13 @@
 #include "atypes.hxx"
 #include "langnum.hxx"
 
+// Unicode character encoding information
+struct unicode_info {
+  unsigned short c;
+  unsigned short cupper;
+  unsigned short clower;
+};
+
 #ifdef OPENOFFICEORG
 #  include <unicode/uchar.h>
 #else
@@ -24,15 +31,18 @@
 #include "nsServiceManagerUtils.h"
 #include "nsIUnicodeEncoder.h"
 #include "nsIUnicodeDecoder.h"
-#include "nsICaseConversion.h"
-#include "nsICharsetConverterManager.h"
-#include "nsUnicharUtilCIID.h"
 #include "nsUnicharUtils.h"
+#include "nsICharsetConverterManager.h"
 
 static NS_DEFINE_CID(kCharsetConverterManagerCID, NS_ICHARSETCONVERTERMANAGER_CID);
-static NS_DEFINE_CID(kUnicharUtilCID, NS_UNICHARUTIL_CID);
 #endif
 
+struct unicode_info2 {
+  char cletter;
+  unsigned short cupper;
+  unsigned short clower;
+};
+
 static struct unicode_info2 * utf_tbl = NULL;
 static int utf_tbl_count = 0; // utf_tbl can be used by multiple Hunspell instances
 
@@ -541,8 +551,9 @@ char * copy_field(char * dest, const char * morph, const char * var)
 char * mystrrep(char * word, const char * pat, const char * rep) {
     char * pos = strstr(word, pat);
     if (pos) {
-        int replen = strlen(rep);
-        int patlen = strlen(pat);
+      int replen = strlen(rep);
+      int patlen = strlen(pat);
+      while (pos) {
         if (replen < patlen) {
             char * end = word + strlen(word);
             char * next = pos + replen;
@@ -556,6 +567,8 @@ char * mystrrep(char * word, const char * pat, const char * rep) {
             for (; prev >= end; *next = *prev, prev--, next--);
         }
         strncpy(pos, rep, replen);
+        pos = strstr(word, pat);
+      }
     }
     return word;
 }
@@ -5116,35 +5129,340 @@ static struct cs_info iscii_devanagari_tbl[] = {
 { 0x00, 0xff, 0xff }
 };
 
+static struct cs_info tis620_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x00, 0xa1, 0xa1 },
+{ 0x00, 0xa2, 0xa2 },
+{ 0x00, 0xa3, 0xa3 },
+{ 0x00, 0xa4, 0xa4 },
+{ 0x00, 0xa5, 0xa5 },
+{ 0x00, 0xa6, 0xa6 },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x00, 0xa8, 0xa8 },
+{ 0x00, 0xa9, 0xa9 },
+{ 0x00, 0xaa, 0xaa },
+{ 0x00, 0xab, 0xab },
+{ 0x00, 0xac, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x00, 0xae, 0xae },
+{ 0x00, 0xaf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xb1 },
+{ 0x00, 0xb2, 0xb2 },
+{ 0x00, 0xb3, 0xb3 },
+{ 0x00, 0xb4, 0xb4 },
+{ 0x00, 0xb5, 0xb5 },
+{ 0x00, 0xb6, 0xb6 },
+{ 0x00, 0xb7, 0xb7 },
+{ 0x00, 0xb8, 0xb8 },
+{ 0x00, 0xb9, 0xb9 },
+{ 0x00, 0xba, 0xba },
+{ 0x00, 0xbb, 0xbb },
+{ 0x00, 0xbc, 0xbc },
+{ 0x00, 0xbd, 0xbd },
+{ 0x00, 0xbe, 0xbe },
+{ 0x00, 0xbf, 0xbf },
+{ 0x00, 0xc0, 0xc0 },
+{ 0x00, 0xc1, 0xc1 },
+{ 0x00, 0xc2, 0xc2 },
+{ 0x00, 0xc3, 0xc3 },
+{ 0x00, 0xc4, 0xc4 },
+{ 0x00, 0xc5, 0xc5 },
+{ 0x00, 0xc6, 0xc6 },
+{ 0x00, 0xc7, 0xc7 },
+{ 0x00, 0xc8, 0xc8 },
+{ 0x00, 0xc9, 0xc9 },
+{ 0x00, 0xca, 0xca },
+{ 0x00, 0xcb, 0xcb },
+{ 0x00, 0xcc, 0xcc },
+{ 0x00, 0xcd, 0xcd },
+{ 0x00, 0xce, 0xce },
+{ 0x00, 0xcf, 0xcf },
+{ 0x00, 0xd0, 0xd0 },
+{ 0x00, 0xd1, 0xd1 },
+{ 0x00, 0xd2, 0xd2 },
+{ 0x00, 0xd3, 0xd3 },
+{ 0x00, 0xd4, 0xd4 },
+{ 0x00, 0xd5, 0xd5 },
+{ 0x00, 0xd6, 0xd6 },
+{ 0x00, 0xd7, 0xd7 },
+{ 0x00, 0xd8, 0xd8 },
+{ 0x00, 0xd9, 0xd9 },
+{ 0x00, 0xda, 0xda },
+{ 0x00, 0xdb, 0xdb },
+{ 0x00, 0xdc, 0xdc },
+{ 0x00, 0xdd, 0xdd },
+{ 0x00, 0xde, 0xde },
+{ 0x00, 0xdf, 0xdf },
+{ 0x00, 0xe0, 0xe0 },
+{ 0x00, 0xe1, 0xe1 },
+{ 0x00, 0xe2, 0xe2 },
+{ 0x00, 0xe3, 0xe3 },
+{ 0x00, 0xe4, 0xe4 },
+{ 0x00, 0xe5, 0xe5 },
+{ 0x00, 0xe6, 0xe6 },
+{ 0x00, 0xe7, 0xe7 },
+{ 0x00, 0xe8, 0xe8 },
+{ 0x00, 0xe9, 0xe9 },
+{ 0x00, 0xea, 0xea },
+{ 0x00, 0xeb, 0xeb },
+{ 0x00, 0xec, 0xec },
+{ 0x00, 0xed, 0xed },
+{ 0x00, 0xee, 0xee },
+{ 0x00, 0xef, 0xef },
+{ 0x00, 0xf0, 0xf0 },
+{ 0x00, 0xf1, 0xf1 },
+{ 0x00, 0xf2, 0xf2 },
+{ 0x00, 0xf3, 0xf3 },
+{ 0x00, 0xf4, 0xf4 },
+{ 0x00, 0xf5, 0xf5 },
+{ 0x00, 0xf6, 0xf6 },
+{ 0x00, 0xf7, 0xf7 },
+{ 0x00, 0xf8, 0xf8 },
+{ 0x00, 0xf9, 0xf9 },
+{ 0x00, 0xfa, 0xfa },
+{ 0x00, 0xfb, 0xfb },
+{ 0x00, 0xfc, 0xfc },
+{ 0x00, 0xfd, 0xfd },
+{ 0x00, 0xfe, 0xfe },
+{ 0x00, 0xff, 0xff }
+};
+
+struct enc_entry {
+  const char * enc_name;
+  struct cs_info * cs_table;
+};
+
 static struct enc_entry encds[] = {
-{"ISO8859-1",iso1_tbl},
-{"ISO8859-2",iso2_tbl},
-{"ISO8859-3",iso3_tbl},
-{"ISO8859-4",iso4_tbl},
-{"ISO8859-5",iso5_tbl},
-{"ISO8859-6",iso6_tbl},
-{"ISO8859-7",iso7_tbl},
-{"ISO8859-8",iso8_tbl},
-{"ISO8859-9",iso9_tbl},
-{"ISO8859-10",iso10_tbl},
-{"KOI8-R",koi8r_tbl},
-{"KOI8-U",koi8u_tbl},
-{"microsoft-cp1251",cp1251_tbl},
-{"ISO8859-13", iso13_tbl},
-{"ISO8859-14", iso14_tbl},
-{"ISO8859-15", iso15_tbl},
-{"ISCII-DEVANAGARI", iscii_devanagari_tbl}
+  {"iso88591",iso1_tbl},                     //ISO-8859-1
+  {"iso88592",iso2_tbl},                     //ISO-8859-2
+  {"iso88593",iso3_tbl},                     //ISO-8859-3
+  {"iso88594",iso4_tbl},                     //ISO-8859-4
+  {"iso88595",iso5_tbl},                     //ISO-8859-5
+  {"iso88596",iso6_tbl},                     //ISO-8859-6
+  {"iso88597",iso7_tbl},                     //ISO-8859-7
+  {"iso88598",iso8_tbl},                     //ISO-8859-8
+  {"iso88599",iso9_tbl},                     //ISO-8859-9
+  {"iso885910",iso10_tbl},                   //ISO-8859-10
+  {"tis620",tis620_tbl},                     //TIS-620/ISO-8859-11
+  {"tis6202533",tis620_tbl},                 //TIS-620/ISO-8859-11
+  {"iso885911",tis620_tbl},                  //TIS-620/ISO-8859-11
+  {"iso885913", iso13_tbl},                  //ISO-8859-13
+  {"iso885914", iso14_tbl},                  //ISO-8859-14
+  {"iso885915", iso15_tbl},                  //ISO-8859-15
+  {"koi8r",koi8r_tbl},                       //KOI8-R
+  {"koi8u",koi8u_tbl},                       //KOI8-U
+  {"cp1251",cp1251_tbl},                     //CP-1251
+  {"microsoftcp1251",cp1251_tbl},            //microsoft-cp1251
+  {"xisciias", iscii_devanagari_tbl},        //x-iscii-as
+  {"isciidevanagari", iscii_devanagari_tbl}  //ISCII-DEVANAGARI
 };
 
+/* map to lower case and remove non alphanumeric chars */
+static void toAsciiLowerAndRemoveNonAlphanumeric( const char* pName, char* pBuf )
+{
+    while ( *pName )
+    {
+        /* A-Z */
+        if ( (*pName >= 0x41) && (*pName <= 0x5A) )
+        {
+            *pBuf = (*pName)+0x20;  /* toAsciiLower */
+            pBuf++;
+        }
+        /* a-z, 0-9 */
+        else if ( ((*pName >= 0x61) && (*pName <= 0x7A)) ||
+                  ((*pName >= 0x30) && (*pName <= 0x39)) )
+        {
+            *pBuf = *pName;
+            pBuf++;
+        }
+
+        pName++;
+    }
+
+    *pBuf = '\0';
+}
+
 struct cs_info * get_current_cs(const char * es) {
-  struct cs_info * ccs = encds[0].cs_table;
+  char *normalized_encoding = new char[strlen(es)+1];
+  toAsciiLowerAndRemoveNonAlphanumeric(es, normalized_encoding);
+
+  struct cs_info * ccs = NULL;
   int n = sizeof(encds) / sizeof(encds[0]);
   for (int i = 0; i < n; i++) {
-    if (strcmp(es,encds[i].enc_name) == 0) {
+    if (strcmp(normalized_encoding,encds[i].enc_name) == 0) {
       ccs = encds[i].cs_table;
       break;
     }
   }
+
+  delete[] normalized_encoding;
+
+  if (!ccs) {
+    HUNSPELL_WARNING(stderr, "error: unknown encoding %s: using %s as fallback\n", es, encds[0].enc_name);
+    ccs = encds[0].cs_table;
+  }
+
   return ccs;
 }
 #else
@@ -5156,7 +5474,6 @@ struct cs_info * get_current_cs(const char * es) {
 
   nsCOMPtr<nsIUnicodeEncoder> encoder; 
   nsCOMPtr<nsIUnicodeDecoder> decoder; 
-  nsCOMPtr<nsICaseConversion> caseConv;
 
   nsresult rv;
   nsCOMPtr<nsICharsetConverterManager> ccm = do_GetService(kCharsetConverterManagerCID, &rv);
@@ -5172,7 +5489,6 @@ struct cs_info * get_current_cs(const char * es) {
     return nsnull;
   decoder->SetInputErrorBehavior(decoder->kOnError_Signal);
 
-  caseConv = do_GetService(kUnicharUtilCID, &rv);
   if (NS_FAILED(rv))
     return nsnull;
 
@@ -5197,18 +5513,14 @@ struct cs_info * get_current_cs(const char * es) {
       // NS_OK_UDEC_MOREOUTPUT or NS_OK_UDEC_MOREINPUT.
       if (rv != NS_OK || charLength != 1 || uniLength != 1)
         break;
-      rv = caseConv->ToLower(uni, &uniCased);
-      if (NS_FAILED(rv))
-        break;
+      uniCased = ToLowerCase(uni);
       rv = encoder->Convert(&uniCased, &uniLength, &lower, &charLength);
       // Explicitly check NS_OK because we don't want to allow
       // NS_OK_UDEC_MOREOUTPUT or NS_OK_UDEC_MOREINPUT.
       if (rv != NS_OK || charLength != 1 || uniLength != 1)
         break;
 
-      rv = caseConv->ToUpper(uni, &uniCased);
-      if (NS_FAILED(rv))
-        break;
+      uniCased = ToUpperCase(uni);
       rv = encoder->Convert(&uniCased, &uniLength, &upper, &charLength);
       // Explicitly check NS_OK because we don't want to allow
       // NS_OK_UDEC_MOREOUTPUT or NS_OK_UDEC_MOREINPUT.
@@ -5254,51 +5566,46 @@ char * get_casechars(const char * enc) {
     return mystrdup(expw);
 }
 
+// language to encoding default map
 
+struct lang_map {
+  const char * lang;
+  int num;
+};
 
 static struct lang_map lang2enc[] = {
-{"ar", "UTF-8", LANG_ar},
-{"az", "UTF-8", LANG_az},
-{"bg", "microsoft-cp1251", LANG_bg},
-{"ca", "ISO8859-1", LANG_ca},
-{"cs", "ISO8859-2", LANG_cs},
-{"da", "ISO8859-1", LANG_da},
-{"de", "ISO8859-1", LANG_de},
-{"el", "ISO8859-7", LANG_el},
-{"en", "ISO8859-1", LANG_en},
-{"es", "ISO8859-1", LANG_es},
-{"eu", "ISO8859-1", LANG_eu},
-{"gl", "ISO8859-1", LANG_gl},
-{"fr", "ISO8859-15", LANG_fr},
-{"hr", "ISO8859-2", LANG_hr},
-{"hu", "ISO8859-2", LANG_hu},
-{"it", "ISO8859-1", LANG_it},
-{"la", "ISO8859-1", LANG_la},
-{"lv", "ISO8859-13", LANG_lv},
-{"nl", "ISO8859-1", LANG_nl},
-{"pl", "ISO8859-2", LANG_pl},
-{"pt", "ISO8859-1", LANG_pt},
-{"sv", "ISO8859-1", LANG_sv},
-{"tr", "UTF-8", LANG_tr},
-{"ru", "KOI8-R", LANG_ru},
-{"uk", "KOI8-U", LANG_uk}
+{"ar", LANG_ar},
+{"az", LANG_az},
+{"bg", LANG_bg},
+{"ca", LANG_ca},
+{"cs", LANG_cs},
+{"da", LANG_da},
+{"de", LANG_de},
+{"el", LANG_el},
+{"en", LANG_en},
+{"es", LANG_es},
+{"eu", LANG_eu},
+{"gl", LANG_gl},
+{"fr", LANG_fr},
+{"hr", LANG_hr},
+{"hu", LANG_hu},
+{"it", LANG_it},
+{"la", LANG_la},
+{"lv", LANG_lv},
+{"nl", LANG_nl},
+{"pl", LANG_pl},
+{"pt", LANG_pt},
+{"sv", LANG_sv},
+{"tr", LANG_tr},
+{"ru", LANG_ru},
+{"uk", LANG_uk}
 };
 
 
-const char * get_default_enc(const char * lang) {
-  int n = sizeof(lang2enc) / sizeof(lang2enc[0]);
-  for (int i = 0; i < n; i++) {
-    if (strcmp(lang,lang2enc[i].lang) == 0) {
-      return lang2enc[i].def_enc;
-    }
-  }
-  return NULL;
-}
-
 int get_lang_num(const char * lang) {
   int n = sizeof(lang2enc) / sizeof(lang2enc[0]);
   for (int i = 0; i < n; i++) {
-    if (strncmp(lang,lang2enc[i].lang,2) == 0) {
+    if (strcmp(lang, lang2enc[i].lang) == 0) {
       return lang2enc[i].num;
     }
   }
@@ -5337,15 +5644,6 @@ void free_utf_tbl() {
   }
 }
 
-#ifdef MOZILLA_CLIENT
-static nsCOMPtr<nsICaseConversion>& getcaseConv()
-{
-  nsresult rv;
-  static nsCOMPtr<nsICaseConversion> caseConv = do_GetService(kUnicharUtilCID, &rv);
-  return caseConv;
-}
-#endif
-
 unsigned short unicodetoupper(unsigned short c, int langnum)
 {
   // In Azeri and Turkish, I and i dictinct letters:
@@ -5357,9 +5655,7 @@ unsigned short unicodetoupper(unsigned short c, int langnum)
   return u_toupper(c);
 #else
 #ifdef MOZILLA_CLIENT
-  PRUnichar ch2;
-  getcaseConv()->ToUpper((PRUnichar) c, &ch2);
-  return ch2;
+  return ToUpperCase((PRUnichar) c);
 #else
   return (utf_tbl) ? utf_tbl[c].cupper : c;
 #endif
@@ -5377,9 +5673,7 @@ unsigned short unicodetolower(unsigned short c, int langnum)
   return u_tolower(c);
 #else
 #ifdef MOZILLA_CLIENT
-  PRUnichar ch2;
-  getcaseConv()->ToLower((PRUnichar) c, &ch2);
-  return ch2;
+  return ToLowerCase((PRUnichar) c);
 #else
   return (utf_tbl) ? utf_tbl[c].clower : c;
 #endif
diff --git a/src/hunspell/csutil.hxx b/src/hunspell/csutil.hxx
index 350bd93..7bd0b91 100644
--- a/src/hunspell/csutil.hxx
+++ b/src/hunspell/csutil.hxx
@@ -116,42 +116,14 @@ struct cs_info {
   unsigned char cupper;
 };
 
-// Unicode character encoding information
-struct unicode_info {
-  unsigned short c;
-  unsigned short cupper;
-  unsigned short clower;
-};
-
-struct unicode_info2 {
-  char cletter;
-  unsigned short cupper;
-  unsigned short clower;
-};
-
 LIBHUNSPELL_DLL_EXPORTED int initialize_utf_tbl();
 LIBHUNSPELL_DLL_EXPORTED void free_utf_tbl();
 LIBHUNSPELL_DLL_EXPORTED unsigned short unicodetoupper(unsigned short c, int langnum);
 LIBHUNSPELL_DLL_EXPORTED unsigned short unicodetolower(unsigned short c, int langnum);
 LIBHUNSPELL_DLL_EXPORTED int unicodeisalpha(unsigned short c);
 
-struct enc_entry {
-  const char * enc_name;
-  struct cs_info * cs_table;
-};
-
-// language to encoding default map
-
-struct lang_map {
-  const char * lang;
-  const char * def_enc;
-  int num;
-};
-
 LIBHUNSPELL_DLL_EXPORTED struct cs_info * get_current_cs(const char * es);
 
-LIBHUNSPELL_DLL_EXPORTED const char * get_default_enc(const char * lang);
-
 // get language identifiers of language codes
 LIBHUNSPELL_DLL_EXPORTED int get_lang_num(const char * lang);
 
@@ -219,9 +191,9 @@ LIBHUNSPELL_DLL_EXPORTED inline char* HENTRY_DATA(struct hentry *h)
     if (!h->var)
         ret = NULL;
     else if (h->var & H_OPT_ALIASM)
-        ret = get_stored_pointer(&(h->word[0]) + h->blen + 1);
+        ret = get_stored_pointer(HENTRY_WORD(h) + h->blen + 1);
     else 
-        ret = &(h->word[0]) + h->blen + 1;
+        ret = HENTRY_WORD(h) + h->blen + 1;
     return ret;
 }
 
@@ -232,9 +204,9 @@ LIBHUNSPELL_DLL_EXPORTED inline const char* HENTRY_DATA2(const struct hentry *h)
     if (!h->var)
         ret = "";
     else if (h->var & H_OPT_ALIASM)
-        ret = get_stored_pointer(&(h->word[0]) + h->blen + 1);
+        ret = get_stored_pointer(HENTRY_WORD(h) + h->blen + 1);
     else
-        ret = &(h->word[0]) + h->blen + 1;
+        ret = HENTRY_WORD(h) + h->blen + 1;
     return ret;
 }
 
diff --git a/src/hunspell/hashmgr.cxx b/src/hunspell/hashmgr.cxx
index d276faf..ea93b87 100644
--- a/src/hunspell/hashmgr.cxx
+++ b/src/hunspell/hashmgr.cxx
@@ -448,6 +448,7 @@ int HashMgr::load_tables(const char * tpath, const char * key)
         al = decode_flags(&flags, ap + 1, dict);
         if (al == -1) {
             HUNSPELL_WARNING(stderr, "Can't allocate memory.\n");
+            delete dict;
             return 6;
         }
         flag_qsort(flags, 0, al);
@@ -491,7 +492,6 @@ int HashMgr::hash(const char * word) const
 int HashMgr::decode_flags(unsigned short ** result, char * flags, FileMgr * af) {
     int len;
     if (*flags == '\0') {
-        HUNSPELL_WARNING(stderr, "error: line %d: bad flagvector\n", af->getlinenum());
         *result = NULL;
         return 0;
     }
diff --git a/src/hunspell/htypes.hxx b/src/hunspell/htypes.hxx
index f89c2c5..5b6c909 100644
--- a/src/hunspell/htypes.hxx
+++ b/src/hunspell/htypes.hxx
@@ -12,7 +12,7 @@
 #define H_OPT_PHON   (1 << 2)
 
 // see also csutil.hxx
-#define HENTRY_WORD(h) (h->word)
+#define HENTRY_WORD(h) &(h->word[0])
 
 // approx. number  of user defined words
 #define USERWORD 1000
diff --git a/src/hunspell/hunspell.cxx b/src/hunspell/hunspell.cxx
index 3750ced..07c2d9a 100644
--- a/src/hunspell/hunspell.cxx
+++ b/src/hunspell/hunspell.cxx
@@ -33,9 +33,10 @@ Hunspell::Hunspell(const char * affpath, const char * dpath, const char * key)
     /* encoding from the Affix Manager for that dictionary */
     char * try_string = pAMgr->get_try_string();
     encoding = pAMgr->get_encoding();
-    csconv = get_current_cs(encoding);
     langnum = pAMgr->get_langnum();
     utf8 = pAMgr->get_utf8();
+    if (!utf8)
+        csconv = get_current_cs(encoding);
     complexprefixes = pAMgr->get_complexprefixes();
     wordbreak = pAMgr->get_breaktable();
 
@@ -569,6 +570,11 @@ struct hentry * Hunspell::checkword(const char * w, int * info, char ** root)
      word = w2;
   } else word = w;
 
+  len = strlen(word);
+
+  if (!len)
+      return NULL;
+
   // word reversing wrapper for complex prefixes
   if (complexprefixes) {
     if (word != w2) {
@@ -606,7 +612,6 @@ struct hentry * Hunspell::checkword(const char * w, int * info, char ** root)
   // check with affixes
   if (!he && pAMgr) {
      // try stripping off affixes */
-     len = strlen(word);
      he = pAMgr->affix_check(word, len, 0);
 
      // check compound restriction and onlyupcase
@@ -959,10 +964,12 @@ int Hunspell::suggest(char*** slst, const char * word)
       if (strcmp((*slst)[k], (*slst)[j]) == 0) {
         free((*slst)[j]);
         l--;
+        break;
       }
     }
     l++;
   }
+  ns = l;
 
   // output conversion
   rl = (pAMgr) ? pAMgr->get_oconvtable() : NULL;
@@ -1475,7 +1482,12 @@ int Hunspell::analyze(char*** slst, const char * word)
       if (dash[1] == '\0') { // base word ending with dash
         if (spell(cw)) {
 		char * p = pSMgr->suggest_morph(cw);
-		if (p) return line_tok(pSMgr->suggest_morph(cw), slst, MSEP_REC);
+		if (p) {
+		    int ret = line_tok(p, slst, MSEP_REC);
+		    free(p);
+		    return ret;
+		}
+		
 	}
       } else if ((dash[1] == 'e') && (dash[2] == '\0')) { // XXX (HU) -e hat.
         if (spell(cw) && (spell("-e"))) {
@@ -1658,7 +1670,7 @@ int Hunspell::get_xml_list(char ***slst, char * list, const char * tag) {
     for (p = list, n = 0; (p = strstr(p, tag)); p++, n++) {
         int l = strlen(p);
         (*slst)[n] = (char *) malloc(l + 1);
-        if (!(*slst)[n]) return (n > 0 ? n - 1 : 0);
+        if (!(*slst)[n]) return n;
         if (!get_xml_par((*slst)[n], p + strlen(tag) - 1, l)) {
             free((*slst)[n]);
             break;
@@ -1710,12 +1722,14 @@ int Hunspell::spellml(char*** slst, const char * word)
             return generate(slst, cw, cw2);
         }
       } else {
-        char ** slst2;
-        if ((q2 = strstr(q2 + 1, "<code")) &&
-          (n = get_xml_list(&slst2, strchr(q2, '>'), "<a>"))) {
-             int n2 = generate(slst, cw, slst2, n);
-             freelist(&slst2, n);
-             return uniqlist(*slst, n2);
+        if ((q2 = strstr(q2 + 1, "<code"))) {
+          char ** slst2;
+          if ((n = get_xml_list(&slst2, strchr(q2, '>'), "<a>"))) {
+            int n2 = generate(slst, cw, slst2, n);
+            freelist(&slst2, n);
+            return uniqlist(*slst, n2);
+          }
+          freelist(&slst2, n);
         }
       }
   }
diff --git a/src/hunspell/replist.cxx b/src/hunspell/replist.cxx
index 3ffc9e9..d9aa563 100644
--- a/src/hunspell/replist.cxx
+++ b/src/hunspell/replist.cxx
@@ -58,6 +58,8 @@ int RepList::add(char * pat1, char * pat2) {
     if (r == NULL) return 1;
     r->pattern = mystrrep(pat1, "_", " ");
     r->pattern2 = mystrrep(pat2, "_", " ");
+    r->start = false;
+    r->end = false;
     dat[pos++] = r;
     for (int i = pos - 1; i > 0; i--) {
       r = dat[i];
diff --git a/src/hunspell/suggestmgr.cxx b/src/hunspell/suggestmgr.cxx
index 82053c4..8e08c98 100644
--- a/src/hunspell/suggestmgr.cxx
+++ b/src/hunspell/suggestmgr.cxx
@@ -39,14 +39,18 @@ SuggestMgr::SuggestMgr(const char * tryme, int maxn,
   maxngramsugs = MAXNGRAMSUGS;
 
   if (pAMgr) {
-        char * enc = pAMgr->get_encoding();
-        csconv = get_current_cs(enc);
-        free(enc);
         langnum = pAMgr->get_langnum();
         ckey = pAMgr->get_key_string();
         nosplitsugs = pAMgr->get_nosplitsugs();
-        if (pAMgr->get_maxngramsugs() >= 0) maxngramsugs = pAMgr->get_maxngramsugs();
+        if (pAMgr->get_maxngramsugs() >= 0)
+            maxngramsugs = pAMgr->get_maxngramsugs();
         utf8 = pAMgr->get_utf8();
+        if (!utf8)
+        {
+            char * enc = pAMgr->get_encoding();
+            csconv = get_current_cs(enc);
+            free(enc);
+        }
         complexprefixes = pAMgr->get_complexprefixes();
   }
 
@@ -124,7 +128,7 @@ int SuggestMgr::suggest(char*** slst, const char * w, int nsug,
   char ** wlst;    
   w_char word_utf[MAXSWL];
   int wl = 0;
-
+  int nsugorig = nsug;
   char w2[MAXWORDUTF8LEN];
   const char * word = w;
 
@@ -185,7 +189,7 @@ int SuggestMgr::suggest(char*** slst, const char * w, int nsug,
     }
 
     // only suggest compound words when no other suggestion
-    if ((cpdsuggest == 0) && (nsug > 0)) nocompoundtwowords=1;
+    if ((cpdsuggest == 0) && (nsug > nsugorig)) nocompoundtwowords=1;
 
     // did we add a char that should not be there
     if ((nsug < maxSug) && (nsug > -1)) {
@@ -395,7 +399,8 @@ int SuggestMgr::replchars(char** wlst, const char * word, int ns, int cpdsuggest
       lenr = strlen(reptable[i].pattern2);
       lenp = strlen(reptable[i].pattern);
       // search every occurence of the pattern in the word
-      while ((r=strstr(r, reptable[i].pattern)) != NULL) {
+      while ((r=strstr(r, reptable[i].pattern)) != NULL && (!reptable[i].end || strlen(r) == strlen(reptable[i].pattern)) &&
+        (!reptable[i].start || r == word)) {
           strcpy(candidate, word);
           if (r-word + lenr + strlen(r+lenp) >= MAXSWUTF8L) break;
           strcpy(candidate+(r-word),reptable[i].pattern2);
@@ -405,19 +410,24 @@ int SuggestMgr::replchars(char** wlst, const char * word, int ns, int cpdsuggest
           // check REP suggestions with space
           char * sp = strchr(candidate, ' ');
           if (sp) {
-            *sp = '\0';
-            if (checkword(candidate, strlen(candidate), 0, NULL, NULL)) {
-              int oldns = ns;
-              *sp = ' ';
-              ns = testsug(wlst, sp + 1, strlen(sp + 1), ns, cpdsuggest, NULL, NULL);
-              if (ns == -1) return -1;
-              if (oldns < ns) {
-                free(wlst[ns - 1]);
-                wlst[ns - 1] = mystrdup(candidate);
-                if (!wlst[ns - 1]) return -1;
+            char * prev = candidate;
+            while (sp) {
+              *sp = '\0';
+              if (checkword(prev, strlen(prev), 0, NULL, NULL)) {
+                int oldns = ns;
+                *sp = ' ';
+                ns = testsug(wlst, sp + 1, strlen(sp + 1), ns, cpdsuggest, NULL, NULL);
+                if (ns == -1) return -1;
+                if (oldns < ns) {
+                  free(wlst[ns - 1]);
+                  wlst[ns - 1] = mystrdup(candidate);
+                  if (!wlst[ns - 1]) return -1;
+                }
               }
-            }            
-            *sp = ' ';
+              *sp = ' ';
+              prev = sp + 1;
+              sp = strchr(prev, ' ');
+            }
           }
           r++; // search for the next letter
       }
@@ -1718,6 +1728,7 @@ int SuggestMgr::leftcommonsubstring(char * s1, const char * s2) {
   if (utf8) {
     w_char su1[MAXSWL];
     w_char su2[MAXSWL];
+    su1[0].l = su2[0].l = su1[0].h = su2[0].h = 0;
     // decapitalize dictionary word
     if (complexprefixes) {
       int l1 = u8_u16(su1, MAXSWL, s1);
diff --git a/src/hunspell/w_char.hxx b/src/hunspell/w_char.hxx
index 99cfe63..3719dd3 100644
--- a/src/hunspell/w_char.hxx
+++ b/src/hunspell/w_char.hxx
@@ -14,6 +14,8 @@ typedef struct __attribute__ ((packed)) {
 struct replentry {
   char * pattern;
   char * pattern2;
+  bool start;
+  bool end;
 };
 
 #endif
diff --git a/src/parsers/htmlparser.cxx b/src/parsers/htmlparser.cxx
index 925c05f..341be4e 100644
--- a/src/parsers/htmlparser.cxx
+++ b/src/parsers/htmlparser.cxx
@@ -141,7 +141,7 @@ char * HTMLParser::next_token()
 			} 			
 			break;
 		case ST_CHAR_ENTITY: // SGML element
-			if ((tolower(line[actual][head]) < 'a') || (tolower(line[actual][head]) > 'z')) {
+			if ((tolower(line[actual][head]) == ';')) {
 				state = prevstate;
 				head--;
 			}
diff --git a/src/tools/hunspell.cxx b/src/tools/hunspell.cxx
index 827f75b..cf411a8 100644
--- a/src/tools/hunspell.cxx
+++ b/src/tools/hunspell.cxx
@@ -63,11 +63,13 @@
 #define LIBDIR \
     "/usr/share/hunspell:" \
     "/usr/share/myspell:" \
-    "/usr/share/myspell/dicts"
+    "/usr/share/myspell/dicts:" \
+    "/Library/Spelling"
 #define USEROOODIR \
     ".openoffice.org/3/user/wordbook:" \
     ".openoffice.org2/user/wordbook:" \
-    ".openoffice.org2.0/user/wordbook"
+    ".openoffice.org2.0/user/wordbook:" \
+    "Library/Spelling"
 #define OOODIR \
     "/opt/openoffice.org/basis3.0/share/dict/ooo:" \
     "/usr/lib/openoffice.org/basis3.0/share/dict/ooo:" \
@@ -178,16 +180,26 @@ int dmax = 0;                // dictionary count
 
 // functions
 
+#ifdef HAVE_ICONV
+static const char* fix_encoding_name(const char *enc)
+{
+    if (strcmp(enc, "TIS620-2533") == 0)
+        enc = "TIS620";
+    return enc;
+}
+#endif
+
 /* change character encoding */
 char * chenc(char * st, const char * enc1, const char * enc2) {
     char * out = st;
 #ifdef HAVE_ICONV
     if (enc1 && enc2 && strcmp(enc1, enc2) != 0) {
+
 	size_t c1 = strlen(st) + 1;
 	size_t c2 = MAXLNLEN;
 	char * source = st;
 	char * dest = text_conv;
-	iconv_t conv = iconv_open(enc2, enc1);
+	iconv_t conv = iconv_open(fix_encoding_name(enc2), fix_encoding_name(enc1));
         if (conv == (iconv_t) -1) {
 	    fprintf(stderr, gettext("error - iconv_open: %s -> %s\n"), enc2, enc1);
 	} else {	
@@ -230,7 +242,7 @@ TextParser * get_parser(int format, char * extension, Hunspell * pMS) {
 	    size_t c1 = wlen;
 	    size_t c2 = MAXLNLEN;
 	    char * dest = text_conv;
-	    iconv_t conv = iconv_open("UTF-8", denc);
+	    iconv_t conv = iconv_open("UTF-8", fix_encoding_name(denc));
 	    if (conv == (iconv_t) -1) {
 	        fprintf(stderr, gettext("error - iconv_open: UTF-8 -> %s\n"), denc);
 	        wordchars_utf16 = NULL;
@@ -253,7 +265,7 @@ TextParser * get_parser(int format, char * extension, Hunspell * pMS) {
 	char ch[2];
 	char u8[10];
 	*pletters = '\0';
-	iconv_t conv = iconv_open("UTF-8", io_enc);
+	iconv_t conv = iconv_open("UTF-8", fix_encoding_name(io_enc));
         if (conv == (iconv_t) -1) {
 	    fprintf(stderr, gettext("error - iconv_open: UTF-8 -> %s\n"), io_enc);
 	} else {
@@ -295,7 +307,7 @@ TextParser * get_parser(int format, char * extension, Hunspell * pMS) {
 	    char * dest = letters + strlen(letters); // append wordchars
 	    size_t c1 = len + 1;
 	    size_t c2 = len + 1;
-	    iconv_t conv = iconv_open(io_enc, denc);
+	    iconv_t conv = iconv_open(fix_encoding_name(io_enc), fix_encoding_name(denc));
 	    if (conv == (iconv_t) -1) {
 	        fprintf(stderr, gettext("error - iconv_open: %s -> %s\n"), io_enc, denc);
 	    } else {
@@ -686,14 +698,13 @@ if (pos >= 0) {
 
 		case PIPE: {
 		int info;
-                char * root = NULL;
+		char * root = NULL;
 		if (check(pMS, &d, token, &info, &root)) {
 			if (!terse_mode) {
 				if (verbose_mode) fprintf(stdout,"* %s\n", token);
 				else fprintf(stdout,"*\n");
 			    }
 			fflush(stdout);
-			if (root) free(root);
 		} else {
 			char ** wlst = NULL;
 			int ns = pMS[d]->suggest(&wlst, token);
@@ -712,6 +723,7 @@ if (pos >= 0) {
 			fprintf(stdout, "\n");
 			fflush(stdout);
 		}
+		if (root) free(root);
 		free(token);
 		continue;
 		}
diff --git a/src/win_api/Hunspell.rc b/src/win_api/Hunspell.rc
index 8c20a68..7e61185 100644
--- a/src/win_api/Hunspell.rc
+++ b/src/win_api/Hunspell.rc
@@ -2,8 +2,8 @@
 #include <windows.h>
 
 VS_VERSION_INFO VERSIONINFO
-FILEVERSION 1,2,12,0
-PRODUCTVERSION 1,2,12,0
+FILEVERSION 1,2,14,0
+PRODUCTVERSION 1,2,14,0
 FILEFLAGSMASK 0x17L
 FILEFLAGS 0
 FILEOS VOS_NT_WINDOWS32
@@ -21,12 +21,12 @@ BEGIN
             VALUE "Comments", "Hunspell (http://hunspell.sourceforge.net/) by L�szl� N�meth"
             VALUE "CompanyName", "http://hunspell.sourceforge.net/";
             VALUE "FileDescription", "libhunspell"
-            VALUE "FileVersion", "1.2.12"
+            VALUE "FileVersion", "1.2.14"
             VALUE "InternalName", "libhunspell"
             VALUE "LegalCopyright", "Copyright (c) 2007-2010"
             VALUE "OriginalFilename", "libhunspell.dll"
             VALUE "ProductName", "Hunspell Dynamic Link Library"
-            VALUE "ProductVersion", "1.2.12"
+            VALUE "ProductVersion", "1.2.14"
 		END
 	END
 END
diff --git a/src/win_api/Makefile.cygwin b/src/win_api/Makefile.cygwin
index 8d0d23c..010ee65 100644
--- a/src/win_api/Makefile.cygwin
+++ b/src/win_api/Makefile.cygwin
@@ -9,7 +9,11 @@
 #  
 # 2. open a Cygwin shell, cd into this directory and run make
 #
-
+#
+# NOTE: newer MINGW libraries may have a compilation error, where the solution
+# is removing the "using ::swprintf" and "using ::vswprintf" lines from 
+# /usr/lib/gcc/i686-pc-mingw32/3.4.x/include/c++/cwchar
+#
 
 #CC=gcc 
 #CXX=g++
@@ -41,7 +45,8 @@ csutil.o \
 phonet.o \
 hunspell.o \
 filemgr.o \
-hunzip.o
+hunzip.o \
+replist.o
 
 OBJS2 = \
 textparser.o \
@@ -83,6 +88,7 @@ distclean:	clean
 
 hunspell.hxx:
 	ln -s $(OBJ)/*xx $(OBJ)/hunspell.h $(OBJ)/license* $(OBJ2)/*xx ./
+	ln -s $(OBJ)/hunvisapi.h ./
 	ln -s  $(OBJ3)/hunspell.cxx ./hunspellprg.cxx
 	ln -s  $(OBJ3)/hunzip.cxx ./hunzipprg.cxx
 	ln -s  $(OBJ3)/example.cxx $(OBJ3)/hzip.c ./
diff --git a/src/win_api/config.h b/src/win_api/config.h
index 87d20f2..4e2bf51 100644
--- a/src/win_api/config.h
+++ b/src/win_api/config.h
@@ -204,5 +204,5 @@
 #define PACKAGE_TARNAME
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.2.12"
-#define VERSION "1.2.12"
+#define PACKAGE_VERSION "1.2.14"
+#define VERSION "1.2.14"
diff --git a/tests/2970240.aff b/tests/2970240.aff
new file mode 100644
index 0000000..6ef9516
--- /dev/null
+++ b/tests/2970240.aff
@@ -0,0 +1,5 @@
+# test words with three parts
+CHECKCOMPOUNDPATTERN 1
+CHECKCOMPOUNDPATTERN le fi
+COMPOUNDFLAG c
+
diff --git a/tests/2970240.dic b/tests/2970240.dic
new file mode 100644
index 0000000..f0b6305
--- /dev/null
+++ b/tests/2970240.dic
@@ -0,0 +1,4 @@
+3
+first/c
+middle/c
+last/c
diff --git a/tests/2970240.good b/tests/2970240.good
new file mode 100644
index 0000000..a8d3a59
--- /dev/null
+++ b/tests/2970240.good
@@ -0,0 +1 @@
+firstmiddlelast
diff --git a/tests/rep.test b/tests/2970240.test
similarity index 100%
copy from tests/rep.test
copy to tests/2970240.test
diff --git a/tests/2970240.wrong b/tests/2970240.wrong
new file mode 100644
index 0000000..32cead6
--- /dev/null
+++ b/tests/2970240.wrong
@@ -0,0 +1 @@
+lastmiddlefirst
diff --git a/tests/2970242.aff b/tests/2970242.aff
new file mode 100644
index 0000000..909f0fb
--- /dev/null
+++ b/tests/2970242.aff
@@ -0,0 +1,4 @@
+CHECKCOMPOUNDPATTERN 1
+CHECKCOMPOUNDPATTERN /a /b
+COMPOUNDFLAG c
+
diff --git a/tests/2970242.dic b/tests/2970242.dic
new file mode 100644
index 0000000..da0d05f
--- /dev/null
+++ b/tests/2970242.dic
@@ -0,0 +1,4 @@
+3
+foo/ac
+bar/c
+baz/bc
diff --git a/tests/2970242.good b/tests/2970242.good
new file mode 100644
index 0000000..90ecb18
--- /dev/null
+++ b/tests/2970242.good
@@ -0,0 +1,5 @@
+foobar
+barfoo
+bazfoo
+barbaz
+bazbar
diff --git a/tests/rep.test b/tests/2970242.test
similarity index 100%
copy from tests/rep.test
copy to tests/2970242.test
diff --git a/tests/2970242.wrong b/tests/2970242.wrong
new file mode 100644
index 0000000..9dabfec
--- /dev/null
+++ b/tests/2970242.wrong
@@ -0,0 +1 @@
+foobaz
diff --git a/tests/2999225.aff b/tests/2999225.aff
new file mode 100644
index 0000000..ea9d0b0
--- /dev/null
+++ b/tests/2999225.aff
@@ -0,0 +1,6 @@
+COMPOUNDRULE 1
+COMPOUNDRULE ab
+
+COMPOUNDBEGIN A
+COMPOUNDEND B
+
diff --git a/tests/2999225.dic b/tests/2999225.dic
new file mode 100644
index 0000000..2498603
--- /dev/null
+++ b/tests/2999225.dic
@@ -0,0 +1,4 @@
+3
+foo/aA
+bar/b
+baz/B
diff --git a/tests/2999225.good b/tests/2999225.good
new file mode 100644
index 0000000..865e154
--- /dev/null
+++ b/tests/2999225.good
@@ -0,0 +1,2 @@
+foobar
+foobaz
diff --git a/tests/rep.test b/tests/2999225.test
similarity index 100%
copy from tests/rep.test
copy to tests/2999225.test
diff --git a/tests/Makefile.am b/tests/Makefile.am
index b4293cc..ef16307 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -101,7 +101,18 @@ morph.test \
 fullstrip.test \
 iconv.test \
 oconv.test \
-korean.test
+encoding.test \
+korean.test \
+opentaal_forbiddenword1.test \
+opentaal_forbiddenword2.test \
+opentaal_keepcase.test \
+arabic.test \
+2970240.test \
+2970242.test \
+breakoff.test \
+opentaal_cpdpat.test \
+opentaal_cpdpat2.test \
+2999225.test
 # infixes.test
 
 distclean-local:
@@ -589,11 +600,73 @@ oconv.good \
 oconv.sug \
 oconv.test \
 oconv.wrong \
+encoding.aff \
+encoding.dic \
+encoding.good \
+encoding.test \
+opentaal_forbiddenword1.aff \
+opentaal_forbiddenword1.dic \
+opentaal_forbiddenword1.good \
+opentaal_forbiddenword1.sug \
+opentaal_forbiddenword1.test \
+opentaal_forbiddenword1.wrong \
+opentaal_forbiddenword2.aff \
+opentaal_forbiddenword2.dic \
+opentaal_forbiddenword2.good \
+opentaal_forbiddenword2.sug \
+opentaal_forbiddenword2.test \
+opentaal_forbiddenword2.wrong \
+opentaal_forbiddenword2.aff \
+opentaal_forbiddenword2.dic \
+opentaal_forbiddenword2.good \
+opentaal_forbiddenword2.sug \
+opentaal_forbiddenword2.test \
+opentaal_forbiddenword2.wrong \
+opentaal_keepcase.aff \
+opentaal_keepcase.dic \
+opentaal_keepcase.good \
+opentaal_keepcase.sug \
+opentaal_keepcase.test \
+opentaal_keepcase.wrong \
+arabic.aff \
+arabic.dic \
+arabic.wrong \
+arabic.test \
+2970240.aff \
+2970240.dic \
+2970240.good \
+2970240.wrong \
+2970240.test \
+2970242.aff \
+2970242.dic \
+2970242.good \
+2970242.wrong \
+2970242.test \
+breakoff.aff \
+breakoff.dic \
+breakoff.good \
+breakoff.wrong \
+breakoff.test \
+opentaal_cpdpat.aff \
+opentaal_cpdpat.dic \
+opentaal_cpdpat.good \
+opentaal_cpdpat.wrong \
+opentaal_cpdpat.test \
+opentaal_cpdpat2.aff \
+opentaal_cpdpat2.dic \
+opentaal_cpdpat2.good \
+opentaal_cpdpat2.wrong \
+opentaal_cpdpat2.test \
+2999225.aff \
+2999225.dic \
+2999225.good \
+2999225.test \
 korean.aff \
 korean.dic \
 korean.good \
 korean.wrong \
 korean.test
+
 # infixes.aff
 # infixes.dic
 # infixes.good
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 04028b0..889355a 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -379,7 +379,18 @@ morph.test \
 fullstrip.test \
 iconv.test \
 oconv.test \
-korean.test
+encoding.test \
+korean.test \
+opentaal_forbiddenword1.test \
+opentaal_forbiddenword2.test \
+opentaal_keepcase.test \
+arabic.test \
+2970240.test \
+2970242.test \
+breakoff.test \
+opentaal_cpdpat.test \
+opentaal_cpdpat2.test \
+2999225.test
 
 EXTRA_DIST = \
 test.sh \
@@ -863,6 +874,67 @@ oconv.good \
 oconv.sug \
 oconv.test \
 oconv.wrong \
+encoding.aff \
+encoding.dic \
+encoding.good \
+encoding.test \
+opentaal_forbiddenword1.aff \
+opentaal_forbiddenword1.dic \
+opentaal_forbiddenword1.good \
+opentaal_forbiddenword1.sug \
+opentaal_forbiddenword1.test \
+opentaal_forbiddenword1.wrong \
+opentaal_forbiddenword2.aff \
+opentaal_forbiddenword2.dic \
+opentaal_forbiddenword2.good \
+opentaal_forbiddenword2.sug \
+opentaal_forbiddenword2.test \
+opentaal_forbiddenword2.wrong \
+opentaal_forbiddenword2.aff \
+opentaal_forbiddenword2.dic \
+opentaal_forbiddenword2.good \
+opentaal_forbiddenword2.sug \
+opentaal_forbiddenword2.test \
+opentaal_forbiddenword2.wrong \
+opentaal_keepcase.aff \
+opentaal_keepcase.dic \
+opentaal_keepcase.good \
+opentaal_keepcase.sug \
+opentaal_keepcase.test \
+opentaal_keepcase.wrong \
+arabic.aff \
+arabic.dic \
+arabic.wrong \
+arabic.test \
+2970240.aff \
+2970240.dic \
+2970240.good \
+2970240.wrong \
+2970240.test \
+2970242.aff \
+2970242.dic \
+2970242.good \
+2970242.wrong \
+2970242.test \
+breakoff.aff \
+breakoff.dic \
+breakoff.good \
+breakoff.wrong \
+breakoff.test \
+opentaal_cpdpat.aff \
+opentaal_cpdpat.dic \
+opentaal_cpdpat.good \
+opentaal_cpdpat.wrong \
+opentaal_cpdpat.test \
+opentaal_cpdpat2.aff \
+opentaal_cpdpat2.dic \
+opentaal_cpdpat2.good \
+opentaal_cpdpat2.wrong \
+opentaal_cpdpat2.test \
+2999225.aff \
+2999225.dic \
+2999225.good \
+2999225.test \
 korean.aff \
 korean.dic \
 korean.good \
@@ -1313,6 +1385,7 @@ uninstall-am:
 
 distclean-local:
 	-rm -rf testSubDir
+
 # infixes.aff
 # infixes.dic
 # infixes.good
diff --git a/tests/arabic.aff b/tests/arabic.aff
new file mode 100644
index 0000000..f8dd5cf
--- /dev/null
+++ b/tests/arabic.aff
@@ -0,0 +1,6 @@
+SET UTF-8
+TRY أ
+IGNORE ٌٍَُِّْ
+
+PFX	Aa	Y	1
+PFX	Aa	0	0/X0	أ[^ي]
diff --git a/tests/arabic.dic b/tests/arabic.dic
new file mode 100644
index 0000000..9a2035d
--- /dev/null
+++ b/tests/arabic.dic
@@ -0,0 +1,2 @@
+1
+ب
diff --git a/tests/rep.test b/tests/arabic.test
similarity index 66%
copy from tests/rep.test
copy to tests/arabic.test
index 7f44369..4d59c42 100755
--- a/tests/rep.test
+++ b/tests/arabic.test
@@ -1,4 +1,4 @@
 #!/bin/sh
 DIR="`dirname $0`"
 NAME="`basename $0 .test`"
-$DIR/test.sh $NAME
+$DIR/test.sh $NAME -i UTF-8
diff --git a/tests/arabic.wrong b/tests/arabic.wrong
new file mode 100644
index 0000000..9b566c3
--- /dev/null
+++ b/tests/arabic.wrong
@@ -0,0 +1 @@
+ـ
diff --git a/tests/breakoff.aff b/tests/breakoff.aff
new file mode 100644
index 0000000..2e83d38
--- /dev/null
+++ b/tests/breakoff.aff
@@ -0,0 +1,7 @@
+# switch off default word break at hyphens and n-dashes by BREAK 0
+SET UTF-8
+MAXNGRAMSUGS 0
+WORDCHARS -
+TRY ot
+
+BREAK 0
diff --git a/tests/breakoff.dic b/tests/breakoff.dic
new file mode 100644
index 0000000..bf29960
--- /dev/null
+++ b/tests/breakoff.dic
@@ -0,0 +1,6 @@
+3
+foo
+bar
+free
+scott
+scot-free
diff --git a/tests/breakoff.good b/tests/breakoff.good
new file mode 100644
index 0000000..854b39e
--- /dev/null
+++ b/tests/breakoff.good
@@ -0,0 +1,3 @@
+foo
+bar
+scot-free
diff --git a/tests/rep.test b/tests/breakoff.test
similarity index 66%
copy from tests/rep.test
copy to tests/breakoff.test
index 7f44369..cde7c54 100755
--- a/tests/rep.test
+++ b/tests/breakoff.test
@@ -1,4 +1,4 @@
 #!/bin/sh
 DIR="`dirname $0`"
 NAME="`basename $0 .test`"
-$DIR/test.sh $NAME
+$DIR/test.sh $NAME -i utf-8
diff --git a/tests/breakoff.wrong b/tests/breakoff.wrong
new file mode 100644
index 0000000..a6fcf7f
--- /dev/null
+++ b/tests/breakoff.wrong
@@ -0,0 +1,5 @@
+foo-
+-foo
+foo-bar
+foo-bar-foo-bar
+scot
diff --git a/tests/checkcompoundrep.dic b/tests/checkcompoundrep.dic
index 5b5d227..030bda9 100644
--- a/tests/checkcompoundrep.dic
+++ b/tests/checkcompoundrep.dic
@@ -2,3 +2,4 @@
 szer/A
 v�z/A
 szerviz
+kocsi/A
diff --git a/tests/checkcompoundrep.good b/tests/checkcompoundrep.good
index e7ef1f8..c95c03c 100644
--- a/tests/checkcompoundrep.good
+++ b/tests/checkcompoundrep.good
@@ -1 +1,2 @@
 v�zszer
+szerkocsi
\ No newline at end of file
diff --git a/tests/checkcompoundrep.wrong b/tests/checkcompoundrep.wrong
index 843f4b8..8c8701d 100644
--- a/tests/checkcompoundrep.wrong
+++ b/tests/checkcompoundrep.wrong
@@ -1 +1,3 @@
 szerv�z
+szerv�zkocsi
+kocsiszerv�z
diff --git a/tests/checksharps.sug b/tests/checksharps.sug
index 9e6b249..52c6a94 100644
--- a/tests/checksharps.sug
+++ b/tests/checksharps.sug
@@ -1 +1 @@
-M�SSIG
+M�SSIG, m��ig
diff --git a/tests/checksharpsutf.sug b/tests/checksharpsutf.sug
index a94e612..ab68568 100644
--- a/tests/checksharpsutf.sug
+++ b/tests/checksharpsutf.sug
@@ -1 +1 @@
-MÜSSIG
+MÜSSIG, müßig
diff --git a/tests/encoding.aff b/tests/encoding.aff
new file mode 100644
index 0000000..1f560d2
--- /dev/null
+++ b/tests/encoding.aff
@@ -0,0 +1 @@
+SET ISO-8859-15
diff --git a/tests/encoding.dic b/tests/encoding.dic
new file mode 100644
index 0000000..414f9b8
--- /dev/null
+++ b/tests/encoding.dic
@@ -0,0 +1,3 @@
+2
+c�ur
+�uvre
diff --git a/tests/encoding.good b/tests/encoding.good
new file mode 100644
index 0000000..fc41c90
--- /dev/null
+++ b/tests/encoding.good
@@ -0,0 +1,4 @@
+c�ur
+�uvre
+C�UR
+�UVRE
diff --git a/tests/rep.test b/tests/encoding.test
similarity index 62%
copy from tests/rep.test
copy to tests/encoding.test
index 7f44369..0961957 100755
--- a/tests/rep.test
+++ b/tests/encoding.test
@@ -1,4 +1,4 @@
 #!/bin/sh
 DIR="`dirname $0`"
 NAME="`basename $0 .test`"
-$DIR/test.sh $NAME
+$DIR/test.sh $NAME -i ISO8859-15
diff --git a/tests/opentaal_cpdpat.aff b/tests/opentaal_cpdpat.aff
new file mode 100644
index 0000000..413aca4
--- /dev/null
+++ b/tests/opentaal_cpdpat.aff
@@ -0,0 +1,13 @@
+FLAG long
+COMPOUNDBEGIN Ca
+COMPOUNDMIDDLE Cb
+COMPOUNDEND Cc
+COMPOUNDPERMITFLAG Cp
+ONLYINCOMPOUND Cx
+
+CHECKCOMPOUNDPATTERN 1
+CHECKCOMPOUNDPATTERN /Ch /Xs
+
+SFX Ch Y 2
+SFX Ch 0 s/CaCbCxCp .
+SFX Ch 0 s-/CaCbCcCp .
diff --git a/tests/opentaal_cpdpat.dic b/tests/opentaal_cpdpat.dic
new file mode 100644
index 0000000..e7831b7
--- /dev/null
+++ b/tests/opentaal_cpdpat.dic
@@ -0,0 +1,4 @@
+3
+schoonheid/Ch
+port/CcXs
+sport/Cc
diff --git a/tests/opentaal_cpdpat.good b/tests/opentaal_cpdpat.good
new file mode 100644
index 0000000..fbaf830
--- /dev/null
+++ b/tests/opentaal_cpdpat.good
@@ -0,0 +1 @@
+schoonheidssport
diff --git a/tests/rep.test b/tests/opentaal_cpdpat.test
similarity index 100%
copy from tests/rep.test
copy to tests/opentaal_cpdpat.test
diff --git a/tests/opentaal_cpdpat.wrong b/tests/opentaal_cpdpat.wrong
new file mode 100644
index 0000000..3f9e894
--- /dev/null
+++ b/tests/opentaal_cpdpat.wrong
@@ -0,0 +1 @@
+schoonheidsport
diff --git a/tests/opentaal_cpdpat2.aff b/tests/opentaal_cpdpat2.aff
new file mode 100644
index 0000000..22dfe69
--- /dev/null
+++ b/tests/opentaal_cpdpat2.aff
@@ -0,0 +1,27 @@
+# Test file based on OpenTaal's Dutch dictionary, coded by Ruud Baars
+
+WORDCHARS -
+NOSPLITSUGS
+FLAG long
+
+COMPOUNDBEGIN Ca
+COMPOUNDMIDDLE Cb
+COMPOUNDEND Cc
+COMPOUNDPERMITFLAG Cp
+ONLYINCOMPOUND Cx
+
+CHECKCOMPOUNDPATTERN 2
+CHECKCOMPOUNDPATTERN 0/Ch /Xs
+CHECKCOMPOUNDPATTERN 0/Xm /Xm
+
+SFX CA Y 2
+SFX CA 0 /CaCp .
+SFX CA 0 -/CaCp	.
+
+SFX CB Y 2
+SFX CB 0 /CbCp .
+SFX CB 0 -/CbCp	.
+
+SFX Ch Y 2
+SFX Ch 0 s/CaCbCxCp .
+SFX Ch 0 s-/CaCbCcCp .
diff --git a/tests/opentaal_cpdpat2.dic b/tests/opentaal_cpdpat2.dic
new file mode 100644
index 0000000..52581e9
--- /dev/null
+++ b/tests/opentaal_cpdpat2.dic
@@ -0,0 +1,4 @@
+100
+test/CACBCc
+zout/CACBXm
+suiker/CACBXm
\ No newline at end of file
diff --git a/tests/opentaal_cpdpat2.good b/tests/opentaal_cpdpat2.good
new file mode 100644
index 0000000..e604d6e
--- /dev/null
+++ b/tests/opentaal_cpdpat2.good
@@ -0,0 +1 @@
+zout-suikertest
diff --git a/tests/rep.test b/tests/opentaal_cpdpat2.test
similarity index 100%
copy from tests/rep.test
copy to tests/opentaal_cpdpat2.test
diff --git a/tests/opentaal_cpdpat2.wrong b/tests/opentaal_cpdpat2.wrong
new file mode 100644
index 0000000..d8ddb16
--- /dev/null
+++ b/tests/opentaal_cpdpat2.wrong
@@ -0,0 +1 @@
+zoutsuikertest
diff --git a/tests/opentaal_forbiddenword1.aff b/tests/opentaal_forbiddenword1.aff
new file mode 100644
index 0000000..fa07343
--- /dev/null
+++ b/tests/opentaal_forbiddenword1.aff
@@ -0,0 +1,9 @@
+TRY r
+
+FORBIDDENWORD F
+COMPOUNDRULE 2
+COMPOUNDRULE WW
+COMPOUNDRULE WWW
+
+SFX S Y 1
+SFX S 0 s .
diff --git a/tests/opentaal_forbiddenword1.dic b/tests/opentaal_forbiddenword1.dic
new file mode 100644
index 0000000..4437594
--- /dev/null
+++ b/tests/opentaal_forbiddenword1.dic
@@ -0,0 +1,5 @@
+4
+foo/W
+word/W
+bar/WS
+foowordbar/FS
diff --git a/tests/opentaal_forbiddenword1.good b/tests/opentaal_forbiddenword1.good
new file mode 100644
index 0000000..73a96a7
--- /dev/null
+++ b/tests/opentaal_forbiddenword1.good
@@ -0,0 +1,3 @@
+fooword
+wordbar
+barwordfoo
diff --git a/tests/opentaal_forbiddenword1.sug b/tests/opentaal_forbiddenword1.sug
new file mode 100644
index 0000000..60111a4
--- /dev/null
+++ b/tests/opentaal_forbiddenword1.sug
@@ -0,0 +1 @@
+barwordfoo
diff --git a/tests/rep.test b/tests/opentaal_forbiddenword1.test
similarity index 100%
copy from tests/rep.test
copy to tests/opentaal_forbiddenword1.test
diff --git a/tests/opentaal_forbiddenword1.wrong b/tests/opentaal_forbiddenword1.wrong
new file mode 100644
index 0000000..59dfddf
--- /dev/null
+++ b/tests/opentaal_forbiddenword1.wrong
@@ -0,0 +1,5 @@
+foowordbar
+foowordbars
+foowordba
+foowordbas
+barwodfoo
diff --git a/tests/opentaal_forbiddenword2.aff b/tests/opentaal_forbiddenword2.aff
new file mode 100644
index 0000000..441354d
--- /dev/null
+++ b/tests/opentaal_forbiddenword2.aff
@@ -0,0 +1,7 @@
+TRY r
+
+FORBIDDENWORD F
+COMPOUNDFLAG W
+
+SFX S Y 1
+SFX S 0 s .
diff --git a/tests/opentaal_forbiddenword2.dic b/tests/opentaal_forbiddenword2.dic
new file mode 100644
index 0000000..895dd62
--- /dev/null
+++ b/tests/opentaal_forbiddenword2.dic
@@ -0,0 +1,5 @@
+3
+foo/WS
+word/W
+bar/WS
+foowordbar/FS
\ No newline at end of file
diff --git a/tests/opentaal_forbiddenword2.good b/tests/opentaal_forbiddenword2.good
new file mode 100644
index 0000000..17cf47d
--- /dev/null
+++ b/tests/opentaal_forbiddenword2.good
@@ -0,0 +1,4 @@
+fooword
+wordbar
+barwordfoo
+barwordfoos
diff --git a/tests/opentaal_forbiddenword2.sug b/tests/opentaal_forbiddenword2.sug
new file mode 100644
index 0000000..60111a4
--- /dev/null
+++ b/tests/opentaal_forbiddenword2.sug
@@ -0,0 +1 @@
+barwordfoo
diff --git a/tests/rep.test b/tests/opentaal_forbiddenword2.test
similarity index 100%
copy from tests/rep.test
copy to tests/opentaal_forbiddenword2.test
diff --git a/tests/opentaal_forbiddenword2.wrong b/tests/opentaal_forbiddenword2.wrong
new file mode 100644
index 0000000..59dfddf
--- /dev/null
+++ b/tests/opentaal_forbiddenword2.wrong
@@ -0,0 +1,5 @@
+foowordbar
+foowordbars
+foowordba
+foowordbas
+barwodfoo
diff --git a/tests/opentaal_keepcase.aff b/tests/opentaal_keepcase.aff
new file mode 100644
index 0000000..15c914b
--- /dev/null
+++ b/tests/opentaal_keepcase.aff
@@ -0,0 +1,8 @@
+KEEPCASE K
+COMPOUNDBEGIN B
+COMPOUNDEND E
+COMPOUNDFLAG C
+COMPOUNDMIN 1
+WORDCHARS -
+BREAK 1
+BREAK #
diff --git a/tests/opentaal_keepcase.dic b/tests/opentaal_keepcase.dic
new file mode 100644
index 0000000..b05ec13
--- /dev/null
+++ b/tests/opentaal_keepcase.dic
@@ -0,0 +1,7 @@
+5
+tv-/KB
+-tv/KE
+word/C
+NATO-/B
+-NATO/E
+
diff --git a/tests/opentaal_keepcase.good b/tests/opentaal_keepcase.good
new file mode 100644
index 0000000..e1c1129
--- /dev/null
+++ b/tests/opentaal_keepcase.good
@@ -0,0 +1,4 @@
+tv-word
+word-tv
+NATO-word
+word-NATO
diff --git a/tests/opentaal_keepcase.sug b/tests/opentaal_keepcase.sug
new file mode 100644
index 0000000..07dde3f
--- /dev/null
+++ b/tests/opentaal_keepcase.sug
@@ -0,0 +1,8 @@
+Tv-word, Tv- word, Word
+Tv- word, Word
+word -tv, word-tv, word
+word -tv, word-tv, word
+wordword-tv, word
+Tv-word-tv
+NATO-
+-NATO
diff --git a/tests/rep.test b/tests/opentaal_keepcase.test
similarity index 100%
copy from tests/rep.test
copy to tests/opentaal_keepcase.test
diff --git a/tests/opentaal_keepcase.wrong b/tests/opentaal_keepcase.wrong
new file mode 100644
index 0000000..b15752e
--- /dev/null
+++ b/tests/opentaal_keepcase.wrong
@@ -0,0 +1,8 @@
+TV-word
+Tv-word
+word-TV
+word-Tv
+wordword-TV
+TV-word-TV
+Nato-word
+word-nato
diff --git a/tests/rep.aff b/tests/rep.aff
index 66365e5..485755c 100644
--- a/tests/rep.aff
+++ b/tests/rep.aff
@@ -3,12 +3,19 @@
 # switch off ngram suggestion for testing
 MAXNGRAMSUGS 0
 
-REP 6
+REP 8
 REP f ph
 REP ph f
-REP ph f
-REP shun tion
-REP alot a_lot  # add the highest priority for "a lot" suggestion to "alot"
+REP shun$ tion
+REP ^alot$ a_lot  # add the highest priority for "a lot" suggestion to "alot"
+REP ^foo$ bar
 REP ' _    # "un'alunno" -> "un alunno"
+REP ^vinte�n$ vinte_e_un
+REP s 's
+
+
+SFX A Y 1
+SFX A 0 's .
+
 
 WORDCHARS '
diff --git a/tests/rep.dic b/tests/rep.dic
index b6788c8..f9a4c00 100644
--- a/tests/rep.dic
+++ b/tests/rep.dic
@@ -1,8 +1,15 @@
-7
+10
 form
 phantom
 vacation
+vacations
 a
 lot
 un
 alunno
+bar
+barbars
+vinte
+e
+un
+auto/A
diff --git a/tests/rep.sug b/tests/rep.sug
index e3402e1..b48a5b8 100644
--- a/tests/rep.sug
+++ b/tests/rep.sug
@@ -3,3 +3,6 @@ phantom
 vacation
 a lot, lot
 un alunno
+bar
+vinte e un
+auto's, auto
diff --git a/tests/rep.test b/tests/rep.test
index 7f44369..dc29507 100755
--- a/tests/rep.test
+++ b/tests/rep.test
@@ -1,4 +1,4 @@
 #!/bin/sh
 DIR="`dirname $0`"
 NAME="`basename $0 .test`"
-$DIR/test.sh $NAME
+$DIR/test.sh $NAME -i ISO8859-1
diff --git a/tests/rep.wrong b/tests/rep.wrong
index aa92b1e..cd9699c 100644
--- a/tests/rep.wrong
+++ b/tests/rep.wrong
@@ -1,5 +1,11 @@
 phorm
 fantom
 vacashun
+vacashuns
 alot
 un'alunno
+foo
+foobars
+barfoos
+vinte�n
+autos

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-openoffice/hunspell.git


Reply to: