[hunspell] 01/03: New upstream version 1.6.2

Rene Engelhard rene at moszumanska.debian.org
Mon Sep 18 16:05:51 UTC 2017


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

rene pushed a commit to branch master
in repository hunspell.

commit cafa65c30ff21ab94611a2868c3ade56f8d7f77c
Author: Rene Engelhard <rene at rene-engelhard.de>
Date:   Mon Sep 18 17:58:26 2017 +0200

    New upstream version 1.6.2
---
 .github/ISSUE_TEMPLATE.md             |  41 +++
 ChangeLog                             |  57 ----
 HACKING                               |   2 +
 NEWS                                  |  52 ++++
 README.md                             |  36 ++-
 configure.ac                          |  12 +-
 msvc/.gitignore                       |  11 +
 msvc/Hunspell.rc                      |  32 +++
 msvc/Hunspell.sln                     |  76 ++++++
 msvc/config.h                         | 205 ++++++++++++++
 msvc/hunspell.vcxproj                 | 207 ++++++++++++++
 msvc/libhunspell.vcxproj              | 406 +++++++++++++++++++++++++++
 msvc/testparser.vcxproj               | 207 ++++++++++++++
 po/LINGUAS                            |   1 +
 po/de.po                              | 500 ++++++++++++++++++++++++++++++++++
 src/hunspell2/dic_manager.cxx         |   1 -
 src/hunspell2/main.cxx                |   4 +-
 src/parsers/xmlparser.cxx             |   1 +
 src/tools/.gitignore                  |   1 +
 src/tools/Makefile.am                 |   5 +-
 src/tools/bulkcheck.cxx               | 196 +++++++++++++
 src/tools/example.cxx                 |   2 -
 src/tools/hunspell.cxx                |  36 ++-
 src/tools/munch.cxx                   |   1 +
 src/tools/optionusage/.gitignore      |   3 +
 src/tools/optionusage/analyse.py      | 213 +++++++++++++++
 src/tools/optionusage/download.sh     |  44 +++
 src/tools/optionusage/option-usage.md | 121 ++++++++
 src/tools/unmunch.cxx                 |   1 +
 29 files changed, 2370 insertions(+), 104 deletions(-)

diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 0000000..f41831d
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,41 @@
+The issues can be of three types (put an X between the brackets):
+
+- [ ] Bug reports
+- [ ] Change request or feature request
+- [ ] Others, questions
+
+# Reporting bugs
+
+When reporting a bug you must tell us the state of your system and the
+steps to reproduce the bug. For the state please specify the following:
+
+| key                               | value |
+|-----------------------------------|-------|
+| OS, distro, version             = |       |
+| Hunspell version                = |       |
+| Dictionary,package name,version = |       |
+| Command line tool or GUI app    = |       |
+
+
+## Steps to reproduce
+
+
+## Bugged behavior (output)
+
+
+## Expected behavior (output)
+
+
+
+
+# Change/feature request
+
+If you want current behavior to get changed, please explain how do you
+want it changed. If it's completely new, please explain it how do you
+want it, as verbose as possible.
+
+# Other issues
+
+If you have just questions or some other type of issue, you have the
+freedom to ask it in any way. Try to be as verbose as possible.
+
diff --git a/ChangeLog b/ChangeLog
index b390185..1f6e774 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,60 +1,3 @@
-2017-03-25 Dimitrij Mijoski <dmjpp at hotm>:
-	* Version 1.6.1
-	* Library changes:
-	*   Performance improvements in suggest()
-	*   Fixes regressions for Hungarian related to compounding.
-	*   Fixes regressions for Korean related to ICONV.
-	* Command line tool:
-	*   Added Tajik translation 
-	*   Fix regarding serching of OOo dicts installed in user folder
-	* Manpages:
-	*   Fix microsoft-cp1251 to cp1251. Dicts should not use the first.
-	*   Typos.
-	
-2016-12-22 Dimitrij Mijoski <dmjpp at hotm>:
-	* Version 1.6.0
-	* Changes in the library:
-	*  Performance improvement in ngsuggest(), suggestions should be faster.
-	*  Revert MAXWORDLEN to 100 as in 1.3.3 for performance reasons.
-	*  MAXWORDLEN can be set during build time with -D defines.
-	*  Fix crash when word with 102 consecutive X is spelled.
-	* Changes in the command line tool:
-	*  -D shows all loaded dictionares insted of only the first.
-	*  -D properly lists all available dictionaries on Windows.
-
-2016-11-30 Dimitrij Mijoski <dmjpp at hotm>:
-	* Version 1.5.4
-	* Fixes the command COMPOUNDSYLLABLE used in Hungarian dictionary.
-
-2016-11-28 Dimitrij Mijoski <dmjpp at hotm>:
-	* Version 1.5.3
-	* Removed a #include from hunspell.hxx that was creating trouble
-
-2016-11-27 Dimitrij Mijoski <dmjpp at hotm>:
-	* Version 1.5.2
-	* Reverted full backward compatibility with 1.4 public API, again
-
-2016-11-27 Dimitrij Mijoski <dmjpp at hotm>:
-	* Version 1.5.1
-	* Reverted full backward compatibility with 1.4 public API
-
-2016-11-26 Dimitrij Mijoski <dmjpp at hotm>:
-	* Version 1.5
-	* Fixed the changelog notice bellow about the API. I had a mistake.
-
-2016-11-18 Dimitrij Mijoski <dmjpp at hotm>:
-	* Version 1.5
-	* Lot of stability fixes
-	* Fixed compilation errors on various systems (Windows, FreeBSD)
-	* Small performance improvement compared to 1.4.0
-	* The C++ API is updated to use modern C++ types (string, vector).
-	  Backward compatibility is kept for most of the functions except for
-	  the following:
-		get_wordchars();
-		get_version();
-		input_conv(string, string);
-		removed get_csconv();
-
 2016-04-29 Caolán McNamara <caolanm at LibO>:
 	* deprecate old api and add new one
 	  old one remains implemented in terms of new one
diff --git a/HACKING b/HACKING
index 6c076f6..e65da70 100644
--- a/HACKING
+++ b/HACKING
@@ -2,6 +2,8 @@ To bump a release
 
 1. edit...
   a) ./configure.ac
+  b) ./msvc/Hunspell.rc
+  c) ./msvc/config.h
 and convert release string X.Y.Z/X,Y,Z to the next version
 
 2. autoconf && ./configure && make
diff --git a/NEWS b/NEWS
index 64c2029..8422a6f 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,55 @@
+2017-09-03: Hunspell 1.6.2 release:
+  - Library changes: no. Same as 1.6.1.
+  - Command line tool:
+      - Added German translation
+      - Fixed bug with wrong output encoding, not respecting system locale.
+
+2017-03-25: Hunspell 1.6.1 release:
+  - Library changes:
+      - Performance improvements in suggest()
+      - Fixes regressions for Hungarian related to compounding.
+      - Fixes regressions for Korean related to ICONV.
+  - Command line tool:
+      - Added Tajik translation 
+      - Fix regarding serching of OOo dicts installed in user folder
+  - Manpages:
+      - Fix microsoft-cp1251 to cp1251. Dicts should not use the first.
+      - Typos.
+  
+2016-12-22: Hunspell 1.6.0 release:
+  - Library changes:
+      - Performance improvement in ngsuggest(), suggestions should be faster.
+      - Revert MAXWORDLEN to 100 as in 1.3.3 for performance reasons.
+      - MAXWORDLEN can be set during build time with -D defines.
+      - Fix crash when word with 102 consecutive X is spelled.
+  - Command line tool:
+      - -D shows all loaded dictionares insted of only the first.
+      - -D properly lists all available dictionaries on Windows.
+
+2016-11-30: Hunspell 1.5.4 release:
+  - Fixes the command COMPOUNDSYLLABLE used in Hungarian dictionary.
+
+2016-11-28: Hunspell 1.5.3 release:
+  - Removed a #include from hunspell.hxx that was creating trouble
+
+2016-11-27: Hunspell 1.5.2 release:
+  - Reverted full backward compatibility with 1.4 public API, again
+
+2016-11-27: Hunspell 1.5.1 release:
+  - Reverted full backward compatibility with 1.4 public API
+
+2016-11-18: Hunspell 1.5.0 release:
+  - Lot of stability fixes
+  - Fixed compilation errors on various systems (Windows, FreeBSD)
+  - Small performance improvement compared to 1.4.0
+  - The C++ API is updated to use modern C++ types (string, vector).
+    Backward compatibility is kept for most of the functions except for
+    the following:
+      - get_wordchars();
+      - get_version();
+      - input_conv(string, string);
+      - removed get_csconv();
+
 2016-04-15: Hunspell 1.4.0 release:
   - various abi changes due to moving away from char* to std::string
 
diff --git a/README.md b/README.md
index 38b53aa..13bac95 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 About Hunspell
 ==============
 
-NOTICE: Verison 2 is in the works. For contributing see
+NOTICE: Version 2 is in the works. For contributing see
 [version 2 specification][v2spec] and the folder `src/hunspell2`.
 
 [v2spec]: https://github.com/hunspell/hunspell/wiki/Version-2-Specification
@@ -31,24 +31,24 @@ Main features of Hunspell spell checker and morphological analyzer:
 - Free software. Versions 1.x are licenced under LGPL, GPL, MPL tri-license.
   Version 2 is licenced only under GNU LGPL.
 
-Compiling on Unix/Linux and others
-==================================
+Compiling on GNU/Linux and Unixes
+=================================
 
 	autoreconf -vfi
 	./configure
 	make
-	make install    #if neccesary prefix with sudo
-	ldconfig        #not needed on windows, on linux sudo may be needed
+	sudo make install
+	sudo ldconfig
 
-For dictionary development, use the --with-warnings option of configure.
+For dictionary development, use the `--with-warnings` option of configure.
 
-For interactive user interface of Hunspell executable, use the --with-ui option.
+For interactive user interface of Hunspell executable, use the `--with-ui option`.
 
 The developer packages you need to compile Hunspell's interface:
 
 	autoconf automake autopoint libtool g++
 
-optional developer packages:
+Optional developer packages:
 
 - ncurses (need for --with-ui), eg. libncursesw5 for UTF-8
 - readline (for fancy input line editing,
@@ -59,8 +59,7 @@ optional developer packages:
 Compiling on Windows
 ====================
 
-1. Compiling with Mingw64 and MSYS2
------------------------------------
+## 1. Compiling with Mingw64 and MSYS2
 
 Download Msys2, update everything and install the following packages:
 
@@ -68,8 +67,7 @@ Download Msys2, update everything and install the following packages:
 
 Open Mingw-w64 Win64 prompt and compile the same way as on Linux, see above.
 
-2. Compiling in Cygwin environment
-----------------------------------
+## 2. Compiling in Cygwin environment
 
 Download and install Cygwin environment for Windows with the following
 extra packages: 
@@ -77,13 +75,21 @@ extra packages:
 - make
 - automake
 - autoconf
+- libtool
 - gcc-g++ development package
 - ncurses, readline (for user interface)
 - iconv (character conversion)
 
-###3.1. Cygwin1.dll dependent compiling
+Then compile the same way as on Linux. Cygwin builds depend on Cygwin1.dll.
 
-Same as on Linux.
+Debugging
+=========
+
+For debugging we need to create a debug build and then we need to start `gdb`.
+
+	make clean
+	make CXXFLAGS='-g -O0'
+	libtool --mode=execute gdb src/tools/hunspell
 
 Testing
 =======
@@ -116,7 +122,7 @@ http://hunspell.github.io/
 Usage
 =====
 
-The src/tools dictionary contains ten executables after compiling:
+The src/tools directory contains ten executables after compiling:
 
 - affixcompress: dictionary generation from large (millions of words)
   vocabularies
diff --git a/configure.ac b/configure.ac
index f1eebf1..fb79d0d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,20 +4,18 @@
 m4_pattern_allow
 
 AC_PREREQ(2.59)
-AC_INIT([hunspell],[1.6.1],[nemeth at numbertext.org])
-
+AC_INIT([hunspell],[1.6.2],[nemeth at numbertext.org])
+AC_CONFIG_SRCDIR([config.h.in])
+AC_CONFIG_HEADERS([config.h])
 AC_CANONICAL_HOST
 AC_SUBST(XFAILED)
-
-AM_INIT_AUTOMAKE(hunspell, 1.6.1)
+AC_USE_SYSTEM_EXTENSIONS
+AM_INIT_AUTOMAKE
 HUNSPELL_VERSION_MAJOR=`echo $VERSION | cut -d"." -f1`
 HUNSPELL_VERSION_MINOR=`echo $VERSION | cut -d"." -f2`
 AC_SUBST(HUNSPELL_VERSION_MAJOR)
 AC_SUBST(HUNSPELL_VERSION_MINOR)
 
-AC_CONFIG_SRCDIR([config.h.in])
-AC_CONFIG_HEADER([config.h])
-
 # Checks for programs.
 AC_PROG_CXX
 AC_PROG_CC
diff --git a/msvc/.gitignore b/msvc/.gitignore
new file mode 100644
index 0000000..2b99776
--- /dev/null
+++ b/msvc/.gitignore
@@ -0,0 +1,11 @@
+Makefile
+/Debug/
+/Release/
+/Backup*/
+/x64/
+/*.db
+/*.user
+*.sdf
+*.opensdf
+*.suo
+UpgradeLog.htm
diff --git a/msvc/Hunspell.rc b/msvc/Hunspell.rc
new file mode 100644
index 0000000..8fd119e
--- /dev/null
+++ b/msvc/Hunspell.rc
@@ -0,0 +1,32 @@
+
+#include <windows.h>
+
+VS_VERSION_INFO VERSIONINFO
+FILEVERSION 1,6,2,0
+PRODUCTVERSION 1,6,2,0
+FILEFLAGSMASK 0x17L
+FILEFLAGS 0
+FILEOS VOS_NT_WINDOWS32
+FILETYPE VFT_APP
+FILESUBTYPE VFT2_UNKNOWN
+BEGIN
+	BLOCK	"VarFileInfo"
+	BEGIN
+		VALUE	"Translation",	0x409,	1200
+	END
+	BLOCK	"StringFileInfo"
+	BEGIN
+		BLOCK "040904b0"
+		BEGIN
+            VALUE "Comments", "Hunspell (http://hunspell.github.io/) by L�szl� N�meth"
+            VALUE "CompanyName", "http://hunspell.github.io/"
+            VALUE "FileDescription", "libhunspell"
+            VALUE "FileVersion", "1.6.2"
+            VALUE "InternalName", "libhunspell"
+            VALUE "LegalCopyright", "Copyright (c) 2007-2017"
+            VALUE "OriginalFilename", "libhunspell.dll"
+            VALUE "ProductName", "Hunspell Dynamic Link Library"
+            VALUE "ProductVersion", "1.6.2"
+		END
+	END
+END
diff --git a/msvc/Hunspell.sln b/msvc/Hunspell.sln
new file mode 100644
index 0000000..5607c8d
--- /dev/null
+++ b/msvc/Hunspell.sln
@@ -0,0 +1,76 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libhunspell", "libhunspell.vcxproj", "{53609BB3-D874-465C-AF7B-DF626DB0D89B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testparser", "testparser.vcxproj", "{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hunspell", "hunspell.vcxproj", "{6A0453F4-B12A-4810-B9A2-8AB059316ED7}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug_dll|Win32 = Debug_dll|Win32
+		Debug_dll|x64 = Debug_dll|x64
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release_dll|Win32 = Release_dll|Win32
+		Release_dll|x64 = Release_dll|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Debug_dll|Win32.ActiveCfg = Debug_dll|Win32
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Debug_dll|Win32.Build.0 = Debug_dll|Win32
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Debug_dll|x64.ActiveCfg = Debug_dll|x64
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Debug_dll|x64.Build.0 = Debug_dll|x64
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Debug|Win32.ActiveCfg = Debug|Win32
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Debug|Win32.Build.0 = Debug|Win32
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Debug|x64.ActiveCfg = Debug|x64
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Debug|x64.Build.0 = Debug|x64
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Release_dll|Win32.ActiveCfg = Release_dll|Win32
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Release_dll|Win32.Build.0 = Release_dll|Win32
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Release_dll|x64.ActiveCfg = Release_dll|x64
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Release_dll|x64.Build.0 = Release_dll|x64
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Release|Win32.ActiveCfg = Release|Win32
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Release|Win32.Build.0 = Release|Win32
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Release|x64.ActiveCfg = Release|x64
+		{53609BB3-D874-465C-AF7B-DF626DB0D89B}.Release|x64.Build.0 = Release|x64
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Debug_dll|Win32.ActiveCfg = Debug|Win32
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Debug_dll|Win32.Build.0 = Debug|Win32
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Debug_dll|x64.ActiveCfg = Debug|x64
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Debug_dll|x64.Build.0 = Debug|x64
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Debug|Win32.Build.0 = Debug|Win32
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Debug|x64.ActiveCfg = Debug|x64
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Debug|x64.Build.0 = Debug|x64
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Release_dll|Win32.ActiveCfg = Release|Win32
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Release_dll|Win32.Build.0 = Release|Win32
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Release_dll|x64.ActiveCfg = Release|x64
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Release_dll|x64.Build.0 = Release|x64
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Release|Win32.ActiveCfg = Release|Win32
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Release|Win32.Build.0 = Release|Win32
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Release|x64.ActiveCfg = Release|x64
+		{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}.Release|x64.Build.0 = Release|x64
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Debug_dll|Win32.ActiveCfg = Debug|Win32
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Debug_dll|Win32.Build.0 = Debug|Win32
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Debug_dll|x64.ActiveCfg = Debug|x64
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Debug_dll|x64.Build.0 = Debug|x64
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Debug|Win32.Build.0 = Debug|Win32
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Debug|x64.ActiveCfg = Debug|x64
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Debug|x64.Build.0 = Debug|x64
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Release_dll|Win32.ActiveCfg = Release|Win32
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Release_dll|Win32.Build.0 = Release|Win32
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Release_dll|x64.ActiveCfg = Release|x64
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Release_dll|x64.Build.0 = Release|x64
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Release|Win32.ActiveCfg = Release|Win32
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Release|Win32.Build.0 = Release|Win32
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Release|x64.ActiveCfg = Release|x64
+		{6A0453F4-B12A-4810-B9A2-8AB059316ED7}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/msvc/config.h b/msvc/config.h
new file mode 100644
index 0000000..f3b64fb
--- /dev/null
+++ b/msvc/config.h
@@ -0,0 +1,205 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+   systems. This function is required for `alloca.c' support on those systems.
+   */
+#define CRAY_STACKSEG_END 1
+
+/* Define to 1 if using `alloca.c'. */
+#define C_ALLOCA 1
+
+/* Define to 1 if translation of program messages to the user's native
+   language is requested. */
+#undef ENABLE_NLS
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#define HAVE_ALLOCA 1
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#define HAVE_ALLOCA_H 1
+
+/* Define to 1 if you have the <argz.h> header file. */
+#define HAVE_ARGZ_H 1
+
+/* "Define if you have the <curses.h> header" */
+#undef HAVE_CURSES_H
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+   */
+#define HAVE_DCGETTEXT 1
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define to 1 if you have the <error.h> header file. */
+#define HAVE_ERROR_H 1
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define to 1 if you have the `feof_unlocked' function. */
+#define HAVE_FEOF_UNLOCKED 1
+
+/* Define to 1 if you have the `fgets_unlocked' function. */
+#define HAVE_FGETS_UNLOCKED 1
+
+/* Define to 1 if you have the `getcwd' function. */
+#define HAVE_GETCWD 1
+
+/* Define to 1 if you have the `getc_unlocked' function. */
+#define HAVE_GETC_UNLOCKED 1
+
+/* Define to 1 if you have the `getegid' function. */
+#define HAVE_GETEGID 1
+
+/* Define to 1 if you have the `geteuid' function. */
+#define HAVE_GETEUID 1
+
+/* Define to 1 if you have the `getgid' function. */
+#define HAVE_GETGID 1
+
+/* Define to 1 if you have the `getpagesize' function. */
+#define HAVE_GETPAGESIZE 1
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#define HAVE_GETTEXT 1
+
+/* Define to 1 if you have the `getuid' function. */
+#define HAVE_GETUID 1
+
+/* Define if you have the iconv() function. */
+#undef HAVE_ICONV
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#define HAVE_LANGINFO_CODESET 1
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#define HAVE_LC_MESSAGES 1
+
+/* Define to 1 if you have the <libintl.h> header file. */
+#define HAVE_LIBINTL_H 1
+
+/* Define to 1 if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* Define to 1 if you have the <locale.h> header file. */
+#define HAVE_LOCALE_H 1
+
+/* Define to 1 if you have the `memchr' function. */
+#define HAVE_MEMCHR 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mempcpy' function. */
+#define HAVE_MEMPCPY 1
+
+/* Define to 1 if you have a working `mmap' system call. */
+#define HAVE_MMAP 1
+
+/* Define to 1 if you have the `munmap' function. */
+#define HAVE_MUNMAP 1
+
+/* "Define if you have the <ncursesw/curses.h> header" */
+#define HAVE_NCURSESW_H 1
+
+/* Define to 1 if you have the <nl_types.h> header file. */
+#define HAVE_NL_TYPES_H 1
+
+/* Define to 1 if you have the `putenv' function. */
+#define HAVE_PUTENV 1
+
+/* "Define if you have fancy command input editing with Readline" */
+#undef HAVE_READLINE
+
+/* Define to 1 if you have the `setenv' function. */
+#define HAVE_SETENV 1
+
+/* Define to 1 if you have the `setlocale' function. */
+#define HAVE_SETLOCALE 1
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#define HAVE_STDDEF_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `stpcpy' function. */
+#define HAVE_STPCPY 1
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#define HAVE_STRCASECMP 1
+
+/* Define to 1 if you have the `strchr' function. */
+#define HAVE_STRCHR 1
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strstr' function. */
+#define HAVE_STRSTR 1
+
+/* Define to 1 if you have the `strtoul' function. */
+#define HAVE_STRTOUL 1
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#define HAVE_SYS_PARAM_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the `tsearch' function. */
+#define HAVE_TSEARCH 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define to 1 if you have the `__argz_count' function. */
+#define HAVE___ARGZ_COUNT 1
+
+/* Define to 1 if you have the `__argz_next' function. */
+#define HAVE___ARGZ_NEXT 1
+
+/* Define to 1 if you have the `__argz_stringify' function. */
+#define HAVE___ARGZ_STRINGIFY 1
+
+/* "Define if you need warning messages" */
+#define HUNSPELL_WARNING_ON
+
+/* Define as const if the declaration of iconv() needs const. */
+#define ICONV_CONST 1
+
+/* Name of package */
+#define PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "1.6.2"
+#define VERSION "1.6.2"
diff --git a/msvc/hunspell.vcxproj b/msvc/hunspell.vcxproj
new file mode 100644
index 0000000..b63df4c
--- /dev/null
+++ b/msvc/hunspell.vcxproj
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{6A0453F4-B12A-4810-B9A2-8AB059316ED7}</ProjectGuid>
+    <RootNamespace>hunspell</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>14.0.25420.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\$(ProjectName)\</OutDir>
+    <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\$(ProjectName)\</OutDir>
+    <IntDir>$(Configuration)\$(ProjectName)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\src\hunspell;..\src\parsers;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>W32;WIN32;_DEBUG;_CONSOLE;HUNSPELL_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <DisableSpecificWarnings>4127;4706</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention />
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\src\hunspell;..\src\parsers;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>W32;WIN32;_DEBUG;_CONSOLE;HUNSPELL_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <DisableSpecificWarnings>4127;4706</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <AdditionalIncludeDirectories>..\src\hunspell;..\src\parsers;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>W32;WIN32;NDEBUG;_CONSOLE;HUNSPELL_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat />
+      <DisableSpecificWarnings>4127;4706</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention />
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <AdditionalIncludeDirectories>..\src\hunspell;..\src\parsers;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>W32;WIN32;NDEBUG;_CONSOLE;HUNSPELL_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>
+      </DebugInformationFormat>
+      <DisableSpecificWarnings>4127;4706</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\parsers\firstparser.cxx" />
+    <ClCompile Include="..\src\parsers\htmlparser.cxx" />
+    <ClCompile Include="..\src\parsers\latexparser.cxx" />
+    <ClCompile Include="..\src\parsers\manparser.cxx" />
+    <ClCompile Include="..\src\parsers\odfparser.cxx" />
+    <ClCompile Include="..\src\parsers\textparser.cxx" />
+    <ClCompile Include="..\src\parsers\xmlparser.cxx" />
+    <ClCompile Include="..\src\tools\hunspell.cxx" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\parsers\firstparser.hxx" />
+    <ClInclude Include="..\src\parsers\htmlparser.hxx" />
+    <ClInclude Include="..\src\parsers\latexparser.hxx" />
+    <ClInclude Include="..\src\parsers\manparser.hxx" />
+    <ClInclude Include="..\src\parsers\odfparser.hxx" />
+    <ClInclude Include="..\src\parsers\textparser.hxx" />
+    <ClInclude Include="..\src\parsers\xmlparser.hxx" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libhunspell.vcxproj">
+      <Project>{53609bb3-d874-465c-af7b-df626db0d89b}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/msvc/libhunspell.vcxproj b/msvc/libhunspell.vcxproj
new file mode 100644
index 0000000..d3d1b9a
--- /dev/null
+++ b/msvc/libhunspell.vcxproj
@@ -0,0 +1,406 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug_dll|Win32">
+      <Configuration>Debug_dll</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug_dll|x64">
+      <Configuration>Debug_dll</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release_dll|Win32">
+      <Configuration>Release_dll</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release_dll|x64">
+      <Configuration>Release_dll</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{53609BB3-D874-465C-AF7B-DF626DB0D89B}</ProjectGuid>
+    <RootNamespace>Hunspell</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_dll|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_dll|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_dll|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_dll|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_dll|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_dll|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_dll|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_dll|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>14.0.25420.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\$(ProjectName)\</OutDir>
+    <IntDir>$(Configuration)\$(ProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\$(ProjectName)\</OutDir>
+    <IntDir>$(Configuration)\$(ProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_dll|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\$(ProjectName)\</OutDir>
+    <IntDir>$(Configuration)\$(ProjectName)\</IntDir>
+    <LinkIncremental />
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_dll|x64'">
+    <LinkIncremental />
+    <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_dll|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\$(ProjectName)\</OutDir>
+    <IntDir>$(Configuration)\$(ProjectName)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_dll|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <PreBuildEvent>
+      <Command>echo N | copy /-Y ..\src\hunspell\hunvisapi.h.in ..\src\hunspell\hunvisapi.h</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\src\hunspell;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;HUNSPELL_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <DisableSpecificWarnings>4706</DisableSpecificWarnings>
+    </ClCompile>
+    <Lib>
+      <AdditionalOptions>/MACHINE:X86 %(AdditionalOptions)</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <PreBuildEvent>
+      <Command>echo N | copy /-Y ..\src\hunspell\hunvisapi.h.in ..\src\hunspell\hunvisapi.h</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\src\hunspell;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;HUNSPELL_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4706</DisableSpecificWarnings>
+    </ClCompile>
+    <Lib />
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <PreBuildEvent>
+      <Command>echo N | copy /-Y ..\src\hunspell\hunvisapi.h.in ..\src\hunspell\hunvisapi.h</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <AdditionalIncludeDirectories>..\src\hunspell;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;HUNSPELL_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader />
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat />
+      <DisableSpecificWarnings>4706</DisableSpecificWarnings>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Bscmake>
+      <SuppressStartupBanner>false</SuppressStartupBanner>
+    </Bscmake>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <PreBuildEvent>
+      <Command>echo N | copy /-Y ..\src\hunspell\hunvisapi.h.in ..\src\hunspell\hunvisapi.h</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <AdditionalIncludeDirectories>..\src\hunspell;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;HUNSPELL_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>
+      </DebugInformationFormat>
+      <DisableSpecificWarnings>4706</DisableSpecificWarnings>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Bscmake>
+      <SuppressStartupBanner>false</SuppressStartupBanner>
+    </Bscmake>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_dll|Win32'">
+    <PreBuildEvent>
+      <Command>echo N | copy /-Y ..\src\hunspell\hunvisapi.h.in ..\src\hunspell\hunvisapi.h</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <AdditionalIncludeDirectories>..\src\hunspell;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_LIBHUNSPELL;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader />
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat />
+      <DisableSpecificWarnings>4706</DisableSpecificWarnings>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention />
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_dll|x64'">
+    <PreBuildEvent>
+      <Command>echo N | copy /-Y ..\src\hunspell\hunvisapi.h.in ..\src\hunspell\hunvisapi.h</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <AdditionalIncludeDirectories>..\src\hunspell;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_LIBHUNSPELL;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>
+      </DebugInformationFormat>
+      <DisableSpecificWarnings>4706</DisableSpecificWarnings>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <SubSystem>Windows</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_dll|Win32'">
+    <PreBuildEvent>
+      <Command>echo N | copy /-Y ..\src\hunspell\hunvisapi.h.in ..\src\hunspell\hunvisapi.h</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\src\hunspell;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;BUILDING_LIBHUNSPELL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <DisableSpecificWarnings>4706</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention />
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_dll|x64'">
+    <PreBuildEvent>
+      <Command>echo N | copy /-Y ..\src\hunspell\hunvisapi.h.in ..\src\hunspell\hunvisapi.h</Command>
+    </PreBuildEvent>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\src\hunspell;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;BUILDING_LIBHUNSPELL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4706</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\hunspell\affentry.hxx" />
+    <ClInclude Include="..\src\hunspell\affixmgr.hxx" />
+    <ClInclude Include="..\src\hunspell\atypes.hxx" />
+    <ClInclude Include="..\src\hunspell\baseaffix.hxx" />
+    <ClInclude Include="..\src\hunspell\csutil.hxx" />
+    <ClInclude Include="..\src\hunspell\filemgr.hxx" />
+    <ClInclude Include="..\src\hunspell\hashmgr.hxx" />
+    <ClInclude Include="..\src\hunspell\htypes.hxx" />
+    <ClInclude Include="..\src\hunspell\hunspell.h" />
+    <ClInclude Include="..\src\hunspell\hunspell.hxx" />
+    <ClInclude Include="..\src\hunspell\hunzip.hxx" />
+    <ClInclude Include="..\src\hunspell\langnum.hxx" />
+    <ClInclude Include="..\src\hunspell\phonet.hxx" />
+    <ClInclude Include="..\src\hunspell\replist.hxx" />
+    <ClInclude Include="..\src\hunspell\suggestmgr.hxx" />
+    <ClInclude Include="..\src\hunspell\w_char.hxx" />
+    <ClInclude Include="config.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="Hunspell.rc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\hunspell\affentry.cxx" />
+    <ClCompile Include="..\src\hunspell\affixmgr.cxx" />
+    <ClCompile Include="..\src\hunspell\csutil.cxx" />
+    <ClCompile Include="..\src\hunspell\filemgr.cxx" />
+    <ClCompile Include="..\src\hunspell\hashmgr.cxx" />
+    <ClCompile Include="..\src\hunspell\hunspell.cxx" />
+    <ClCompile Include="..\src\hunspell\hunzip.cxx" />
+    <ClCompile Include="..\src\hunspell\phonet.cxx" />
+    <ClCompile Include="..\src\hunspell\replist.cxx" />
+    <ClCompile Include="..\src\hunspell\suggestmgr.cxx" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/msvc/testparser.vcxproj b/msvc/testparser.vcxproj
new file mode 100644
index 0000000..c9e0cf7
--- /dev/null
+++ b/msvc/testparser.vcxproj
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{611BF6C7-332A-49BB-B2A3-80AFD5B785D9}</ProjectGuid>
+    <RootNamespace>testparser</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v140_xp</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>14.0.25420.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\$(ProjectName)\</OutDir>
+    <IntDir>$(Configuration)\$(ProjectName)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)$(Configuration)\$(ProjectName)\</OutDir>
+    <IntDir>$(Configuration)\$(ProjectName)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <IntDir>$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\src\hunspell;..\src\parsers;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>W32;WIN32;_DEBUG;_CONSOLE;HUNSPELL_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <DisableSpecificWarnings>4706</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention />
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\src\hunspell;..\src\parsers;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>W32;WIN32;_DEBUG;_CONSOLE;HUNSPELL_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <DisableSpecificWarnings>4706</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <AdditionalIncludeDirectories>..\src\hunspell;..\src\parsers;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>W32;WIN32;NDEBUG;_CONSOLE;HUNSPELL_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat />
+      <DisableSpecificWarnings>4706</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention />
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <AdditionalIncludeDirectories>..\src\hunspell;..\src\parsers;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>W32;WIN32;NDEBUG;_CONSOLE;HUNSPELL_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
+      <WarningLevel>Level4</WarningLevel>
+      <DebugInformationFormat>
+      </DebugInformationFormat>
+      <DisableSpecificWarnings>4706</DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\parsers\firstparser.cxx" />
+    <ClCompile Include="..\src\parsers\htmlparser.cxx" />
+    <ClCompile Include="..\src\parsers\latexparser.cxx" />
+    <ClCompile Include="..\src\parsers\manparser.cxx" />
+    <ClCompile Include="..\src\parsers\odfparser.cxx" />
+    <ClCompile Include="..\src\parsers\testparser.cxx" />
+    <ClCompile Include="..\src\parsers\textparser.cxx" />
+    <ClCompile Include="..\src\parsers\xmlparser.cxx" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\parsers\firstparser.hxx" />
+    <ClInclude Include="..\src\parsers\htmlparser.hxx" />
+    <ClInclude Include="..\src\parsers\latexparser.hxx" />
+    <ClInclude Include="..\src\parsers\manparser.hxx" />
+    <ClInclude Include="..\src\parsers\odfparser.hxx" />
+    <ClInclude Include="..\src\parsers\textparser.hxx" />
+    <ClInclude Include="..\src\parsers\xmlparser.hxx" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libhunspell.vcxproj">
+      <Project>{53609bb3-d874-465c-af7b-df626db0d89b}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/po/LINGUAS b/po/LINGUAS
index 3aa85ad..2e84c42 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -1,4 +1,5 @@
 # Set of available languages.
+de
 es
 hu
 it
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..c10b618
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,500 @@
+# German translation of hunspell.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the hunspell package.
+# Benjamin Weis <benjamin.weis at gmx.com>, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: hunspell 1.5.0\n"
+"Report-Msgid-Bugs-To: nemeth at numbertext.org\n"
+"POT-Creation-Date: 2017-08-13 20:51+0200\n"
+"PO-Revision-Date: 2017-08-18 00:12+0200\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.3\n"
+"Last-Translator: Benjamin Weis <benjamin.weis at gmx.com>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Language: de\n"
+"X-Language: de_DE\n"
+"X-Source-Language: C\n"
+
+#: src/tools/hunspell.cxx:260 src/tools/hunspell.cxx:376
+#, c-format
+msgid "error - iconv_open: %s -> %s\n"
+msgstr "Fehler - iconv_open: %s -> %s\n"
+
+#: src/tools/hunspell.cxx:272
+#, c-format
+msgid "error - iconv: %s -> %s\n"
+msgstr "Fehler - iconv: %s -> %s\n"
+
+#: src/tools/hunspell.cxx:317 src/tools/hunspell.cxx:339
+#, c-format
+msgid "error - iconv_open: UTF-8 -> %s\n"
+msgstr "Fehler - iconv_open: UTF-8 -> %s\n"
+
+#: src/tools/hunspell.cxx:666 src/tools/hunspell.cxx:1575
+msgid "Can't create tmp dir"
+msgstr "Verzeichnis tmp kann nicht erstellt werden"
+
+#: src/tools/hunspell.cxx:677 src/tools/hunspell.cxx:689
+#: src/tools/hunspell.cxx:1558 src/tools/hunspell.cxx:1588
+#: src/tools/hunspell.cxx:1601
+msgid "Can't open inputfile"
+msgstr "Eingabedatei kann nicht geöffnet werden"
+
+#: src/tools/hunspell.cxx:679 src/tools/hunspell.cxx:1590
+#: src/tools/hunspell.cxx:2001 src/tools/hunspell.cxx:2153
+#: src/tools/hunspell.cxx:2170
+#, c-format
+msgid "Can't open %s.\n"
+msgstr "%s kann nicht geöffnet werden.\n"
+
+#: src/tools/hunspell.cxx:759 src/tools/hunspell.cxx:1345
+#: src/tools/hunspell.cxx:1457
+#, c-format
+msgid "error - missing HOME variable\n"
+msgstr "Fehler - fehlende HOME-Variable\n"
+
+#: src/tools/hunspell.cxx:844
+#, c-format
+msgid "Line %d: %s -> "
+msgstr "Zeile %d: %s -> "
+
+#: src/tools/hunspell.cxx:1124
+msgid "FORBIDDEN!"
+msgstr "VERBOTEN!"
+
+#: src/tools/hunspell.cxx:1126
+msgid "Spelling mistake?"
+msgstr "Rechtschreibfehler?"
+
+#: src/tools/hunspell.cxx:1128
+#, c-format
+msgid ""
+"\t%s\t\tFile: %s\n"
+"\n"
+msgstr ""
+"\t%s\t\tDatei: %s\n"
+"\n"
+
+#. TRANSLATORS: the capital letters are shortcuts, mark one letter similarly
+#. in your translation and translate the standalone letter accordingly later
+#.
+#: src/tools/hunspell.cxx:1187
+msgid ""
+"\n"
+"[SPACE] R)epl A)ccept I)nsert U)ncap S)tem Q)uit e(X)it or ? for help\n"
+msgstr ""
+"\n"
+"[LEERTASTE] E)rsetzen A)nnehmen E(I)nfügen K)leinschreiben Ab(L)eiten "
+"S)chließen B)eenden oder ? für Hilfe\n"
+
+#: src/tools/hunspell.cxx:1258
+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"
+"contains any similar words, they are listed with a number\n"
+"next to each one.  You have the option of replacing the word\n"
+"completely, or choosing one of the suggested words.\n"
+msgstr ""
+"Immer wenn ein Wort gefunden wird, das nicht im Wörterbuch\n"
+"steht, wird es in der ersten Zeile des Bildschirms ausgegeben.\n"
+"Wenn das Wörterbuch irgendwelche ähnlichen Wörter enthält,\n"
+"wird jedes neben einer Nummer aufgelistet. Sie haben die\n"
+"Möglichkeit, das Wort vollständig zu ersetzen oder eines der\n"
+"vorgeschlagenen Wörter auszuwählen.\n"
+
+#: src/tools/hunspell.cxx:1264
+msgid ""
+"\n"
+"Commands are:\n"
+"\n"
+msgstr ""
+"\n"
+"Befehle sind:\n"
+"\n"
+
+#: src/tools/hunspell.cxx:1265
+msgid "R\tReplace the misspelled word completely.\n"
+msgstr "R\tFalsch geschriebenes Wort vollständig ersetzen.\n"
+
+#: src/tools/hunspell.cxx:1266
+msgid "Space\tAccept the word this time only.\n"
+msgstr "Leertaste\tWort nur dieses Mal übernehmen.\n"
+
+#: src/tools/hunspell.cxx:1268
+msgid "A\tAccept the word for the rest of this session.\n"
+msgstr "A\tWort für den Rest dieser Sitzung übernehmen.\n"
+
+#: src/tools/hunspell.cxx:1270
+msgid "I\tAccept the word, and put it in your private dictionary.\n"
+msgstr "I\tWort übernehmen und in Ihr privates Wörterbuch legen.\n"
+
+#: src/tools/hunspell.cxx:1272
+msgid "U\tAccept and add lowercase version to private dictionary.\n"
+msgstr ""
+"k\tÜbernehmen und kleingeschriebene Version zum privaten Wörterbuch "
+"hinzufügen.\n"
+
+#: src/tools/hunspell.cxx:1274
+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 ""
+"S\tNach einen Wortstamm und einem Musterwort fragen und im privaten "
+"Wörterbuch speichern.\n"
+"\tDer Wortstamm wird auch mit den Affixen des Musterwortes übernommen.\n"
+
+#: src/tools/hunspell.cxx:1278
+msgid "0-n\tReplace with one of the suggested words.\n"
+msgstr "0-n\tMit einem der vorgeschlagenen Wörter ersetzen.\n"
+
+#: src/tools/hunspell.cxx:1280
+msgid ""
+"X\tWrite the rest of this file, ignoring misspellings, and start next file.\n"
+msgstr ""
+"B\tRest dieser Datei schreiben, Rechtschreibfehler ignorieren und nächste "
+"Datei starten.\n"
+
+#: src/tools/hunspell.cxx:1283
+msgid "Q\tQuit immediately. Asks for confirmation. Leaves file unchanged.\n"
+msgstr ""
+"S\tSofort schließen. Bittet um Bestätigung. Lässt Datei ungeändert zurück.\n"
+
+#: src/tools/hunspell.cxx:1285
+msgid "^Z\tSuspend program. Restart with fg command.\n"
+msgstr "^Z\tProgramm unterbrechen. Mit Befehl fg neu starten.\n"
+
+#: src/tools/hunspell.cxx:1286
+msgid "?\tShow this help screen.\n"
+msgstr "?\tDiesen Hilfebildschirm anzeigen.\n"
+
+#: src/tools/hunspell.cxx:1287
+msgid ""
+"\n"
+"-- Type space to continue -- \n"
+msgstr ""
+"\n"
+"-- Zum Fortfahren Leertaste drücken -- \n"
+
+#. TRANSLATORS: translate this letter according to the shortcut letter
+#. used
+#. previously in the  translation of "R)epl" before
+#: src/tools/hunspell.cxx:1299
+msgid "r"
+msgstr "e"
+
+#: src/tools/hunspell.cxx:1308
+msgid "Replace with: "
+msgstr "Ersetzen mit: "
+
+#. TRANSLATORS: translate these letters according to the shortcut letter
+#. used
+#. 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:1332 src/tools/hunspell.cxx:1368
+msgid "u"
+msgstr "k"
+
+#: src/tools/hunspell.cxx:1333 src/tools/hunspell.cxx:1368
+msgid "i"
+msgstr "i"
+
+#: src/tools/hunspell.cxx:1361 src/tools/hunspell.cxx:1473
+#, c-format
+msgid "Cannot update personal dictionary."
+msgstr "Persönliches Wörterbuch kann nicht aktualisiert werden."
+
+#: src/tools/hunspell.cxx:1369
+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:1377
+msgid "s"
+msgstr "l"
+
+#: src/tools/hunspell.cxx:1392
+msgid "New word (stem): "
+msgstr "Neues Wort (Wortstamm): "
+
+#: src/tools/hunspell.cxx:1420
+msgid "Model word (a similar dictionary word): "
+msgstr "Musterwort (ein ähnliches Wörterbuchwort): "
+
+#: src/tools/hunspell.cxx:1480
+msgid "Model word must be in the dictionary. Press any key!"
+msgstr "Musterwort muss im Wörterbuch sein. Drücken Sie eine beliebige Taste!"
+
+#. TRANSLATORS: translate this letter according to the shortcut letter
+#. used
+#. previously in the  translation of "e(X)it" before
+#: src/tools/hunspell.cxx:1490
+msgid "x"
+msgstr "b"
+
+#. TRANSLATORS: translate this letter according to the shortcut letter
+#. used
+#. previously in the  translation of "Q)uit" before
+#: src/tools/hunspell.cxx:1496
+msgid "q"
+msgstr "s"
+
+#: src/tools/hunspell.cxx:1499
+msgid "Are you sure you want to throw away your changes? "
+msgstr "Sind Sie sicher, dass Sie Ihre Änderungen wegwerfen möchten? "
+
+#. TRANSLATORS: translate this letter according to the shortcut
+#. * letter y)es
+#: src/tools/hunspell.cxx:1502
+msgid "y"
+msgstr "j"
+
+#: src/tools/hunspell.cxx:1611
+msgid "Can't create tempfile"
+msgstr "Temporäre Datei kann nicht erstellt werden"
+
+#: src/tools/hunspell.cxx:1656
+msgid "Can't open outputfile"
+msgstr "Ausgabedatei kann nicht erstellt werden"
+
+#: src/tools/hunspell.cxx:1821
+msgid "Usage: hunspell [OPTION]... [FILE]...\n"
+msgstr "Aufruf: hunspell [OPTION]... [DATEI]...\n"
+
+#: src/tools/hunspell.cxx:1822
+msgid ""
+"Check spelling of each FILE. Without FILE, check standard input.\n"
+"\n"
+msgstr ""
+"Rechtschreibung jeder DATEI überprüfen. Ohne DATEI die Standardeingabe "
+"überprüfen.\n"
+"\n"
+
+#: src/tools/hunspell.cxx:1824
+msgid "  -1\t\tcheck only first field in lines (delimiter = tabulator)\n"
+msgstr ""
+"  -1\t\tnur das erste Feld bei Zeilen überprüfen (Trennzeichen = Tabulator)\n"
+
+#: src/tools/hunspell.cxx:1826
+msgid "  -a\t\tIspell's pipe interface\n"
+msgstr "  -a\t\tPipe-Schnittstelle von Ispell\n"
+
+#: src/tools/hunspell.cxx:1827
+msgid "  --check-url\tcheck URLs, e-mail addresses and directory paths\n"
+msgstr "  --check-url\tURLs, E-Mail-Adressen und Verzeichnispfade überprüfen\n"
+
+#: src/tools/hunspell.cxx:1832
+msgid "  --check-apostrophe\tcheck Unicode typographic apostrophe\n"
+msgstr "  --check-apostrophe\tTypografischen Unicode-Apostroph überprüfen\n"
+
+#: src/tools/hunspell.cxx:1834
+msgid "  -d d[,d2,...]\tuse d (d2 etc.) dictionaries\n"
+msgstr "  -d d[,d2,...]\td (d2 usw.) Wörterbücher verwenden\n"
+
+#: src/tools/hunspell.cxx:1835
+msgid "  -D\t\tshow available dictionaries\n"
+msgstr "  -D\t\tverfügbare Wörterbücher anzeigen\n"
+
+#: src/tools/hunspell.cxx:1836
+msgid "  -G\t\tprint only correct words or lines\n"
+msgstr "  -G\t\tnur korrekte Wörter oder Zeilen ausgeben\n"
+
+#: src/tools/hunspell.cxx:1837
+msgid "  -h, --help\tdisplay this help and exit\n"
+msgstr "  -h, --help\tdiese Hilfe anzeigen und beenden\n"
+
+#: src/tools/hunspell.cxx:1838
+msgid "  -H\t\tHTML input file format\n"
+msgstr "  -H\t\tHTML Eingabedateiformat\n"
+
+#: src/tools/hunspell.cxx:1839
+msgid "  -i enc\tinput encoding\n"
+msgstr "  -i enc\tEingabekodierung\n"
+
+#: src/tools/hunspell.cxx:1840
+msgid "  -l\t\tprint misspelled words\n"
+msgstr "  -l\t\tfalsch geschriebene Wörter ausgeben\n"
+
+#: src/tools/hunspell.cxx:1841
+msgid "  -L\t\tprint lines with misspelled words\n"
+msgstr "  -L\t\tZeilen mit falsch geschriebenen Wörtern ausgeben\n"
+
+#: src/tools/hunspell.cxx:1843
+msgid "  -m \t\tanalyze the words of the input text\n"
+msgstr "  -m \t\tWörter des Eingabetextes analysieren\n"
+
+#: src/tools/hunspell.cxx:1844
+msgid "  -n\t\tnroff/troff input file format\n"
+msgstr "  -n\t\tnroff/troff Eingabedateiformat\n"
+
+#: src/tools/hunspell.cxx:1848
+msgid "  -O\t\tOpenDocument (ODF or Flat ODF) input file format\n"
+msgstr "  -O\t\tOpenDocument (ODF oder Flat ODF) Eingabedateiformat\n"
+
+#: src/tools/hunspell.cxx:1849
+msgid "  -p dict\tset dict custom dictionary\n"
+msgstr "  -p dict\tbenutzerdefiniertes Wörterbuch dict festlegen\n"
+
+#: src/tools/hunspell.cxx:1851
+msgid "  -r\t\twarn of the potential mistakes (rare words)\n"
+msgstr "  -r\t\tvor den möglichen Fehlern warnen (seltene Wörter)\n"
+
+#: src/tools/hunspell.cxx:1854
+msgid "  -P password\tset password for encrypted dictionaries\n"
+msgstr "  -P password\tPasswort für verschlüsselte Wörterbücher festlegen\n"
+
+#: src/tools/hunspell.cxx:1855
+msgid "  -s \t\tstem the words of the input text\n"
+msgstr "  -s \t\tWorte des eingegebenen Textes ableiten\n"
+
+#: src/tools/hunspell.cxx:1856
+msgid "  -S \t\tsuffix words of the input text\n"
+msgstr "  -S \t\tWörter des Eingabetextes anhängen\n"
+
+#: src/tools/hunspell.cxx:1857
+msgid "  -t\t\tTeX/LaTeX input file format\n"
+msgstr "  -t\t\tTeX/Latex Eingabedateiformat\n"
+
+#: src/tools/hunspell.cxx:1858
+msgid "  -v, --version\tprint version number\n"
+msgstr "  -v, --version\tVersionsnummer ausgeben\n"
+
+#: src/tools/hunspell.cxx:1860
+msgid "  -vv\t\tprint Ispell compatible version number\n"
+msgstr "  -vv\t\tIspell-kompatible Versionsnummer ausgeben\n"
+
+#: src/tools/hunspell.cxx:1861
+msgid "  -w\t\tprint misspelled words (= lines) from one word/line input.\n"
+msgstr ""
+"  -w\t\tfalsch geschriebene Wörter (= Zeilen) von einer Wort-/Zeileneingabe "
+"ausgeben.\n"
+
+#: src/tools/hunspell.cxx:1863
+msgid ""
+"  -X\t\tXML input file format\n"
+"\n"
+msgstr ""
+"  -X\t\tXML Eingabedateiformat\n"
+"\n"
+
+#: src/tools/hunspell.cxx:1867
+msgid ""
+"Example: hunspell -d en_US file.txt    # interactive spelling\n"
+"         hunspell -i utf-8 file.txt    # check UTF-8 encoded file\n"
+"         hunspell -l *.odt             # print misspelled words of ODF "
+"files\n"
+"\n"
+"         # Quick fix of ODF documents by personal dictionary creation\n"
+"\n"
+"         # 1 Make a reduced list from misspelled and unknown words:\n"
+"\n"
+"         hunspell -l *.odt | sort | uniq >words\n"
+"\n"
+"         # 2 Delete misspelled words of the file by a text editor.\n"
+"         # 3 Use this personal dictionary to fix the deleted words:\n"
+"\n"
+"         hunspell -p words *.odt\n"
+"\n"
+msgstr ""
+"Beispiel: hunspell -d en_US Datei.txt    # interaktive Rechtschreibung\n"
+"         hunspell -i utf-8 Datei.txt    # UTF-8-kodierte Datei überprüfen\n"
+"         hunspell -l *.odt             # falsch geschriebene Wörter aus "
+"ODF-Dateien ausgeben\n"
+"\n"
+"         # Schnelle Korrektur von ODF-Dokumenten durch persönliche "
+"Wörterbucherstellung\n"
+"\n"
+"         # 1. Erstellen Sie eine reduzierte Liste aus falsch geschriebenen "
+"und unbekannten Wörtern:\n"
+"\n"
+"         hunspell -l *.odt | sort | uniq >words\n"
+"\n"
+"         # 2. Löschen Sie falsch geschriebene Wörter aus der Datei durch "
+"einen Texteditor.\n"
+"         # 3. Verwenden Sie dieses persönliche Wörterbuch, um die gelöschten "
+"Wörter zu korrigieren:\n"
+"\n"
+"         hunspell -p words *.odt\n"
+"\n"
+
+#: src/tools/hunspell.cxx:1882
+msgid "Bug reports: http://hunspell.github.io/\n"
+msgstr "Fehlerberichte: http://hunspell.github.io/\n"
+
+#: src/tools/hunspell.cxx:1890
+msgid ""
+"\n"
+"Copyright (C) 2002-2014 László Németh. License: MPL/GPL/LGPL.\n"
+"\n"
+"Based on OpenOffice.org's Myspell library.\n"
+"Myspell's copyright (C) Kevin Hendricks, 2001-2002, License: BSD.\n"
+"\n"
+msgstr ""
+"\n"
+"Copyright (C) 2002-2014 László Németh. Lizenz: MPL/GPL/LGPL.\n"
+"\n"
+"Basiert auf der Myspell-Bibliothek von OpenOffice.org.\n"
+"Copyright von Myspell (C) Kevin Hendricks, 2001-2002, Lizenz: BSD.\n"
+"\n"
+
+#: src/tools/hunspell.cxx:1895
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,\n"
+"to the extent permitted by law.\n"
+msgstr ""
+"Dies ist freie Software; siehe die Quelle für Bedingungen zur "
+"Vervielfältigung.\n"
+"Es gibt keine Gewährleistung; nicht einmal für MARKTFÄHIGKEIT oder EIGNUNG "
+"FÜR\n"
+"EINEN BESTIMMTEN ZWECK, soweit gesetzlich zulässig.\n"
+
+#: src/tools/hunspell.cxx:2056
+#, c-format
+msgid ""
+"SEARCH PATH:\n"
+"%s\n"
+msgstr ""
+"PFAD SUCHEN:\n"
+"%s\n"
+
+#: src/tools/hunspell.cxx:2060
+msgid "AVAILABLE DICTIONARIES (path is not mandatory for -d option):\n"
+msgstr ""
+"VERFÜGBARE WÖRTERBÜCHER (Pfad ist für Option -d nicht zwingend "
+"erforderlich):\n"
+
+#: src/tools/hunspell.cxx:2074
+#, c-format
+msgid ""
+"LOADED DICTIONARY:\n"
+"%s\n"
+"%s\n"
+msgstr ""
+"GELADENES WÖRTERBUCH:\n"
+"%s\n"
+"%s\n"
+
+#: src/tools/hunspell.cxx:2094
+#, c-format
+msgid "error - %s exceeds dictionary limit.\n"
+msgstr "Fehler - %s überschreitet Wörterbuchbegrenzung.\n"
+
+#: src/tools/hunspell.cxx:2100
+#, c-format
+msgid "Can't open affix or dictionary files for dictionary named \"%s\".\n"
+msgstr ""
+"Affix oder Wörterbuchdateien für ein Wörterbuch namens \"%s\" können nicht "
+"geöffnet werden.\n"
+
+#: src/tools/hunspell.cxx:2183
+msgid "Hunspell has been compiled without Ncurses user interface.\n"
+msgstr "Hunspell wurde ohne Ncurses-Benutzeroberfläche kompiliert.\n"
diff --git a/src/hunspell2/dic_manager.cxx b/src/hunspell2/dic_manager.cxx
index ad04f8c..005456c 100644
--- a/src/hunspell2/dic_manager.cxx
+++ b/src/hunspell2/dic_manager.cxx
@@ -47,7 +47,6 @@ auto dic_data::parse(std::istream& in, const aff_data& aff) -> bool
 	string morph;
 	vector<string> morphs;
 	u16string flags;
-	int line_number = 0;
 	istringstream ss;
 	utf8_to_ucs2_converter cv;
 	while (getline(in, line)) {
diff --git a/src/hunspell2/main.cxx b/src/hunspell2/main.cxx
index 82730d9..4420e75 100644
--- a/src/hunspell2/main.cxx
+++ b/src/hunspell2/main.cxx
@@ -161,8 +161,8 @@ int main(int argc, char* argv[])
 	for (auto& a : aff.suffixes) {
 		cout << (char)a.flag << ' ' << (a.cross_product ? 'Y' : 'N')
 		     << ' ' << a.stripping << ' ' << a.affix
-		     << (a.new_flags.size() ? "/ " : " ") << a.condition
-		     << endl;
+		     << (a.new_flags.size() ? "/ " : " ") << a.condition;
+		cout << endl;
 	}
 	for (auto& wd : dic.words) {
 		cout << wd.first;
diff --git a/src/parsers/xmlparser.cxx b/src/parsers/xmlparser.cxx
index 7ebc10f..1315011 100644
--- a/src/parsers/xmlparser.cxx
+++ b/src/parsers/xmlparser.cxx
@@ -188,6 +188,7 @@ bool XMLParser::next_token(const char* PATTERN[][2],
     if (next_char(line[actual].c_str(), &head))
       return false;
   }
+  //FIXME No return, in function returning non-void
 }
 
 bool XMLParser::next_token(std::string& t) {
diff --git a/src/tools/.gitignore b/src/tools/.gitignore
index c5381e1..6d113b2 100644
--- a/src/tools/.gitignore
+++ b/src/tools/.gitignore
@@ -1,4 +1,5 @@
 analyze
+bulkcheck
 chmorph
 example
 hunspell
diff --git a/src/tools/Makefile.am b/src/tools/Makefile.am
index 4c29f1a..176521e 100644
--- a/src/tools/Makefile.am
+++ b/src/tools/Makefile.am
@@ -19,9 +19,12 @@ hunspell_LDADD = @LIBINTL@ @LIBICONV@ ../parsers/libparsers.a \
 analyze_SOURCES=analyze.cxx
 analyze_LDADD = ../hunspell/libhunspell-1.6.la
 
+bulkcheck_SOURCES=bulkcheck.cxx
+bulkcheck_LDADD = ../hunspell/libhunspell-1.6.la
+
 chmorph_SOURCES=chmorph.cxx
 chmorph_LDADD = ../parsers/libparsers.a ../hunspell/libhunspell-1.6.la
 
-noinst_PROGRAMS=example
+noinst_PROGRAMS=example bulkcheck 
 
 dist_bin_SCRIPTS=makealias affixcompress wordforms ispellaff2myspell wordlist2hunspell
diff --git a/src/tools/bulkcheck.cxx b/src/tools/bulkcheck.cxx
new file mode 100644
index 0000000..791bfc8
--- /dev/null
+++ b/src/tools/bulkcheck.cxx
@@ -0,0 +1,196 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * Copyright (C) 2002-2017 Németh László for original code example.cxx
+ * Copyright (C) 2017 Pander for new code bulkcheck.cxx
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks.
+ *
+ * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno,
+ * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád,
+ * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter,
+ * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls,
+ * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include <cstring>
+#include <cstdlib>
+#include <fstream>
+#include <iostream>
+#include <iomanip>
+
+#include "config.h" // for macro VERSION
+#include "hunspell.hxx"
+
+using namespace std;
+
+int main(int argc, char** argv) {
+
+  /* first parse the command line options */
+
+  if (argc < 4) {
+    //TODO refactor to use a library for this
+    fprintf(stderr, "bulkcheck (now it works with more dictionary files):\n");
+    fprintf(stderr,
+            "bulkcheck affix_file dictionary_file(s) file_of_words_to_check result_file\n");
+    exit(1);
+  }
+
+  /* open the words to check list, word is expected on each line */
+  ifstream input_file(argv[argc - 1], ios_base::in);
+  if (!input_file.is_open()) {
+    fprintf(stderr, "Error - could not open file of words to check %s\n", argv[argc - 1]);
+    exit(1);
+  }
+
+  Hunspell* hunspell = new Hunspell(argv[1], argv[2]);
+
+  // load extra dictionaries, such as medical dictionaries or personal dictionaries that do not have affix file
+  //TODO This should go into the documentation
+  if (argc > 3)
+    for (int k = 3; k < argc - 1; ++k)
+      hunspell->add_dic(argv[k]);
+
+//  /* open output file */
+//  string filename = string(argv[argc - 1]) + "-bulkcheck.tsv";
+//  ofstream output_file(filename, ios_base::out);
+//  if (!output_file.is_open()) {
+//    fprintf(stderr, "Error - could not open result file\n");
+//    exit(1);
+//  }
+
+  /* declare variables for iteration */
+  string word;
+  int num = 0;
+  int num_space = 0;
+  int num_correct = 0;
+  int num_correct_space = 0;
+
+  /* iterate all lines in input file */
+  while (getline(input_file, word)) {
+    /* count number of words and words with space */
+    num++;
+    bool has_space = false;
+    if (count(word.begin(), word.end(), ' ') > 0 ) {
+      has_space = true;
+      num_space++;
+    }
+
+    bool is_correct = hunspell->spell(word);
+//    output_file << is_success << "\t" << is_correct << "\t" << has_space << "\t" << has_suggest
+//                << "\t" << word.c_str() << "\t" << expect.c_str() << "\t";
+    cout << is_correct << "\t" << word.c_str() << "\t";
+
+    bool is_first = true;
+    if (is_correct) {
+      num_correct++;
+      if (has_space) {
+        num_correct_space++;
+      }
+    } else {
+      vector<string> suggestions = hunspell->suggest(word.c_str());
+      for (size_t i = 0; i < suggestions.size(); ++i) {
+        if (is_first) {
+          cout << suggestions[i];
+          is_first = false;
+        } else {
+          cout << ";" << suggestions[i];
+        }
+      }
+    }
+
+    cout << endl;
+  }
+
+  input_file.close();
+
+  if (num == 0) {
+    fprintf(stderr, "ERROR: No words to check in file %s:\n", argv[argc - 2]);
+    exit(1);
+  }
+
+  int num_nospace = num - num_space;
+  int num_incorrect = num - num_correct;
+  int num_incorrect_space = num_space - num_correct_space;
+  int num_correct_nospace = num_correct - num_correct_space;
+  int num_incorrect_nospace = num_nospace - num_correct_nospace;
+
+  float per_nospace = 100.0 * num_nospace / num;
+  float per_correct = 100.0 * num_correct / num;
+  float per_correct_space = 100.0;
+  if (num_space != 0) {
+    per_correct_space = 100.0 * num_correct_space / num_space;
+  }
+  float per_correct_nospace = 100.0;
+  if (num_nospace != 0) {
+    per_correct_nospace = 100.0 * num_correct_nospace / num_nospace;
+  }
+
+  float per_space = 100.0 - per_nospace;
+  float per_incorrect = 100.0 - per_correct;
+  float per_incorrect_space = 100.0 - per_correct_space;
+  float per_incorrect_nospace = 100.0 - per_correct_nospace;
+
+  cerr << "Hunspell version\t" << VERSION << endl;
+  cerr << "Hunspell affix\t" << argv[1] << endl;
+  cerr << "Hunspell dict\t" << argv[2] << endl;
+
+  cerr << "wordlist\t" << argv[argc - 1] << endl;
+  cerr << "percentage of words without space\t" << fixed << setw(6)
+              << setprecision(2) << setfill('0') << per_nospace << endl;
+  cerr << "percentage of words with space\t" << fixed << setw(6)
+              << setprecision(2) << setfill('0') << per_space << endl;
+
+  cerr << "number of words\t" << num << endl;
+  cerr << "number of correct words\t" << num_correct << endl;
+  cerr << "number of incorect words\t" << num_incorrect << endl;
+  cerr << "percentage of correct words\t" << fixed << setw(6)
+              << setprecision(2) << setfill('0') << per_correct << endl;
+  cerr << "percentage of incorrect words\t" << fixed << setw(6)
+              << setprecision(2) << setfill('0') << per_incorrect << endl;
+
+  cerr << "number of words without space\t" << num_nospace << endl;
+  cerr << "number of correct words without space\t" << num_correct_nospace << endl;
+  cerr << "number of incorrect words without space\t" << num_incorrect_nospace << endl;
+  cerr << "percentage of correct words without space\t" << fixed << setw(6)
+              << setprecision(2) << setfill('0') << per_correct_nospace << endl;
+  cerr << "percentage of incorrect words without space\t" << fixed << setw(6)
+              << setprecision(2) << setfill('0') << per_incorrect_nospace << endl;
+
+  cerr << "number of words with space\t" << num_space << endl;
+  cerr << "number of correct words with space\t" << num_correct_space << endl;
+  cerr << "number of incorrect words with space\t" << num_incorrect_space << endl;
+  cerr << "percentage of correct words with space\t" << fixed << setw(6)
+              << setprecision(2) << setfill('0') << per_correct_space << endl;
+  cerr << "percentage of incorrect words with space\t" << fixed << setw(6)
+              << setprecision(2) << setfill('0') << per_incorrect_space << endl;
+
+//  output_file.close();
+
+  delete hunspell;
+
+  return 0;
+}
diff --git a/src/tools/example.cxx b/src/tools/example.cxx
index b393889..42daea8 100644
--- a/src/tools/example.cxx
+++ b/src/tools/example.cxx
@@ -41,8 +41,6 @@
 
 #include "hunspell.hxx"
 
-extern char* mystrdup(const char* s);
-
 using namespace std;
 
 int main(int argc, char** argv) {
diff --git a/src/tools/hunspell.cxx b/src/tools/hunspell.cxx
index 399df86..d35f6f2 100644
--- a/src/tools/hunspell.cxx
+++ b/src/tools/hunspell.cxx
@@ -243,7 +243,7 @@ static const char* fix_encoding_name(const char* enc) {
 #endif
 
 /* change character encoding */
-std::string& chenc(std::string& st, const char* enc1, const char* enc2) {
+std::string chenc(const std::string& st, const char* enc1, const char* enc2) {
 #ifndef HAVE_ICONV
   (void)enc1;
   (void)enc2;
@@ -258,7 +258,7 @@ std::string& chenc(std::string& st, const char* enc1, const char* enc2) {
   std::string out(st.size(), std::string::value_type());
   size_t c1(st.size());
   size_t c2(out.size());
-  ICONV_CONST char* source = &st[0];
+  ICONV_CONST char* source = (ICONV_CONST char*) &st[0];
   char* dest = &out[0];
   iconv_t conv = iconv_open(fix_encoding_name(enc2), fix_encoding_name(enc1));
   if (conv == (iconv_t)-1) {
@@ -267,9 +267,11 @@ std::string& chenc(std::string& st, const char* enc1, const char* enc2) {
     size_t res;
     while ((res = iconv(conv, &source, &c1, &dest, &c2)) == size_t(-1)) {
       if (errno == E2BIG) {
-        out.resize(out.size() + (c2 += c1));
-
-        dest = const_cast<char*>(&out[0]) + out.size() - c2;
+        //c2 is zero or close to zero
+        size_t next_start = out.size() - c2;
+        c2 += c1;
+        out.resize(out.size() + c2);
+        dest = &out[next_start];
       } else
         break;
     }
@@ -278,7 +280,7 @@ std::string& chenc(std::string& st, const char* enc1, const char* enc2) {
     }
     iconv_close(conv);
     out.resize(dest - &out[0]);
-    st = out;
+    return out;
   }
 
   return st;
@@ -507,8 +509,7 @@ void log(char* message) {
 #endif
 
 int putdic(const std::string& in_word, Hunspell* pMS) {
-  std::string word(in_word);
-  chenc(word, ui_enc, dic_enc[0]);
+  std::string word = chenc(in_word, ui_enc, dic_enc[0]);
 
   std::string buf;
   pMS->input_conv(word.c_str(), buf);
@@ -565,7 +566,7 @@ int save_privdic(const std::string& filename, const std::string& filename2, std:
   if (!dic)
     return 0;
   for (size_t i = 0; i < w.size(); ++i) {
-    chenc(w[i], io_enc, ui_enc);
+    w[i] = chenc(w[i], io_enc, ui_enc);
     fprintf(dic, "%s\n", w[i].c_str());
   }
   fclose(dic);
@@ -595,8 +596,7 @@ char* scanline(char* message) {
 // check words in the dictionaries (and set first checked dictionary)
 bool check(Hunspell** pMS, int* d, const std::string& token, int* info, std::string* root) {
   for (int i = 0; i < dmax; ++i) {
-    std::string buf(token);
-    chenc(buf, io_enc, dic_enc[*d]);
+    std::string buf = chenc(token, io_enc, dic_enc[*d]);
     mystrrep(buf, ENTITY_APOS, "'");
     if (checkapos && buf.find('\'') != std::string::npos)
       return false;
@@ -937,7 +937,7 @@ nextline:
                 fprintf(stdout, "%s", chenc(wlst[0], dic_enc[d], io_enc).c_str());
               }
               for (size_t j = 1; j < wlst.size(); ++j) {
-                fprintf(stdout, ", %s", chenc(wlst[j], dic_enc[d], io_enc).c_str());
+                  fprintf(stdout, ", %s", chenc(wlst[j], dic_enc[d], io_enc).c_str());
               }
               fprintf(stdout, "\n");
               fflush(stdout);
@@ -1194,8 +1194,7 @@ void dialogscreen(TextParser* parser,
 }
 
 std::string lower_first_char(const std::string& token, const char* ioenc, int langnum) {
-  std::string utf8str(token);
-  chenc(utf8str, ioenc, "UTF-8");
+  std::string utf8str = chenc(token, ioenc, "UTF-8");
   std::vector<w_char> u;
   u8_u16(u, utf8str);
   if (!u.empty()) {
@@ -1206,8 +1205,7 @@ std::string lower_first_char(const std::string& token, const char* ioenc, int la
   }
   std::string scratch;
   u16_u8(scratch, u);
-  chenc(scratch, "UTF-8", ioenc);
-  return scratch;
+  return chenc(scratch, "UTF-8", ioenc);
 }
 
 // for terminal interface
@@ -1532,13 +1530,13 @@ int interactive_line(TextParser* parser,
       std::vector<std::string> wlst;
       dialogscreen(parser, token, filename, info, wlst);  // preview
       refresh();
-      std::string buf(token);
-      wlst = pMS[d]->suggest(mystrrep(chenc(buf, io_enc, dic_enc[d]), ENTITY_APOS, "'").c_str());
+      std::string dicbuf = chenc(token, io_enc, dic_enc[d]);
+      wlst = pMS[d]->suggest(mystrrep(dicbuf, ENTITY_APOS, "'").c_str());
       if (wlst.empty()) {
         dialogexit = dialog(parser, pMS[d], token, filename, wlst, info);
       } else {
         for (size_t j = 0; j < wlst.size(); ++j) {
-          chenc(wlst[j], dic_enc[d], io_enc);
+          wlst[j] = chenc(wlst[j], dic_enc[d], io_enc);
         }
         dialogexit = dialog(parser, pMS[d], token, filename, wlst, info);
       }
diff --git a/src/tools/munch.cxx b/src/tools/munch.cxx
index 17fc6fd..5f51fc6 100644
--- a/src/tools/munch.cxx
+++ b/src/tools/munch.cxx
@@ -348,6 +348,7 @@ int parse_aff_file(FILE* afflst) {
               }
                 fprintf(stderr, "   affix: %s %d, strip: %s %d\n", nptr->appnd,
                         nptr->appndl, nptr->strip, nptr->stripl);
+                // no break
               default:
                 break;
             }
diff --git a/src/tools/optionusage/.gitignore b/src/tools/optionusage/.gitignore
new file mode 100644
index 0000000..cd1d076
--- /dev/null
+++ b/src/tools/optionusage/.gitignore
@@ -0,0 +1,3 @@
+./usr
+./var
+./debs
diff --git a/src/tools/optionusage/analyse.py b/src/tools/optionusage/analyse.py
new file mode 100755
index 0000000..f295683
--- /dev/null
+++ b/src/tools/optionusage/analyse.py
@@ -0,0 +1,213 @@
+#!/usr/bin/env python3
+
+from os import listdir, path
+from datetime import datetime
+
+
+def report(output, desc, dikt_has, options, doc, option_count, all_dikts=False):
+    # header
+    output.write('## {} Options\n\n'.format(desc))
+    difopt = 0
+    for option in options:
+        if option in option_count:
+            difopt += 1
+    if difopt == 0:
+        output.write('A total of {} {} different options are recognised by Hunspell. None of these options are used'.format(
+        len(options), desc.lower()))
+    elif difopt == len(options):
+        output.write('A total of {} {} different options are recognised by Hunspell. All of these options are used'.format(
+        len(options), desc.lower()))
+    elif difopt == 1:
+        output.write('A total of {} {} different options are recognised by Hunspell. Of these, only 1 option is used'.format(
+        len(options), desc.lower()))
+    else:
+        output.write('A total of {} {} different options are recognised by Hunspell. Of these, only {} different options are used'.format(
+        len(options), desc.lower(), difopt))
+    if len(dikt_has) == 0:
+        output.write('\n\n')
+    elif len(dikt_has) == 1:
+        if len(dikt_has) == len(doc):
+            output.write(' in all 1 dictionary.\n\n')
+        else:
+            output.write(' in only 1 dictionary.\n\n')
+    else:
+        if len(dikt_has) == len(doc):
+            output.write(' in all {} dictionaries.\n\n'.format(len(dikt_has)))
+        else:
+            output.write(' in only {} dictionaries.\n\n'.format(len(dikt_has)))
+        
+    output.write('| {} vs. Dictionary'.format(desc))
+    if all_dikts:
+        for dikt in sorted(doc):
+            output.write(' | {}'.format(dikt.replace('_', '\_')))
+    else:
+        for dikt in sorted(dikt_has):
+            output.write(' | {}'.format(dikt.replace('_', '\_')))
+    output.write(' |\n')
+
+    # format
+    output.write('|---')
+    if all_dikts:
+        for dikt in sorted(doc):
+            output.write('|--:')
+    else:
+        for dikt in sorted(dikt_has):
+            output.write('|--:')
+    output.write('|\n')
+
+    # content
+    for option in options:
+        output.write('| {}'.format(option))
+        if all_dikts:
+            for dikt in sorted(doc):
+                oc = doc[dikt]
+                if option in oc:
+                    output.write(' | {}'.format(oc[option]))
+                else:
+                    output.write(' |')
+        else:
+            for dikt in sorted(dikt_has):
+                oc = doc[dikt]
+                if option in oc:
+                    output.write(' | {}'.format(oc[option]))
+                else:
+                    output.write(' |')
+        output.write(' |\n')
+    output.write('\n\n')
+
+# followings list are manually obtained from $ man -K 5 hunspell
+options_general = ('SET', 'FLAG', 'COMPLEXPREFIXES',
+                   'LANG', 'IGNORE', 'AF', 'AM', )
+options_suggest = ('KEY', 'TRY', 'NOSUGGEST', 'MAXCPDSUGS', 'MAXNGRAMSUGS', 'MAXDIFF',
+                   'ONLYMAXDIFF', 'NOSPLITSUGS', 'SUGSWITHDOTS', 'REP', 'MAP', 'PHONE', 'WARN', 'FORBIDWARN', )
+options_compounding = ('BREAK', 'COMPOUNDRULE', 'COMPOUNDMIN', 'COMPOUNDFLAG', 'COMPOUNDBEGIN', 'COMPOUNDLAST', 'COMPOUNDMIDDLE', 'ONLYINCOMPOUND', 'COMPOUNDPERMITFLAG', 'COMPOUNDFORBIDFLAG', 'COMPOUNDMORESUFFIXES', 'COMPOUNDROOT',
+                       'COMPOUNDWORDMAX', 'CHECKCOMPOUNDDUP', 'CHECKCOMPOUNDREP', 'CHECKCOMPOUNDCASE', 'CHECKCOMPOUNDTRIPLE', 'SIMPLIFIEDTRIPLE', 'CHECKCOMPOUNDPATTERN', 'FORCEUCASE', 'COMPOUNDSYLLABLE', 'SYLLABLENUM', )  # 'COMPOUND',
+options_affix = ('PFX', 'SFX', 'CIRCUMFIX', 'FORBIDDENWORD', 'FULLSTRIP', 'KEEPCASE',
+                 'ICONV', 'OCONV', 'NEEDAFFIX', 'SUBSTANDARD', 'WORDCHARS', 'CHECKSHARPS', )
+options_deprecated = ('LEMMA_PRESENT', 'PSEUDOROOT', )
+
+# self-check
+for o in options_general:
+    if o in options_suggest:
+        print('ERROR: Overlap general and sugest')
+        exit(1)
+    if o in options_compounding:
+        print('ERROR: Overlap general and compounding')
+        exit(1)
+    if o in options_affix:
+        print('ERROR: Overlap general and affix')
+        exit(1)
+    if o in options_deprecated:
+        print('ERROR: Overlap general and deprecated')
+        exit(1)
+for o in options_suggest:
+    if o in options_compounding:
+        print('ERROR: Overlap suggest and compounding')
+        exit(1)
+    if o in options_affix:
+        print('ERROR: Overlap suggest and affix')
+        exit(1)
+    if o in options_deprecated:
+        print('ERROR: Overlap sugges and deprecated')
+        exit(1)
+for o in options_compounding:
+    if o in options_affix:
+        print('ERROR: Overlap compounding and affix')
+        exit(1)
+    if o in options_deprecated:
+        print('ERROR: Overlap compounding and deprecated')
+        exit(1)
+for o in options_affix:
+    if o in options_deprecated:
+        print('ERROR: Overlap affix and deprecated')
+        exit(1)
+
+options_found = []
+options_undocumented = []
+option_count = {}  # option / count
+
+doc = {}  # dictionary / option / count
+options = []
+dikt_has_general = []
+dikt_has_suggest = []
+dikt_has_compounding = []
+dikt_has_affix = []
+dikt_has_deprecated = []
+dikt_has_undocumented = []
+
+directory = 'usr/share/hunspell/'
+for filename in listdir(directory):
+    filepath = directory + filename
+    if filename.endswith('.aff') and path.islink(filepath):
+        print('XX', filename)
+    if filename.endswith('.dic') and not path.islink(filepath):
+        print('YY', filename)
+    if not filename.endswith('.aff') or path.islink(filepath) or filename in ('kk_KZ.aff', ):  #FIXME kk_KZ.aff has invalid first character
+        continue
+    input = None
+    print(filename)
+    if filename in ('de_AT_frami.aff', 'de_CH_frami.aff', 'de_DE_frami.aff', 'de_DE.aff', 'en_US.aff', 'pt_BR.aff', 'sl_SI.aff', 'th_TH.aff', 'ru_RU.aff', 'nn_NO.aff', 'an_ES.aff', 'af_ZA.aff', 'el_GR.aff', 'bg_BG.aff', 'de_CH.aff', 'it_IT.aff', 'hu_HU.aff', 'pl_PL.aff', 'cs_CZ.aff', 'eu.aff', 'lt_LT.aff', 'nb_NO.aff', 'oc_FR.aff', 'bs_BA.aff', 'de_AT.aff', ):
+        input = open(filepath, 'r', encoding='ISO-8859-1')
+    else:
+        input = open(filepath, 'r')
+    dikt = filename.replace('.aff', '')
+    doc[dikt] = {}
+    oc = doc[dikt]
+    for line in input:
+        if dikt == 'kk_KZ':
+            line.replace('', '')
+            print(line)
+        line = line.strip()
+        if line == '' or line.startswith('#'):
+            continue
+        while '  ' in line:  # TODO
+            line = line.replace('  ', ' ')
+        while '\t' in line:  # TODO report?
+            line = line.replace('\t', ' ')
+        br = line.split(' ')
+        option = br[0]
+#            print(option, oc[option])
+        if option not in options_found:
+            options_found.append(option)
+        if option in oc:
+            oc[option] += 1
+        else:
+            oc[option] = 1
+            if option in options_general:
+                if dikt not in dikt_has_general:
+                    dikt_has_general.append(dikt)
+            elif option in options_suggest:
+                if dikt not in dikt_has_suggest:
+                    dikt_has_suggest.append(dikt)
+            elif option in options_compounding:
+                if dikt not in dikt_has_compounding:
+                    dikt_has_compounding.append(dikt)
+            elif option in options_affix:
+                if dikt not in dikt_has_affix:
+                    dikt_has_affix.append(dikt)
+            elif option in options_deprecated:
+                if dikt not in dikt_has_deprecated:
+                    dikt_has_deprecated.append(dikt)
+            else:
+                if dikt not in dikt_has_undocumented:
+                    dikt_has_undocumented.append(dikt)
+                if option not in options_undocumented:
+                    options_undocumented.append(option)
+        if option in option_count:
+            option_count[option] += 1
+        else:
+            option_count[option] = 1
+
+output = open('option-usage.md', 'w')
+output.write('# Hunspell Option Usage per Dictionary\n\n')
+output.write('This page has been generated at {}. Do not edit this page manually.\n\n'.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S').replace(' ' , ' at ')))
+
+print('dictionaries found', len(doc))
+print('options found', len(options_found))
+
+report(output, 'General', dikt_has_general, options_general, doc, option_count, all_dikts=True)
+report(output, 'Suggest', dikt_has_suggest, options_suggest, doc, option_count)
+report(output, 'Compounding', dikt_has_compounding, options_compounding, doc, option_count)
+report(output, 'Affix', dikt_has_affix, options_affix, doc, option_count)
+report(output, 'Deprecated', dikt_has_deprecated, options_deprecated, doc, option_count)
+report(output, 'Undocumented', dikt_has_undocumented, options_undocumented, doc, option_count)
diff --git a/src/tools/optionusage/download.sh b/src/tools/optionusage/download.sh
new file mode 100755
index 0000000..63d1d92
--- /dev/null
+++ b/src/tools/optionusage/download.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+
+PACKAGES=`apt-cache search hunspell|grep ^hunspell|grep dict|awk '{print $1}'|tr '\n' ' '`
+echo $PACKAGES|sed 's/ /\n/g'
+
+if [ -e usr ]
+then
+    rm -rf usr
+fi
+if [ -e var ]
+then
+    rm -rf var
+fi
+
+if [ -e debs ]
+then
+    rm -rf debs
+fi
+mkdir debs
+
+cd debs
+apt-get download $PACKAGES
+for i in *.deb
+do
+    dpkg -x $i ..
+done
+cd ..
+
+if [ -e debs ]
+then
+    rm -rf debs
+fi
+if [ -e var ]
+then
+    rm -rf var
+fi
+if [ -e usr/share/myspell ]
+then
+    rm -rf usr/share/myspell
+fi
+if [ -e usr/share/doc ]
+then
+    rm -rf usr/share/doc
+fi
diff --git a/src/tools/optionusage/option-usage.md b/src/tools/optionusage/option-usage.md
new file mode 100644
index 0000000..2146f35
--- /dev/null
+++ b/src/tools/optionusage/option-usage.md
@@ -0,0 +1,121 @@
+# Hunspell Option Usage per Dictionary
+
+This page has been generated at 2017-04-25 at 23:17:56. Do not edit this page manually.
+
+## General Options
+
+A total of 7 general different options are recognised by Hunspell. Of these, only 6 different options are used in all 63 dictionaries.
+
+| General vs. Dictionary | af\_ZA | an\_ES | ar | be\_BY | bg\_BG | bn\_BD | bo | br\_FR | bs\_BA | ca | ca\_ES-valencia | cs\_CZ | da\_DK | de\_AT\_frami | de\_CH\_frami | de\_DE\_frami | el\_GR | en\_AU | en\_CA | en\_GB | en\_US | en\_ZA | es\_ES | eu | fr | gd\_GB | gl\_ES | gu\_IN | he\_IL | hi\_IN | hr\_HR | hu\_HU | is\_IS | it\_IT | kmr\_Latn | ko | lo\_LA | lt\_LT | ml\_IN | nb\_NO | ne\_NP | nl\_NL | nn\_NO | oc\_FR | pl\_PL | pt\_BR | pt\_PT | ro\_RO | ru\_RU | se | si\_LK | s [...]
+|---|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|
+| SET | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
+| FLAG | | | 1 | | | | | 1 | | 1 | 1 | | 1 | | | | | | | | | | | 1 | 1 | | 1 | | | | 1 | | 1 | | | 1 | | | | | 1 | 1 | | | | | | | | 1 | 1 | | | | | | | | | | | | |
+| COMPLEXPREFIXES | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+| LANG | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1 | | 1 | | 1 | | | | | | | | | | | 1 | | | | | | | 1 | 1 | | | | | | | | |
+| IGNORE | | | 1 | | | | 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1 | | |
+| AF | | | 512 | | | | | | | | | | | | | | | | | | | | | | 277 | | | | | | 99 | 1307 | | | | 56 | | | | | | | | | | | | | | 3501 | | | | | | | | | | | | | |
+| AM | | | 23625 | | | | | | | | | | | | | | | | | | | | | | 485 | | | | | | | 23051 | 701 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+
+
+## Suggest Options
+
+A total of 14 suggest different options are recognised by Hunspell. Of these, only 12 different options are used in only 60 dictionaries.
+
+| Suggest vs. Dictionary | af\_ZA | an\_ES | ar | be\_BY | bg\_BG | bn\_BD | bo | br\_FR | bs\_BA | ca | ca\_ES-valencia | cs\_CZ | da\_DK | de\_AT\_frami | de\_CH\_frami | de\_DE\_frami | el\_GR | en\_AU | en\_CA | en\_GB | en\_US | en\_ZA | es\_ES | eu | fr | gd\_GB | gl\_ES | gu\_IN | he\_IL | hi\_IN | hr\_HR | hu\_HU | is\_IS | it\_IT | kmr\_Latn | ko | lt\_LT | nb\_NO | ne\_NP | nl\_NL | nn\_NO | oc\_FR | pl\_PL | pt\_BR | pt\_PT | ro\_RO | ru\_RU | se | si\_LK | sk\_SK | sl\_SI | s [...]
+|---|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|
+| KEY | | | 1 | | | | | | | 1 | 1 | | 1 | | | | | | | | 1 | | | | 1 | | 1 | | | | | 1 | 1 | | | | | | | 1 | | | | | 1 | 1 | | | | | | 1 | 1 | | | | | | | |
+| TRY | 1 | 1 | 1 | 1 | 1 | 1 | | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | | 1 | 1 |
+| NOSUGGEST | | | | | | | | | | | | | 1 | 1 | 1 | 1 | | 1 | 1 | 1 | 1 | 1 | | | 1 | | | | | | 1 | 1 | | | | | | | | 1 | | | | 1 | | | | | | | | | | 1 | 1 | | | | | |
+| MAXCPDSUGS | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1 | 1 | | | | | |
+| MAXNGRAMSUGS | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | |
+| MAXDIFF | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | 1 | 1 | | | | | |
+| ONLYMAXDIFF | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | 1 | 1 | | | | | |
+| NOSPLITSUGS | 1 | | | | | | 1 | | | | | | 1 | | | | | | | | | | | 1 | | | 1 | | | | | | 1 | | | | | | | 1 | | | | | | | | | | | | | | 1 | 1 | | | | | |
+| SUGSWITHDOTS | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+| REP | 28 | 114 | 81 | 36 | | | 7 | | | 49 | 49 | | 113 | 29 | 29 | 29 | 523 | 115 | 91 | 28 | 98 | 37 | 21 | 37 | 83 | 49 | 3737 | | | | 100 | 125 | 58 | 5 | 37 | 60 | | | 23 | 488 | | | 65 | 1056 | 26 | 5 | | 74 | 26 | 53 | | 2 | 9 | 60 | 60 | | | 5 | 6 | 19 |
+| MAP | 7 | 37 | 17 | 21 | 27 | | | | | 25 | 25 | | | | | | 6 | | | | | | 6 | | 26 | 6 | 22 | | 11 | | | 6 | | 6 | | 13 | | | | 6 | | 6 | 9 | 7 | 12 | 9 | | | | | | 5 | 5 | 3 | 3 | | | | | 19 |
+| PHONE | | | | | | | | | | | | | | | | | | 105 | | | 106 | 105 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+| WARN | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | |
+| FORBIDWARN | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+
+
+## Compounding Options
+
+A total of 22 compounding different options are recognised by Hunspell. Of these, only 21 different options are used in only 25 dictionaries.
+
+| Compounding vs. Dictionary | be\_BY | da\_DK | de\_AT\_frami | de\_CH\_frami | de\_DE\_frami | en\_AU | en\_CA | en\_GB | en\_US | en\_ZA | eu | fr | gd\_GB | he\_IL | hr\_HR | hu\_HU | ko | nb\_NO | nl\_NL | nn\_NO | pt\_BR | se | sv\_FI | sv\_SE | uk\_UA |
+|---|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|
+| BREAK | 3 | | 3 | 3 | 3 | 4 | | | | 4 | 2 | 8 | 2 | 4 | 3 | 5 | | | 2 | | 65 | 2 | 4 | 4 | 2 |
+| COMPOUNDRULE | | | | | | 3 | 3 | 3 | 3 | | | | | | 8 | 3 | 7 | | | | | | 13 | 13 | |
+| COMPOUNDMIN | | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | | | | | | 1 | 1 | 1 | 1 | 1 | 1 | | | 1 | 1 | |
+| COMPOUNDFLAG | | | | | | | | | | | | | | | 1 | 1 | | 1 | | 1 | | | | | |
+| COMPOUNDBEGIN | | 1 | 1 | 1 | 1 | | | | | | | | | | 1 | 1 | | | 1 | | | 1 | 1 | 1 | |
+| COMPOUNDLAST | | | | | | | | | | | | | | | | 1 | | | | | | | | | |
+| COMPOUNDMIDDLE | | 1 | 1 | 1 | 1 | | | | | | | | | | 1 | | | | 1 | | | 1 | 1 | 1 | |
+| ONLYINCOMPOUND | | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | | | | | | 1 | 1 | | | 1 | | | 1 | 1 | 1 | |
+| COMPOUNDPERMITFLAG | | 1 | 1 | 1 | 1 | | | | | | | | | | 1 | 1 | | | 1 | | | 1 | 1 | 1 | |
+| COMPOUNDFORBIDFLAG | | | | | | | | | | | | | | | 1 | 1 | | | | | | 1 | | | |
+| COMPOUNDMORESUFFIXES | | | | | | | | | | | | | | | | | | | | | | | | | |
+| COMPOUNDROOT | | | | | | | | | | | | | | | | 1 | | | | | | | | | |
+| COMPOUNDWORDMAX | | 1 | | | | | | | | | | | | | | 1 | | | | | | | | | |
+| CHECKCOMPOUNDDUP | | | | | | | | | | | | | | | | 1 | | | 1 | | | | 1 | 1 | |
+| CHECKCOMPOUNDREP | | | | | | | | | | | | | | | | 1 | | | | | | | 1 | 1 | |
+| CHECKCOMPOUNDCASE | | | | | | | | | | | | | | | | 1 | | | 1 | | | | | | |
+| CHECKCOMPOUNDTRIPLE | | | | | | | | | | | | | | | | 1 | | 1 | | | | | 1 | 1 | |
+| SIMPLIFIEDTRIPLE | | | | | | | | | | | | | | | | | | 1 | | | | | 1 | 1 | |
+| CHECKCOMPOUNDPATTERN | | | | | | | | | | | | | | | | 8 | | | 43 | | | | | | |
+| FORCEUCASE | | | | | | | | | | | | | | | | | | | | | | | 1 | 1 | |
+| COMPOUNDSYLLABLE | | | | | | | | | | | | | | | | 1 | | | | | | | | | |
+| SYLLABLENUM | | | | | | | | | | | | | | | | 1 | | | | | | | | | |
+
+
+## Affix Options
+
+A total of 12 affix different options are recognised by Hunspell. All of these options are used in only 54 dictionaries.
+
+| Affix vs. Dictionary | af\_ZA | an\_ES | ar | be\_BY | bg\_BG | bo | br\_FR | bs\_BA | ca | ca\_ES-valencia | cs\_CZ | da\_DK | de\_AT\_frami | de\_CH\_frami | de\_DE\_frami | el\_GR | en\_AU | en\_CA | en\_GB | en\_US | en\_ZA | es\_ES | eu | fr | gd\_GB | gl\_ES | he\_IL | hr\_HR | hu\_HU | is\_IS | it\_IT | kmr\_Latn | ko | lt\_LT | nb\_NO | ne\_NP | nl\_NL | nn\_NO | oc\_FR | pl\_PL | pt\_BR | pt\_PT | ro\_RO | ru\_RU | se | si\_LK | sk\_SK | sl\_SI | sr\_Latn\_RS | sr\_RS | sv\_FI [...]
+|---|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|
+| PFX | 20 | 58 | 194 | 10 | | | 27 | | 132 | 132 | 19 | 264 | 68 | 68 | 68 | 10 | 38 | 14 | 36 | 14 | 36 | 78 | 12 | 216 | 34 | | 3335 | | 366 | | 489 | 36 | | 90 | 41 | 2 | 154 | 41 | 16 | 2 | 162 | 38 | 26 | | | | 4 | 10 | | | | | 5 | 6 |
+| SFX | 75 | 996 | 1609 | 879 | 1652 | 40 | 355 | 998 | 13318 | 13368 | 2551 | 1034 | 437 | 437 | 437 | 179 | 1078 | 59 | 1078 | 59 | 1078 | 6767 | 94118 | 9735 | 7 | 8586 | | 534 | 24052 | 13282 | 2744 | 80 | 55722 | 2586 | 495 | 525 | 447 | 383 | 708 | 7102 | 25770 | 1302 | 1624 | 1606 | 371599 | 10000 | 2443 | 526 | | | 492 | 492 | | 4477 |
+| CIRCUMFIX | | | | | | | | | | | | | 1 | 1 | 1 | | | | | | | | | 1 | | | | 1 | | | | | | | | | | | | | | | | | | | | | | | | | | |
+| FORBIDDENWORD | | | | | | | | | 1 | 1 | | 1 | 1 | 1 | 1 | | | | | | | | | 1 | | | | 1 | 1 | | | | 1 | | | | 1 | | | | 1 | | | | | | | | | | 1 | 1 | | |
+| FULLSTRIP | | | | | | | | | 1 | 1 | | | | | | | | | | | | | | 1 | | | | | | 1 | | | | | | | | | | | | | | | | | | | | | 1 | 1 | | |
+| KEEPCASE | | | | | | | | | | | | | 1 | 1 | 1 | | | | | | | | | 1 | | 1 | | 1 | 1 | | | | | | | | 1 | | | | | | | | | | | | | | | | | |
+| ICONV | | | 10 | | | | | | | | | | | | | | 7 | 2 | | | 7 | | | 42 | 2 | | | 29 | 6 | | | | 11173 | | | | 10 | | | | | | | | | | | | 5 | 4 | | | | |
+| OCONV | | | | | | | | | | | | | | | | | 2 | | | | 2 | | | 2 | | | | | | | | | 11173 | | | | 3 | | | | | | | | | | | | | | | | | |
+| NEEDAFFIX | | | | | | 1 | | | | | | 1 | 1 | 1 | 1 | | | | | | | | | 1 | | 1 | 1 | 1 | 1 | | | | | | | | | | | | | | | | 1 | | | | | | 1 | 1 | | |
+| SUBSTANDARD | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1 | 1 | | | | | | | | | | | | | | | | | | | | | | | | | |
+| WORDCHARS | | | | 1 | | | 1 | | 1 | 1 | | 1 | 1 | 1 | 1 | | 1 | 1 | 1 | 1 | | | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | | | 1 | | | | 1 | | | 1 | | 1 | | | 1 | | | | | | 1 | 1 | | 1 |
+| CHECKSHARPS | | | | | | | | | | | | | 1 | 1 | 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+
+
+## Deprecated Options
+
+A total of 2 deprecated different options are recognised by Hunspell. Of these, only 1 option is used in only 1 dictionary.
+
+| Deprecated vs. Dictionary | hu\_HU |
+|---|--:|
+| LEMMA_PRESENT | 1 |
+| PSEUDOROOT | |
+
+
+## Undocumented Options
+
+A total of 12 undocumented different options are recognised by Hunspell. All of these options are used in only 15 dictionaries.
+
+| Undocumented vs. Dictionary | bo | da\_DK | de\_AT\_frami | de\_CH\_frami | de\_DE\_frami | en\_AU | gd\_GB | hr\_HR | hu\_HU | it\_IT | ko | nl\_NL | se | sv\_FI | sv\_SE |
+|---|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|
+| LANGCODE | 1 | | | | | | | | | | | | | | |
+| NAME | | | | | | | | | 1 | 1 | | | | | |
+| HOME | | | | | | | | | 1 | 1 | | | | | |
+| VERSION | | | | | | | | | 1 | 1 | 1 | | | | |
+| COMPOUNDFIRST | | | | | | | | | 1 | | | | | | |
+| ONLYROOT | | | | | | | | | 1 | | | | | | |
+| HU_KOTOHANGZO | | | | | | | | | 1 | | | | | | |
+| COMPOUNDEND | | 1 | 1 | 1 | 1 | | | 1 | 1 | | | 1 | 1 | 1 | 1 |
+| GENERATE | | | | | | | | | 1 | | | | | | |
+| LEFTHYPHENMIN | | | | | | | 1 | | | | | | | | |
+| MIDWORD | | | | | | 1 | | | | | | | | | |
+| BAD | | | | | | 1 | | | | | | | | | |
+
+
diff --git a/src/tools/unmunch.cxx b/src/tools/unmunch.cxx
index 44b4cb1..82c2f9d 100644
--- a/src/tools/unmunch.cxx
+++ b/src/tools/unmunch.cxx
@@ -272,6 +272,7 @@ int parse_aff_file(FILE* afflst) {
               }
                 fprintf(stderr, "   affix: %s %d, strip: %s %d\n", nptr->appnd,
                         nptr->appndl, nptr->strip, nptr->stripl);
+                // no break
               default:
                 break;
             }

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



More information about the Pkg-openoffice-commits mailing list